一、准备
官方教程:STM32系列外设驱动添加指南.md。
PWM驱动官方文档:RT-Thread设备和驱动 之 PWM设备。
本博客基于的BSP为stm32f103-dofly-lyc8,可到官网下载,BSP制作教程:RT-Thread ---- STM32系列BSP的制作教程总结。
二、个人总结
1、按照教程步骤,按PWM设备驱动的需求更改。
2、STMCubeMx配置如下:
3、在Kconfig中添加pwm驱动。代码如下
4、menuconfig 中勾选
5、scons --target=mdk5 生成新工程。
6、代码示例,是一盏LED灯亮度渐变。
#define LED_PIN_NUM 24 /* LED PIN脚编号,查看驱动文件drv_gpio.c确定 */
#define PWM_DEV_NAME "pwm4" /* PWM设备名称 */
#define PWM_DEV_CHANNEL 3 /* PWM通道 */
struct rt_device_pwm *pwm_dev; /* PWM设备句柄 */
static void tid_ledflash_entry(void *parameter)
{
rt_uint32_t period, pulse;
period = 50000; /* 周期为0.5ms,单位为纳秒ns */
pulse = 0; /* PWM脉冲宽度值,单位为纳秒ns */
/* 查找设备 */
pwm_dev = (struct rt_device_pwm *)rt_device_find(PWM_DEV_NAME);
if (pwm_dev == RT_NULL)
{
return RT_ERROR;
}
/* 设置PWM周期和脉冲宽度默认值 */
rt_pwm_set(pwm_dev, PWM_DEV_CHANNEL, period, pulse);
/* 使能设备 */
rt_pwm_enable(pwm_dev, PWM_DEV_CHANNEL);
while (1)
{
rt_thread_mdelay(10);
pulse += 100; /* 从0值开始每次增加5000ns */
if (pulse >= period)
{
pulse = 0;
}
/* 设置PWM周期和脉冲宽度 */
rt_pwm_set(pwm_dev, PWM_DEV_CHANNEL, period, pulse);
}
}