历史上的今天
返回首页

历史上的今天

今天是:2025年02月06日(星期四)

正在发生

2020年02月06日 | STM8S003F3 使用TIM1_CH1与TIM1_CH2配置PWM输出

2020-02-06 来源:eefocus

最近一个项目,用的是STM8S003F3这款小型的MCU,使用TIM1_CH1 TIM_CH2作为PWM输出时,遇到了问题,代码下载后,PWM是没有任何输出的。用示波器看,应该是PWM没有任何输出。

首先在网上找了下资料,又看了官方的例程,感觉代码没有问题。后来仔细查看问题,终于找到解决的方案。


原来根据STM8S003F3的数据手册,需要配置一个选项字节才能使能TIM1_CH1与TIM1_CH2。

配置的方法有两种:


(1)使用STVP(STM32与STM8)烧写的软件,在烧写固件时,配置一下,下载到芯片,其实这个保存在DataFlash中,理论上配置一次,再使用ST-LINK下载,就一直生效。

(2)方法二,STM8S的固件库里,是有编程这个选项字节的功能的,只需要调用,在初始化时把相应的字节编程一下即可,重启生效,然后就可以一直使用了。


#ifdef __ENABLE_TIM1_CH1_CH2__

 

#define TIM1_OptionAddr (0x4803)        //OPT2 BIT1

 

void Enable_TIM1_CH1CH2_OptionByte(void)

{

  uint16_t TIM1_Option_status;/*记录激活备选功能Beep/TIM2_CH1的状态*/

  TIM1_Option_status = FLASH_ReadOptionByte(TIM1_OptionAddr);

  /* ARF0 BIT: 1 enable TIM1 CH1 CH2 */

  if((TIM1_Option_status&0x0100) == 0x00)

  {

    FLASH_Unlock(FLASH_MEMTYPE_DATA);

    FLASH_ProgramOptionByte(TIM1_OptionAddr, (uint8_t)(0x01));

    FLASH_Lock(FLASH_MEMTYPE_DATA);

    /*使能TIM1 CH1 CH2 PWM */

    Delay_ms(10);

    WWDG_SWReset();

  }

}

#endif


STM8S003F3的TIM1 配置PWM的代码如下:


void TIM1_PWM_Init(void)

