基于Rt Thread的PWM驱动开发
基于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 "); } else { rt_kprintf("find pwm3 success "); 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; }