STM32CubeMX笔记-定时器产生PWM驱动舵机
一、初始准备
1.硬件平台
使用正点原子STM32F4探索者
2.软件平台
STM32CubeMX软件平台
Keil5软件平台
STM32CubeProgrammer下载平台
二、操作步骤
1.CubeMX生成初始化代码
1.1 建立工程(通用步骤)
- 芯片选择
打开cube软件,点击MCU选择
F4探索者的主控为STM32F407ZET6,所以在搜索框找到STM32F407ZE后点击具体芯片,再开始工程
- 配置时钟源
我们点开SystemCore(系统内核设置),再点击RCC配置HSE和LSE时钟源,这里我都选择使用外部时钟,配置后,我们可以看到右边芯片引脚分配图的两个时钟源引脚点亮,表示配置完成
- 配置时钟树
我们进入ClockConfiguration配置时钟树,使时钟的输入路径和大小符合我们预期,精英板的晶振和时钟倍频如下
一般配置正确时颜色蓝白为主,配置错误时则会出现紫色,提示我们要修改值
1.2 PWM配置步骤
- 查看原理图引脚
我们使用定时器3的通道1,默认映射IO口为PA6
- 配置TIM为PWM
配置界面找到Timers配置栏,点击TIM3
配置TIM3时钟为内部时钟(internal clock),同时选择通道1为PWM模式(PWM Generation CH1)
配置TIM3的具体参数,主要为分频值和重装载值,修改分频值为720对应一个计数为1/(72M/分频值)=10us,重装载值为2000,使一个PWM的周期为2000*1us=20ms一个周期,符合舵机50hz频率驱动要求
1.3生成代码(通用步骤)
点击进入Project Manager 配置生成工程的名字,存储路径**(不要有中文)**以及编译器,这里我们选MDK-ARM(Keil被收购后改名)
配置生成选项,主要为下面三大块,第一个我们选择只拷贝必要的库,第二个选择为每个外设生成.c和.h文件,保存之前的用户代码,以及删除之前的生成代码,第三个不选择
PS:用户代码段是一下注释之间的代码,只有原始的用户代码段注释才有效,用户自己添加的无效
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */
最后点击生成代码
2.编写代码
打开MDK,在主函数中用户代码段编写如下代码:
/* USER CODE BEGIN 2 */
HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_1);
/* USER CODE END 2 */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
__HAL_TIM_SET_COMPARE(&htim3,TIM_CHANNEL_1,100);
HAL_Delay(1000);
__HAL_TIM_SET_COMPARE(&htim3,TIM_CHANNEL_1,150);
HAL_Delay(1000);
__HAL_TIM_SET_COMPARE(&htim3,TIM_CHANNEL_1,200);
HAL_Delay(1000);
__HAL_TIM_SET_COMPARE(&htim3,TIM_CHANNEL_1,150);
HAL_Delay(1000);
__HAL_TIM_SET_COMPARE(&htim3,TIM_CHANNEL_1,100);
HAL_Delay(1000);
}
/* USER CODE END 3 */
其中HAL_TIM_PWM_Start用于开启使用到的定时器通道;__HAL_TIM_SET_COMPARE为设置定时器通道比较值的调用函数,传入参数依次为为定时器编号、通道编号、设置的比较值;代码编写完成后,点击编译,编译结果无报错
3.程序下载,观察现象(通用步骤)
程序下载我一般用两种方式:
第一种是使用MDK自带的下载环境下载程序,我们给单片机连接ST-Link后配置下载,点击魔术棒,选择debug
选择ST-link后,点击setting
添加对应F4的Flash
keil界面点击下载
第二种是使用Stm32Programmer下载软件,该下载软件下载方式多,下载快,下面我使用st-link下载
打开软件,点击connect左边选择stlink后再点击connect连接下载器
点击open file,找到工程路径下MDK文件夹下工程生成的hex文件
之后点击downlod下载,下载结果如下
3.实验现象
舵机循环转动:
转载:https://blog.csdn.net/qq_45396672/article/details/116379825