{

  GPIO_Init(PWM1_GPIO_PORT, PWM1_GPIO_PINS, GPIO_MODE_OUT_PP_LOW_FAST);

  GPIO_Init(PWM2_GPIO_PORT, PWM2_GPIO_PINS, GPIO_MODE_OUT_PP_LOW_FAST);

  GPIO_Init(PWM3_GPIO_PORT, PWM3_GPIO_PINS, GPIO_MODE_OUT_PP_LOW_FAST);

  GPIO_Init(PWM4_GPIO_PORT, PWM4_GPIO_PINS, GPIO_MODE_OUT_PP_LOW_FAST);

  CLK_PeripheralClockConfig(CLK_PERIPHERAL_TIMER1,ENABLE);

  TIM1_DeInit();

  TIM1_Cmd(DISABLE);

  TIM1_TimeBaseInit(TIM1_Prescaler0, TIM1_COUNTERMODE_UP, T1_MAXPWM-1, 0);//16M/200=80K

 

  /* Channel 1, 2,3 and 4 Configuration in PWM mode */

 

  /*

  TIM1_OCMode = TIM1_OCMODE_PWM2

  TIM1_OutputState = TIM1_OUTPUTSTATE_ENABLE

  TIM1_OutputNState = TIM1_OUTPUTNSTATE_DISABLE

  TIM1_Pulse = CCR1_Val

  TIM1_OCPolarity = TIM1_OCPOLARITY_LOW

  TIM1_OCNPolarity = TIM1_OCNPOLARITY_HIGH

  TIM1_OCIdleState = TIM1_OCIDLESTATE_SET

  TIM1_OCNIdleState = TIM1_OCIDLESTATE_RESET

  */

 

  TIM1_OC1Init(TIM1_OCMODE_PWM2, TIM1_OUTPUTSTATE_ENABLE, TIM1_OUTPUTNSTATE_DISABLE,

               100, TIM1_OCPOLARITY_LOW, TIM1_OCNPOLARITY_HIGH, TIM1_OCIDLESTATE_SET,

               TIM1_OCNIDLESTATE_RESET);

 

  TIM1_OC2Init(TIM1_OCMODE_PWM2, TIM1_OUTPUTSTATE_ENABLE, TIM1_OUTPUTNSTATE_DISABLE,

               100, TIM1_OCPOLARITY_LOW, TIM1_OCNPOLARITY_HIGH, TIM1_OCIDLESTATE_SET,

               TIM1_OCNIDLESTATE_RESET);

 

  TIM1_OC3Init(TIM1_OCMODE_PWM1, TIM1_OUTPUTSTATE_ENABLE, TIM1_OUTPUTNSTATE_DISABLE,

               100, TIM1_OCPOLARITY_LOW, TIM1_OCNPOLARITY_HIGH, TIM1_OCIDLESTATE_SET,

               TIM1_OCNIDLESTATE_RESET);

 

  TIM1_OC4Init(TIM1_OCMODE_PWM1, TIM1_OUTPUTSTATE_ENABLE,

               180, TIM1_OCPOLARITY_LOW, TIM1_OCIDLESTATE_RESET);

 

  TIM1_OC1PreloadConfig(ENABLE);

  TIM1_OC2PreloadConfig(ENABLE);

  TIM1_OC3PreloadConfig(ENABLE);

  TIM1_OC4PreloadConfig(ENABLE);

  TIM1_CCxCmd(TIM1_CHANNEL_1, ENABLE);

  TIM1_CCxCmd(TIM1_CHANNEL_2, ENABLE);

  TIM1_CCxCmd(TIM1_CHANNEL_3, ENABLE);

  TIM1_CCxCmd(TIM1_CHANNEL_4, ENABLE);

  TIM1_CtrlPWMOutputs(ENABLE);

  TIM1_Cmd(ENABLE);

}


经过测试,STM8S003F3 的Timer1 四个PWM通道输出均正常了。看来,小小的MCU,还是需要深入研究并使用的。

推荐阅读

史海拾趣

科达嘉CODACA公司的发展小趣事

随着电子行业的快速发展,科达嘉意识到技术革新是企业持续发展的关键。因此,公司不断增加自动化生产设备,购置先进的质量测试仪器,并筹建了电感元器件分析实验室和标准的AEC-Q200可靠性实验室。这些举措大大增强了公司的研发分析能力,提升了产品质量和生产效率。科达嘉逐渐形成了以材料研发、产品研发、生产、质量及物控为基础的完整产业链。

Altech公司的发展小趣事

在电子行业的发展历程中,Altech公司凭借其敏锐的市场洞察力,率先投入研发铝合金汽车线束导体。随着新能源汽车市场的崛起,对高效、轻量化的线束导体需求日益增长。Altech公司成功研发出铝合金汽车线束导体,不仅满足了市场对轻量化的需求,还提高了导电性能,为新能源汽车行业带来了革命性的变革。

COTO TECHNOLOGY公司的发展小趣事

随着电子行业的不断发展,小型化、集成化成为产品设计的趋势。COTO TECHNOLOGY紧跟时代潮流,于1983年成功研发出史上首款表面贴装干簧继电器。这一技术的突破不仅提高了产品的生产效率,更使得COTO的产品在小型化方面走在了行业前列。这一创新不仅增强了COTO在市场上的竞争力,也进一步巩固了其在干簧继电器领域的领导地位。

GE Power Electronics Inc公司的发展小趣事
作为儿童玩具的一部分,通过声音控制播放音乐,增加玩具的趣味性和互动性。
Frequency Management International公司的发展小趣事

随着业务的不断发展,FMI开始积极拓展国内外市场。公司凭借高品质的产品和专业的服务,赢得了众多客户的信赖和支持。同时,FMI还积极实施国际化战略,通过参加国际展会、建立海外销售网络等方式,不断提升品牌国际影响力。目前,FMI的产品已经广泛应用于计算机外设、工业仪器、局域网/广域网、光网络、过程控制、电信和无线产品等多个领域,并远销全球多个国家和地区。

