在进行PWM波的学习中,依然是踩了小坑,网络上大部分配置都增加了TIM的配置,貌似是不需要的,当开启了TIM的时钟反而影响了PWM的时钟,暂且归咎于版本不一样?还是STM32F1和STM32F4不一样呢?核心问题还是,按部就班完成几样配置,最后翻看一下时钟是否有效开启即可。
1.打开RT-Thread Setting中PWM的驱动
2.进行HAL库的配置
HAL库的配置必须要做的 SYS/RCC/USART 然后在配置个TIM的PWM输出
这里的Clock Source并没有开启,因为开启后发现stm32f1xx_hal_msp.c中只有HAL_TIM_MspInit而没有HAL_TIM_PWM_MspInit,感觉很奇怪,不知道F4或者其他芯片什么样,网络上里面有开启的有没开启的,我觉得可能是实时操作系统版本的问题,大家可以关注一下时钟是否开启了。
3.开启board.h里面的宏定义
HAL库中配置的哪个就在这里开启哪个
4.打开stm32f1xx_hal_conf_bak.h的PWM的宏定义
5.代码
#include <rtthread.h>
#include <rtdevice.h>
#include <rtdbg.h>
#include "stm32f1xx_hal.h"
#include "main.h"
#define PWM_DEV_NAME "pwm2" //PWM设备名称
#define PWM_DEV_CHANNEL 1 //PWM通道
struct rt_device_pwm *pwm_dev; //PWM设备句柄
int main(void)
{
rt_uint32_t period, pulse, dir;
period = 500000; //周期为0.5ms,单位为纳秒ns
dir = 1; //PWM脉冲宽度值的增减方向
pulse = 250000; //PWM脉冲宽度值,单位为纳秒ns
//查找设备
pwm_dev = (struct rt_device_pwm *)rt_device_find(PWM_DEV_NAME);
if (pwm_dev == RT_NULL)
{
rt_kprintf("pwm sample run failed! can't find %s device!\n", PWM_DEV_NAME);
return RT_ERROR;
}
//设置PWM周期和脉冲宽度默认值
rt_pwm_set(pwm_dev, PWM_DEV_CHANNEL, period, pulse);
//使能设备
rt_pwm_enable(pwm_dev, PWM_DEV_CHANNEL);
while (1)
{
};
}
最后
RTT基本所有外设配置都是差不多的,按部就班配置即可,PWM这里遇到的问题就是,开启了Clock Source后,打开的时钟只是TIM的而没有PWM的,暂时归咎于版本问题吧,或者我们可以调用HAL库的初始化,这样是不是手动开启了时钟呢?