STM32CubeMX教程8 TIM 通用定时器 - 输出比较
1、准备材料
开发板(STM32F407G-DISC1)
ST-LINK/V2驱动
STM32CubeMX软件(Version 6.10.0)
keil µVision5 IDE(MDK-Arm)
逻辑分析仪nanoDLA
2、实验目标
使用STM32CubeMX软件配置STM32F407通用定时器的输出比较通道,并将其输出到四个LED灯引脚实现LED灯流水灯效果
3、实验流程
3.0、前提知识
STM32F407的定时器通道均可以实现输出比较功能,输出比较功能是利用当前计数值CNT与捕获/比较寄存器CRR的值作比较,如果值相等就会产生输出比较结果,此时也会产生输出比较完成中断或DMA请求
定时器产生的输出比较结果可以输出到比较通道的具体引脚上,也可以直接内部使用不输出到引脚,具体输出的电平由比较模式和输出极性共同决定
输出比较模式有①冻结:保持当前电平、②匹配时输出有效电平、③匹配时输出无效电平、④匹配时翻转输出电平、⑤强制输出有效电平和⑥强制输出无效电平六种模式
有效电平可以手动设置为高/低电平
3.1、CubeMX相关配置
请先阅读“STM32CubeMX教程1 工程建立”实验3.4.1小节配置RCC和SYS
3.1.1、时钟树配置
系统时钟树配置与上一实验一致,均设置为STM32F407总线能达到的最高时钟频率,具体如下图所示
3.1.2、外设参数配置
在Pinout & Configuration页面右边芯片引脚预览Pinout view中找到LED灯的四个控制引脚PD12、PD13、PD14和PD15,依次左键单击并配置其功能为TIM4_CHx
然后在页面左侧功能分类栏目中点开Timers栏目,单击栏目下的TIM4,并将其Channel1~4全部配置为Output Compare CHx
具体配置如下图所示
然后对启用的TIM4定时器的四个通道参数进行设置,下面对重要参数介绍
①首先对计数器参数的设置与之前讲解的一致,这里不再赘述,周期设为500ms,不分频不预装载
②四个通道的输出比较模式均选择为了Toggle on match,即当比较寄存器CCR的值和当前定时器计数值CNT匹配时翻转通道引脚输出状态,四个通道从上到下其比较寄存器的值CCR依次为999、1999、2999和3999,这表示在一个时钟500ms周期内,通道1、2、3和4分别在100ms、200ms、300ms和400ms的时候翻转其对应通道引脚的值
③输出比较四个通达均不启用预装载,通道输出有效状态为高电平,其他的模式如其字面意思较为好理解,这里不再过多阐述
具体的参数配置如下图所示
3.1.3、外设中断配置
在Pinout & Configuration页面左边System Core/NVIC中勾选TIM4全局中断,然后选择合适的中断优先级即可
3.2、生成代码
请先阅读“STM32CubeMX教程1 工程建立”实验3.4.3小节配置Project Manager
单击页面右上角GENERATE CODE生成工程
3.2.1、外设初始化函数调用流程
在生成的工程代码主函数main()中调用了MX_TIM4_Init()函数完成了对TIM4基本定时器参数,输出比较通道1/2/3/4参数的配置
然后在HAL_TIM_OC_Init()函数中调用了HAL_TIM_OC_MspInit()函数对TIM4时钟和中断进行了使能,并对中断优先级进行了配置
最后在MX_TIM4_Init()函数末尾调用了HAL_TIM_MspPostInit()函数对TIM4的四个输出比较通道引脚进行了复用设置,从而完成了整个初始化过程
如下图所示为TIM4输出比较初始化的具体函数调用流程
3.2.2、外设中断函数调用流程
再来看看输出比较中断回调函数流程,使能定时器全局中断后在stm32f4xx_it.c中自动生成了TIM4的中断处理函数TIM4_IRQHandler
TIM4_IRQHandler调用了HAL库的定时器中断处理函数HAL_TIM_IRQHandler,这个函数负责处理所有的定时器相关中断
通过判断中断来源及相关寄存器,最终输出比较事件完成的回调函数为HAL_TIM_OC_DelayElapsedCallback(或者是HAL_TIM_PWM_PulseFinishedCallback)(注释1),该函数为虚函数,需要用户重新实现
如下图所示为TIM4输出比较中断回调的具体函数调用流程
该实验目标不需要动态修改输出比较的参数,因此笔者这里没有重新在tim.c中重新实现该回调函数,需要提醒的是,输出比较事件完成时会同时进入HAL_TIM_OC_DelayElapsedCallback和HAL_TIM_PWM_PulseFinishedCallback两个回调函数中,因此请注意此实验确保注释掉PWM输出实验中HAL_TIM_PWM_PulseFinishedCallback函数体内动态修改占空比的代码,否则将达不到预期效果
3.2.3、添加其他必要代码
最后只需要在主函数中启动定时器(注释2),启动输出比较通道就可以实现本实验目标,启动代码如下图所示
源代码如下
HAL_TIM_Base_Start(&htim4);
HAL_TIM_OC_Start(&htim4, TIM_CHANNEL_1);
HAL_TIM_OC_Start(&htim4, TIM_CHANNEL_2);
HAL_TIM_OC_Start_IT(&htim4, TIM_CHANNEL_3);
HAL_TIM_OC_Start_IT(&htim4, TIM_CHANNEL_4);
4、常用函数
/*启动输出比较通道*/
HAL_StatusTypeDef HAL_TIM_OC_Start(TIM_HandleTypeDef *htim, uint32_t Channel)
/*停止输出比较通道*/
HAL_StatusTypeDef HAL_TIM_OC_Stop(TIM_HandleTypeDef *htim, uint32_t Channel)
/*以中断方式启动输出比较通道*/
HAL_StatusTypeDef HAL_TIM_OC_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel)
/*停止以中断方式启动的输出比较通道*/
HAL_StatusTypeDef HAL_TIM_OC_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel)
/*输出比较通道完成回调函数*/
void HAL_TIM_OC_DelayElapsedCallback(TIM_HandleTypeDef *htim)
5、烧录验证
5.1、具体步骤
“设置TIM4的4个通道为输出比较到通道 -> 配置TIM4基本参数及4个输出比较通道参数 -> NVIC中勾选TIM4全局中断并设置合适中断优先级 -> 在主函数中使用HAL_TIM_Base_Start(&htim4)启动定时器TIM4 -> 然后使用HAL_TIM_OC_Start_IT(&htim4, TIM_CHANNEL_x)函数开启四个通道的输出比较”
5.2、实验现象
烧录程序,上电单片机启动后会发现开发板上的四个LED灯,按照绿、橙、红和蓝的顺序依次点亮,然后不断循环,实际现象如下图所示
使用逻辑分析仪监测TIM4的四个输出通道引脚,可以看出TIM4的四个通道输出的电平翻转周期均为500ms,并且4个通道间每个通道均间隔100ms相继翻转状态
6、注释详解
注释1:在生成PWM波的实验中提到其使用的中断回调函数HAL_TIM_PWM_PulseFinishedCallback也可以换成输出比较完成的回调函数HAL_TIM_OC_DelayElapsedCallback,因为笔者发现在HAL库的定时器中断处理函数HAL_TIM_IRQHandler中,这两个函数是同时调用的,也就是说调用函数1,函数2也会跟着调用,所以笔者认为两个都可以使用
注释2:笔者发现在启动输出比较/输入捕获/PWM输出时,可以不调用定时器启动函数,执行HAL_TIM_xx_Start/HAL_TIM_xx_Start_IT函数时会自动启动定时器;另外HAL_TIM_OC_Start/HAL_TIM_OC_Start_IT两个输出比较启动函数和HAL_TIM_PWM_Start/HAL_TIM_PWM_Start_IT两个PWM输出启动函数,除了函数名和一些注释外其函数体内的代码一模一样;
更多内容请浏览 OSnotes的CSDN博客
STM32CubeMX教程8 TIM 通用定时器 - 输出比较的更多相关文章
- TIM—高级定时器输出PWM
高级定时器输出PWM 主频144M,生成一个频率为1K,占空比为30%的PWM详细代码参考EVT例程PWM_Output 重要参数说明 TIM_TimeBaseInitStructure.TIM_Pe ...
- 第32章 TIM—高级定时器—零死角玩转STM32-F429系列
第32章 TIM—高级定时器 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/fire ...
- STM32通用定时器(转载)
STM32的定时器功能很强大,学习起来也很费劲儿. 其实手册讲的还是挺全面的,只是无奈TIMER的功能太复杂,所以显得手册很难懂,我就是通过这样看手册:while(!SUCCESS){看手册-}才搞明 ...
- (五)转载:通用定时器PWM输出
1. TIMER输出PWM基本概念 脉冲宽度调制(PWM),是英文“Pulse Width Modulation”的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有 ...
- STM32(7)——通用定时器PWM输出
1.TIMER输出PWM基本概念 脉冲宽度调制(PWM),是英文“Pulse Width Modulation”的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种 ...
- stm32之通用定时器TIM
STM32系列的CPU,有多达8个定时器: 1.其中TMI1和TIM8是能够产生三对PWM互补输出的高级定时器,常用于三相电机的驱动:它们的时钟有APB2的输出产生: 2.其它6个为普通定时器,时钟由 ...
- 第31章 TIM—基本定时器—零死角玩转STM32-F429系列
第31章 TIM—基本定时器 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/fire ...
- 关于STM32CubeMX使用LL库设置PWM输出
HAL和LL库 HAL是ST为了实现代码在ST家族的MCU上的移植性,推出的一个库,称为硬件抽象层,很明显,这样做将会牺牲存储资源,所以项目最后的代码比较冗余,且运行效率大大降低,运行速度受制于fla ...
- STM32 通用定时器的几种配置方式
STM32 通用定时器的几种配置方式 //------------------------------------------------------------------------------ ...
- TIM—基本定时器
本章参考资料:< STM32F4xx 参考手册>.< STM32F4xx 规格书>.库帮助文档< stm32f4xx_dsp_stdperiph_lib_um.chm&g ...
随机推荐
- Ds100p -「数据结构百题」31~40
31.P2163 [SHOI2007]园丁的烦恼] 很久很久以前,在遥远的大陆上有一个美丽的国家.统治着这个美丽国家的国王是一个园艺爱好者,在他的皇家花园里种植着各种奇花异草. 有一天国王漫步在花园里 ...
- 5.go语言函数提纲
1 本篇前瞻 前端时间的繁忙,未曾更新go语言系列.由于函数非常重要,为此将本篇往前提一提,另外补充一些有关go新版本前面遗漏的部分. 需要恭喜你的事情是本篇学完,go语言中基础部分已经学完一半,这意 ...
- 搞懂fflush(stdout)
使用 printf 或 cout 打印内容时,输出永远不会直接写入"屏幕".而是,被发送到 stdout. (stdout 就像一个缓冲区) 默认情况下,发送到 stdout 的输 ...
- Destoon模板存放及调用规则
一.模板存放及调用规则 模板存放于系统 template 目录,template 目录下的一个目录例如 template/default/ 即为一套模板模板文件以 .htm 为扩展名,可直接存放于模板 ...
- Spring系列:基于XML的方式构建IOC
目录 一.搭建模块spring6-ioc-xml 二.获取bean的三种方式 三.基于setter注入 四.基于构造器注入 五.特殊值处理 六.为对象类型属性赋值 七.引入外部属性文件 八.基于XML ...
- AtCoder F - Parenthesis Checking
原题链接:AtCoder F - Parenthesis Checking 一个全由\('('\)和\(')'\)构成的字符串,由以下两个操作: 1 l r交换字符串第\(l\)个和第\(r\)个字符 ...
- Android Sutdio 编入System API 等隐藏API 方法
1. 将 classes.jar 放入 app/libs 文件夹下 右键点击 jar 包,点击 Add as Library 2. 项目级 Gradle 文件新增以下配置 gradle.project ...
- Ubuntu 20.04 查看显示器信息
安装 ddcutil apt install ddcutil 输入命令 ddcutil detect --verbose 输出类似如下: Output level: Verbose Reporting ...
- 使用React+SpringBoot开发一个协同编辑的表格文档
本文由葡萄城技术团队发布.转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 前言 随着云计算和团队协作的兴起,协同编辑成为了许多企业和组织中必不可少的需求.通 ...
- IDEA编译器的永久试用设置与基本使用
参考视频: 最通俗易懂的JDK.IDEA的安装使用权威指南 2023新版前端Web开发HTML5+CSS3+移动web视频教程,前端web入门首选黑马程序员 一.安装包下载与安装 官网下载地址 个人使 ...