AAT [Advanced Analog Technology, Inc.]公司的发展小趣事

FMI深知质量是企业生存和发展的根本。因此,公司一直将质量管理放在首位,建立了完善的质量管理体系。从原材料采购到生产加工、成品检验等各个环节都严格把关,确保产品质量符合客户要求。同时,FMI还注重客户服务体验的提升,为客户提供及时、专业的技术支持和解决方案。这些努力使得FMI在客户心中树立了良好的口碑和形象。

问答坊 | AI 解惑

关于程序入口问题

我买的tq2440的板子。现有如下疑问。如果有编写一个小于4KB的.bin程序可以直接被“进阶石”载入。那么这bin文件的-ro-base 和 entry 怎么设置?是填“进阶石”的映射地址0x0 还是填内存地址0x30000000 ? 随机送的启动代码中,有个函数copy-from-fl ...…

查看全部问答>

verilog case语句嵌套

always@(posedge iCLK or negedge iRST) if(!iRST) max 3;        // 6/16     0:max >4; // 5/16     1:max >2;     // 4/16     2:max >4; // 3/16 ...…

查看全部问答>

windows mobile5 平台转 wince5的问题

小弟现在要将wm5做的一个项目转移到wince5下,希望有经验的兄弟们指点一下。 应该怎么做,要新建项目码?那么多文件怎么办? 项目是用vs2005 c++做的。…

查看全部问答>

cepc下的usb驱动问题,跪求解答!!!

用pb5.0做了个pc上运行的映像,可以在正常下载和启动 但是在目标pc上插上u盘后没有反应 请问定制映像时还应该添加什么组件,才能让它认出u盘啊 多谢各位啦!!!…

查看全部问答>

请问现在哪个厂家生产的音频类控件最好?在什么地方能够买到?

美国Ligos公司是一家专门从事音频,视频控件开发的厂商,所生产的音频,视频类控件功能相当强大,为软件产品的开发提高了效率,也节约了成本,在全球都是享有地位的! 在慧都控件网能买到!重庆慧都科技有限公司---提供专业的控件产品咨询,代理全 ...…

查看全部问答>

关于fft

今天碰到一个问题,由于处理需要用到fft变换所以采用了一下的fft函数,函数在vc上运行正确,在我的ST STM32F10xxE上运行,结果运行函数不正确,应该是编译器的问题,但是不知道有什么方法可以修改一下函数使得结果正确,望高手解答,谢谢 ...…

查看全部问答>

关于并口和USB仿真器的问题

最近正在用FE425做一个程序,用并口调试时读不到SD16的转换结果,但是同样的设置(只是把下载器设置改了一下)USB仿真器却可以读出来。为什么呢???…

查看全部问答>

关于fpga的问题

我在看cyclone 3的用户手册,里面看到pll锁相环的关于programme duty cycle不是很懂什么意思 The programmable duty cycle allows PLLs to generate clock outputs with a variableduty cycle. This feature is supported on the PLL post-scale c ...…

查看全部问答>

10路由器,40终端节点的网络,组网一段时间后无法发送向协调器发送数据

协议栈2.5 网络结构 1 协调器,10路由器,40终端节点。 组网后协调器向所有路由器和终端节点广播数据,路由和终端节点收到数据后回复。 组网10分钟左右,路由器和终端节点可以收到协调器广播数据,但是回复数据协调器无法收到 重启协调器,可以 ...…

查看全部问答>

诚聘嵌入式单片机工程师写作者

诚聘嵌入式单片机工程师写作者 职位描述 1、不需要坐班,业余时间较多。要求对单片机的软硬件开发均比较熟悉. 2、熟悉ARM,熟悉硬件原理图、PCB的设计,有多层板设计经验。有工控产品和测控产品研发经验者优 先. 3、精通C语言开发,编码规范 ...…

查看全部问答>