STM32CubeMX配置定时器实现1KHz的PWM输出 6 l( R8 @" Y% q' y1 C, ^8 l! g# c: m$ H 一、STM32CubeMX STM32CubeMX是ST公司推出的自动创建工程及初始化代码的工具,适用于旗下所有STM32系列产品。此软件需要安装JAVA运行环境。6 ^2 R! U8 C, y5 B8 _ 9 l9 ]/ K) ~- Z2 x" B6 J % y4 V0 X! I" Z% H& j 二、TIM定时器 从参考手册可知STM32的定时器除了基本定时器(TIM6、TIM7)外,其他的都可以产生PWM输出,我们以TIM2定时器的CHANNEL2为例,输出1Khz的方波。 从定时器图框中可以看出主要相关部分是计数器时钟的选择、时基单元以及PWM输出。 参考手册里这一块大概就是说,PWM计数模式分为向上计数和向下计数模式,当TIMx_CNT<TIMx_CCRx时PWM信号参考OCxREF为高,否则为低。如果TIMx_CCRx中的比较值大于自动重装载值(TIMx_ARR),则OCxREF保持为’1’。如果比较值为0,则OCxREF保持为’0’;在PWM模式1,当TIMx_CNT>TIMx_CCRx时参考信号OCxREF为低,否则为高。如果TIMx_CCRx中的比较值大于TIMx_ARR中的自动重装载值,则OCxREF保持为’1’。该模式下不能产生0%的PWM波形;当TIMx_CR1寄存器中的CMS位不为’00’时,为中央对齐模式(所有其他的配置对OCxREF/OCx信号都有相同的作用)。根据不同的CMS位设置,比较标志可以在计数器向上计数时被置’1’、在计数器向下计数时被置’1’、或在计数器向上和向下计数时被置’1’。TIMx_CR1寄存器中的计数方向位(DIR)由硬件更新,不要用软件修改它。- K6 T) O' b9 D' }4 h Bit1和Bit0在PWM输出模式下,确定PWM的的输出极性和输出使能。5 S' H+ S1 ~, ?* y8 N; K# Y+ s% ~0 r TIMx_CCR1寄存器确定PWM输出模式下比较的值。2 R' e8 [' p+ e3 W7 e8 H 三、STM32CubxMX配置$ K7 z' e$ ^. z; E/ v. u 使用定时器PWM功能,选择TIM2 CLock Source为Internal Clock,通道2选择PWM Generation CH2。 参数配置如图" @- }# h8 e( m3 \( K 然后时钟源等配置不做过多说明,可以参见工程代码中的配置情况,点击生成代码,使用Keil打开。 四、代码修改9 h& i( ?! n" o Keil5打开工程代码后,添加调用HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_2)函数,定义变量uint16_t dutyCycle = 0,然后while循环函数如下:
编译下载,使用示波器捕获即可看到1Khz的方波。 |
【STM32C0测评】外部中断控制小灯
意法半导体最具性价比、速度最快的单核MPU STM32MP13现已支持运行RTOS
【NUCLEO-U083RC评测】移植TouchGFX并实现无接触翻页
[NUCLEO-C031C6评测] 驱动LCD 第三步 显示颜色块
[NUCLEO-C031C6评测] 驱动LCD 第二步 初始化屏幕
[NUCLEO-C031C6评测] 驱动LCD第一步
【STM32MP135-DK】裸机开发
STM32MP135F-DK 开箱&开发环境搭建&硬件设计分析
【STM32U599】4.引入RTC与MVP开发
基于STM32CUBEMX驱动TMOS模块STHS34PF80之获取状态数据(5)