欢迎光临散文网 会员登陆 & 注册

STM32Cubev6 PWM波输出

2021-02-14 01:49 作者:僚机Wingplane  | 我要投稿

工作环境:

STM32CubeMXv6

Keil5

    PWM波输出和时钟有关,所以我们需要先配置时钟,打开左侧的下拉框System Core,点击RCC选项;

    我选用的是8M的外部高速时钟(以实际情况为准),在下方的配置框中更改High Speed Clock(HSE)为Crystal/Ceramic Resonator;

    配置HSE为8Mhz,APB1为54Mhz;

        打开左侧的下拉框Timers,点击TIM3选项;

    打开PWM Channel1(通道一)和 PWM Channel2(通道二)选择为PWM Generation CH1和PWM Generation CH2,此时我们可得到两路频率相同的方波,因为他们用的是同一个定时器,如果需要生成不同频率的PWM波那么我们就需要开启两个不同的定时器。

Input Capture direct mode:输入直接捕获模式

Input Capture indirect mode:输入间接捕获模式

Input Capture triggered by TRC:TRC触发输入捕获

Output Compare No Output:输出比较无输出

Output Compare CH1:输出比较CH1

PWM Generation No Output:PWM生成无输出

PWM Generation CH1:PWM生成CH1

Forced Output CH1:强制输出CH1

    我首先需要配置一个1ms触发一次的定时器中断(1Khz),我们先通过芯片对应的datasheet查到TIM6是在APB1上的,我们通过RCC配置它为54Mhz(最高),根据公式

Tout = (PSC+1)* (ARR+1)/Tclk

得到预分频值为1(实际填入需要-1,所以在配置中填入0),自动重载值为54000-1=53999,允许自动重载;

PWM模式我们选择PWM Mode 1; 

   PWM Mode 1:在向上计数时,一旦TIMx_CNT<TIMx_CCR1时通道1为有效电平,否则为无效电平;在向下计数时,一旦TIMx_CNT>TIMx_CCR1时通道1为无效电平,否则为有效电平。

    PWM Mode 2:在向上计数时,一旦TIMx_CNT<TIMx_CCR1时通道1为无效电平,否则为有效电平;在向下计数时,一旦TIMx_CNT>TIMx_CCR1时通道1为有效电平,否则为无效电平。

    比较寄存器分别设置为13499(占空比25%)和26999(占空比50%);

    注意,如果需要输出两个不同频率的PWM波则需要两个定时器;

    通道输出极性为Low;

设置完成后

    点击Project Manager页面,输入工程名和工程位置,选择工具链和IDE为MDK-ARM,版本为5.27;

    打开左侧Code Generater菜单勾选Generate peripheral initialization as a pair of'.c/.h'file per peripheral; 

    最后点击右上角的GENERATE CODE按钮后生成代码。

    生成代码后打开工程文件夹,用Keil5打开工程。

    编译

    在while循环前初始化加入启动PWM输出

   其中,第一个参数为TIM定时器名,第二个参数为通道名

   运行,即可生成两路频率为1Khz,占空比分别为25%和50%的方波。

   如果需要更改PWM波的占空比,可以使用__HAL_TIM_SetCompare()

    其中,第一个参数为TIM定时器名,第二个参数为通道名,第三个参数为CCRx的值

参考资料:

STM32F7开发指南-HAL库版本_V1.1

HAL库教程10:定时器的PWM模式应用   https://yatao.blog.csdn.net/article/details/89326363


STM32Cubev6 PWM波输出的评论 (共 条)

分享到微博请遵守国家法律