STM32F407芯片RT Thread系统下添加PWM驱动

时间:2024-03-28 11:27:13

正点原子F407开发板上PWM用的是TIM2_CH4,我的板子上用的是TIM3_CH1。需要修改的地方还是挺多的,经过一番摸索总算是调通了,这里记录一下供大家参考。

1.首先当然是修改Kconfig文件了。

STM32F407芯片RT Thread系统下添加PWM驱动

参考正点原子的BSP把里面的TIM2_CH4改成TIM3_CH1。

STM32F407芯片RT Thread系统下添加PWM驱动

然后打开menuconfig

Hardware Drivers Config-->On-chip Peripheral Drivers-->Enable pwm-->Enable timer3 output pwm-->Enable PWM3 channel1

STM32F407芯片RT Thread系统下添加PWM驱动

保存退出后使用scons --target=mdk5重新编译一下。

2.复制rt-Thread官网上的PWM设备例程添加到工程中。

STM32F407芯片RT Thread系统下添加PWM驱动

修改pwm设备名称和pwm通道。

3.打开board里的CubeMX工程,配置一下TIM3_CH1的输出脚。

stm32f407VGT6的PA、PC6、PB4都可以作为TIM3_CH1的输出脚,选择自己需要的一个,我这里用的PB4。

STM32F407芯片RT Thread系统下添加PWM驱动

然后点击GENERATE CODE。

打开工程在stm32f4xx_hal_msp.c文件中可以看到void HAL_TIM_MspPostInit(TIM_HandleTypeDef* timHandle)函数,就是初始化PB4引脚的。

编译下载,然后在shell里输入pwm_led_sample然后用示波器测试PB4引脚发现没波形。然后开始找原因。

反复检查好久发现是TIM3的系统时钟没有打开,参考正点原子stm32f4xx_hal_msp.c文件在我们的stm32f4xx_hal_msp.c文件中添加两个函数

void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* htim_base)

void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef* htim_base)

STM32F407芯片RT Thread系统下添加PWM驱动

STM32F407芯片RT Thread系统下添加PWM驱动

然后编译下载,shell下输入pwm_led_sample

STM32F407芯片RT Thread系统下添加PWM驱动

然后测试PB4端口,PWM输出正常了。

如果需要输出多路PWM的话需要先修改Kconfig文件,然后在CubeMX配置引脚,在stm32f4xx_hal_msp.c文件中初始化相关引脚,在menuconfig中打开对应通道的PWM,最后在PWM_app.c文件中添加相应设置。