通过配置CubeMX的TIMER的PWM初始化实现硬件PWM呼吸灯闪烁

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 一、前言
  • 二、准备事项
    • 2.1:板载资料
    • 2.2:软硬件准备
    • 2.3:原理分析
    • 2.4:代码调用
  • 三、CUBE MX配置
    • 3.1:新建工程
    • 3.2:RCC配置
    • 3.3:Clock Configuration配置
    • 3.4:Debug串行口调试配置
    • 3.5:Timers配置
  • 四、库函数的使用
    • 4.1:编译代码
    • 4.2:查看timer程序初始化
    • 4.3:使用库函数操作PWM
  • 五、下载程序验证代码
  • 总结

一、前言

脉宽调制PWM在很多自动化领域应用广泛,本文通过配置CubeMX的TIMER的PWM(脉宽调制)初始化实现硬件PMW呼吸灯闪烁

二、准备事项

2.1:板载资料

以STM32F411CEU6为核心的手工模块板
通过配置CubeMX的TIMER的PWM初始化实现硬件PWM呼吸灯闪烁_第1张图片

2.2:软硬件准备

a:STM32CubeMX 6.61
b:IAR集成开发环境(8.32以上版本)
c:STlink烧录工具
d:STM32F411CEU6手工模块板
e:LED灯一个

2.3:原理分析

PWM实现呼吸灯效果的原理:使PWM的占空比有小变大,再由大变小的过程,当占空比由小变大过程中亮度逐渐上升,当占空比由大变小过程中亮度逐渐下降,而实现这一过程需要在中断回调函数中改变占空比,具体在函数中表现为index++至index–,具体可看代码中断回调部分。

2.4:代码调用

//PWM中断方式启动定时器
HAL_TIM_PWM_Start_IT(&htim10,TIM_CHANNEL_1);

//产生PWM完成中断回调函数,当PWM产生完成会触发进入中断调用本函数
void HAL_TIM_PWM_PulseFinishedCallback(TIM_HandleTypeDef *htim)
{
    static uint32_t index=0;
    static uint8_t step=0;
    
    switch(step)
    {
        case 0:
        {
            __HAL_TIM_SET_COMPARE(&htim10,TIM_CHANNEL_1,index); //设置占空比
            index++; //增大占空比
            if(index>=1000)
            {
                step=1;
            }
        }
        break;
        
        case 1:
        {
            __HAL_TIM_SET_COMPARE(&htim10,TIM_CHANNEL_1,index); //设置占空比
            index--; //减小占空比
            if(index==0)
            {
                step=0;
            }
        }
        break;
    }
}

三、CUBE MX配置

3.1:新建工程

点击File-New project-搜索选择STM32F411CEU6-双击新建工程
通过配置CubeMX的TIMER的PWM初始化实现硬件PWM呼吸灯闪烁_第2张图片

3.2:RCC配置

配置单片机外部的晶振作为时钟源 System Core-RCC-High Speed Clock 将默认的Disable选项改为Crystal/Ceramic Resonator
通过配置CubeMX的TIMER的PWM初始化实现硬件PWM呼吸灯闪烁_第3张图片

3.3:Clock Configuration配置

选择Clock Configuration时钟树,将默认的HSI改为HSE选项,意思是选择外部的时钟源
通过配置CubeMX的TIMER的PWM初始化实现硬件PWM呼吸灯闪烁_第4张图片

将主时钟源改为最大,点击回车确定,系统将自动配置相关外设参数
通过配置CubeMX的TIMER的PWM初始化实现硬件PWM呼吸灯闪烁_第5张图片

3.4:Debug串行口调试配置

点击System Core-SYS-Debug,将默认的no debug改为Serial Wire(串行调试)
通过配置CubeMX的TIMER的PWM初始化实现硬件PWM呼吸灯闪烁_第6张图片

3.5:Timers配置

点击Timers - TIM10 - 勾选Activated激活通道 - 选择PMW通道1(PMW Generation CH1)
通过配置CubeMX的TIMER的PWM初始化实现硬件PWM呼吸灯闪烁_第7张图片

设置分频系数Prescaler 图中设置的100-1可以理解为选出主频中100兆的1兆使用
通过配置CubeMX的TIMER的PWM初始化实现硬件PWM呼吸灯闪烁_第8张图片

设置基数Counter Period 图中设置的1000-1可以这样理解:1兆的频率周期是1微秒,也就是每记一个数是1微秒,这里要记1000次,1000个1微秒是1毫秒,所以这里达到的频率是1毫秒
通过配置CubeMX的TIMER的PWM初始化实现硬件PWM呼吸灯闪烁_第9张图片
打开NVIC Settings中的使能位,目的是PMW产生完成之后出发中断请求
通过配置CubeMX的TIMER的PWM初始化实现硬件PWM呼吸灯闪烁_第10张图片

四、库函数的使用

4.1:编译代码

打开main.c,编译看有没有问题
通过配置CubeMX的TIMER的PWM初始化实现硬件PWM呼吸灯闪烁_第11张图片

4.2:查看timer程序初始化

编译完成之后打开timer程序初始化
通过配置CubeMX的TIMER的PWM初始化实现硬件PWM呼吸灯闪烁_第12张图片
这里可以看到Cube里面设置的参数在代码中显示
通过配置CubeMX的TIMER的PWM初始化实现硬件PWM呼吸灯闪烁_第13张图片

4.3:使用库函数操作PWM

以通道1打开PWM
通过配置CubeMX的TIMER的PWM初始化实现硬件PWM呼吸灯闪烁_第14张图片
在用户代码位置使用中断回调函数
通过配置CubeMX的TIMER的PWM初始化实现硬件PWM呼吸灯闪烁_第15张图片

五、下载程序验证代码

下载程序后点击go全速运行,此时我们可以看到呼吸灯渐明渐暗的闪烁过程
通过配置CubeMX的TIMER的PWM初始化实现硬件PWM呼吸灯闪烁_第16张图片
呼吸灯闪烁视频

呼吸灯

总结

本文通过配置CubeMX的TIMER的PWM(脉宽调制)初始化实现硬件PMW呼吸灯闪烁。想要实现就需要使PWM的占空比由小变大,再由大变小,当在占空比由小变大过程中亮度会逐渐上升,当在占空比由大变小过程中亮度逐渐下降。

你可能感兴趣的:(单片机,stm32,嵌入式硬件)