蓝桥杯:STM32G431RBT6学习 – 实现定时器PWM输出

蓝桥杯STM32G431RBT6学习——定时器PWM输出

前言

PWM波输出作为定时器的一个常用功能,也属于高频的考点。从数据手册的定时器解析可以了解到(上篇描述):除了基本定时器(TIM6、7)外,其他所有定时器均能进行PWM信号输出。
从数据手册的P61~P66页可以清楚得查看定时器的各个通道所绑定的引脚(清楚个JB)

PA组引脚外设分布

PB组引脚外设分布

PC组引脚外设分布

PD组引脚外设分布

PE组引脚外设分布

STM32CubeMX配置

在正式比赛中都会要求PWM输出所使用的具体引脚,可以通过在CubeMX中查看这些引脚都支持哪些定时器,直接点击芯片的引脚,在弹出的列表中查看。
此处以PA6为例,该引脚支持TIM16的通道1及TIM3的通道1,在使用时进行合理选择即可。

此处使用TIM3的通道1,选择其时钟源为内部时钟源,并将通道1使能为PWM输出。

配置其频率及初始占空比
定时器频率 = 80MHZ/分频系数/计数值
0<占空比<计数值

Keil代码编写

PWM输出相关API:

启动/暂停PWM输出
依旧不理解此处为何使用阻塞模式

HAL_StatusTypeDef HAL_TIM_PWM_Start(TIM_HandleTypeDef *htim, uint32_t Channel);
HAL_StatusTypeDef HAL_TIM_PWM_Stop(TIM_HandleTypeDef *htim, uint32_t Channel);

参数1:所使用的定时器类型指针(句柄),于CubeMX生成的定时器.h文件中定义;
参数2:所使用的通道号(例:TIM_CHANNEL_1)
设置PWM占空比
此处貌似并非真正的函数,底层是直接操作寄存器进行宏定义(C语言知道不足)

__HAL_TIM_SetCompare(__HANDLE__,__CHANNEL__,__COMPARE__);

参数1:所使用的定时器类型指针(句柄),于CubeMX生成的定时器.h文件中定义;
参数2:所使用的通道号(例:TIM_CHANNEL_1);
参数3:占空比,大小应处于0到计数值(CubeMX配置)之间
设置PWM频率
PWM的频率与预分频系数、计数周期有关,该函数用于修改预分频系数

__HAL_TIM_SET_PRESCALER(__HANDLE__, __PRESC__)

参数1:所使用的定时器类型指针(句柄),于CubeMX生成的定时器.h文件中定义;
参数2:修改后的预分频系数

后记

强推一下逻辑分析仪的妙用,此物甚至可以直接作为简单示波器使用,配置一下就可以查看波形频率,周期等数据,且携带体积超小。

物联沃分享整理
物联沃-IOTWORD物联网 » 蓝桥杯:STM32G431RBT6学习 – 实现定时器PWM输出

发表评论