基于RT Thread的PWM驱动开发
由于项目需要,在此记录下基于RTT的PWM驱动开发流程
本期项目将完成基于HAL的PWM驱动开发,实现脉冲个数控制,实现基于RTT框架下的PWM驱动开发
1.CUBEMX配置
TIM3配置如下
时钟配置如下
GPIO引脚配置如下
中断配置如下
生成工程
2.基于MDK的工程验证
需在启动时加入如下代码
HAL_TIM_PWM_Start_IT(&htim3,TIM_CHANNEL_3);
这里的htim3,TIM_CHANNEL_3与CUBEMX对应,需修改为自己对应的管脚
实现脉冲个数控制
定义改回调函数即可实现脉冲个数控制
int count=0;
void HAL_TIM_PWM_PulseFinishedCallback(TIM_HandleTypeDef *htim)
{
if(htim->Instance==TIM3)
{
if(count++>5){
HAL_TIM_PWM_Stop_IT(&htim3,TIM_CHANNEL_3);
}
}
}
实现改变占空比
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
if(count++<400){
__HAL_TIM_SET_COMPARE(&htim3,TIM_CHANNEL_3,count);
}else{
count=0;
}
HAL_Delay(500);
}
RT thread Studio工程配置
1.新建工程
2.setting 设置
编译第一把报错正常,接下来,逐个修改
在Board.h中删除注释定义
取消stm32f4xx_hal_conf.h中关于TIM的定义
复制MDK工程关于TIM的初始化函数到board.c中
在Board.c中添加TIM3的初始化函数
正式开始RTT PWM框架
/*
* Copyright (c) 2006-2022, RT-Thread Development Team
*
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
* 2022-03-14 RT-Thread first version
*/
#include <rtthread.h>
#include <board.h>
#include <rtdevice.h>
struct rt_device_pwm *pwm_dev; /* PWM设备句柄 */
int pulse = 0;
int main(void)
{
MX_TIM3_Init();
pwm_dev = (struct rt_device_pwm *) rt_device_find("pwm3");
if (pwm_dev == RT_NULL)
{
rt_kprintf("find pwm3 failed\n");
}
else
{
rt_kprintf("find pwm3 success\n");
rt_pwm_set(pwm_dev, 3, 500000, 0); //PWM设置 通道3 period=500000(ns) pulse=250000
rt_pwm_enable(pwm_dev, 3); //启动PWM
}
while (1)
{
pulse += 15000;
if (pulse < 500000)
{
rt_pwm_set(pwm_dev, 3, 500000, pulse);
}
else
{
pulse = 0;
}
rt_thread_mdelay(1000);
}
return RT_EOK;
}