完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
在上一章《STM32CubeMX实战教程(四)——基本定时器(还是点灯)》中,已经介绍过基本定时器的功能及用法,在这一章中,我讲主要介绍一下通用定时器的相关功能以及配置方法,废话不多,直接进入主题。
通用定时器 在STM32F4中,TIM2到TIM5为通用定时器,主要特性如下:
材料
PWM简介 脉冲宽度调制(PWM),是英文“Pulse Width Modulation”的缩写,简称脉宽调试。是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术。广泛应用在从测量、通信到功率控制与变换的许多领域中。 例如上图中,图b)是微处理输出的数字信号,实际上他接到电机等功率设备上时,效果相当于图a)。这就是PWM调制。例如输出占空比为50%,频率为10Hz的脉冲,高电平为3.3V.则其输出的模拟效果相当于输出一个1.65V的高电平。脉冲调制有两个重要的参数,第一个就是输出频率,频率越高,则模拟的效果越好。第二个就是占空比。占空比就是改变输出模拟效果的电压大小。占空比越大则模拟出的电压越大。 PWM输出主要HAL库函数 看到我们HAL库开发手册定时器章节的PWM这一块,可以看到已经给我们提供了很多的API接口,下面我将对每个函数稍加介绍。 前四个函数是对PWM的初始化和禁用,这几个函数STM32CubeMX会自动帮我们配置并调用的,基本不需理会。 后面六个函数是开启或关闭PWM,有 IT 后缀的函数在开启或关闭的同时使能或关闭PWM中断,有DMA后缀的函数在开启或关闭PWM的同时使能或关闭DMA 工程配置 根据原理图,板子上只有一个可配置成定时器输出的灯,并且为TIM14,那么接下来我就以TIM14为例进行PWM输出的配置,其他定时器道理大同小异 RCC时钟源选择外部晶振 然后依旧是将主频配置为168MHz,这里再次说明在STM32F4中,TIM2-7和TIM12-14是挂载在APB1时钟线上的,而TIM1和TIM8-11则是挂载在APB2时钟线上,我们这里用到了TIM6,所以应该是APB1,经过分频后我在APB1上得到了一个84MHz的时钟源。 定时器界面功能简介及配置 以TIM14为例,进入配置界面后,我们需要使能TIM14,并且注意TIM14是只有一个通道的,而另一些通用定时器最多可以达到四通道输出,这也是STM32单片机的强大之处。 使能之后可以选择六种定时器模式,分别是:
在输入捕获模式下,当相应的 ICx 信号检测到跳变沿后,将使用捕获/比较寄存器 (TIMx_CCRx) 来锁存计数器的值。发生捕获事件时,会将相应CCXIF 标志(TIMx_SR 寄存器)置 1,并 可发送中断或 DMA 请求(如果已使能)。如果发生捕获事件时 CCxIF 标志已处于高位,则会将重复捕获标志 CCxOF(TIMx_SR 寄存器)置 1。可通过软件向 CCxIF 写入 0 来给 CCxIF 清零,或读取存储在 TIMx_CCRx 寄存器中的已捕获数据。向 CCxOF 写入“0”后会将其清 零。简单来说,捕获模式可以检测输入信号的脉宽 输出比较模式 当捕获/比较寄存器与计数器之间相匹配时,输出比较功能:也就是检测引脚的电平持续时间并和设定的值进行比较,匹配后可以进行IO控制,中断响应等操作 PWM模式 在PWM简介中已经说明,这里不再重复 强迫输出模式 在输出模式(TIMx_CCMRx 寄存器中的 CCxS 位 =“00”)下,可直接由软件将每个输出比 较信号(OCxREF 和 OCx)强制设置为有效电平或无效电平,而无需考虑输出比较寄存器和 计数器之间的任何比较结果。单脉冲输出模式 单脉冲输出模式是特殊的PWM模式,它可以在一个激励信号的作用下触发,并产生一个可编程的脉冲。 计数器参数配置 根据我们上面时钟树配置后得到的84MHz时钟源,进行计数器参数配置:
下面是PWM的参数配置:
在这里,我特别解释一下输出极性和PWM模式之间的关联。 进入代码 生成工程编译通过后直接进入main函数进行代码的添加 int main(void) { /* USER CODE BEGIN 1 */ uint8_t dir=1; uint16_t led0pwmval=0; /* USER CODE END 1 */ /* MCU Configuration--------------------------------------------------------*/ /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ HAL_Init(); /* USER CODE BEGIN Init */ /* USER CODE END Init */ /* Configure the system clock */ SystemClock_Config(); /* USER CODE BEGIN SysInit */ /* USER CODE END SysInit */ /* Initialize all configured peripherals */ MX_GPIO_Init(); MX_TIM14_Init(); /* USER CODE BEGIN 2 */ HAL_TIM_PWM_Start(&htim14,TIM_CHANNEL_1); /* USER CODE END 2 */ /* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { HAL_Delay(10); if(dir)led0pwmval++; //dir==1 led0pwmval递增 else led0pwmval--; //dir==0 led0pwmval递减 if(led0pwmval>300)dir=0; //led0pwmval到达300后,方向为递减 if(led0pwmval==0)dir=1; //led0pwmval递减到0后,方向改为递增 __HAL_TIM_SetCompare(&htim14,TIM_CHANNEL_1,led0pwmval); /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ } /* USER CODE END 3 */ } 第一步,在定时器初始化之后,我们调用HAL_TIM_PWM_Start来开启PWM的输出 第二步就是要制造出呼吸灯的效果,while循环里面几行代码的意思是,取两个变量,一个作为标志位(dir),用于判断是缓慢变量还是缓慢变暗;另一个用于有效电平的改变(led0pwmval),也就是改变PWM的占空比,最后调用 __HAL_TIM_SetCompare 实现占空比的改变。 这里稍微介绍一下 __HAL_TIM_SetCompare这个函数,每次调用它的时候就可以更新一次捕获比较寄存器的数据,从而更新占空比,当然,也可以直接操作寄存器的方法,在这里也就是等效于TIM14->CCR1=led0pwmval。所以效果就是,每10ms使PWM占空比增加或减少一点来实现LED灯变亮或暗一些。 下载验证 具体下载方法这里不再重复,可查看《STM32CubeMX实战教程(一)——软件入门》,工程源文件我已经上传,在《通用定时器实验(PWM输出)》非常抱歉由于CSDN官网上传的资源必须要设定积分,否则几乎无法通过审核,这里就没有办法免费开发给大家,不过源码在教程里已经非常详细了。 申明 本文到这里就告一段落,这边我进行一个申明,如果你是第一次学习STM32单片机,或者是没有接触过STM32定时器的小白,即便我已经讲解得很详细,但是光靠这篇文章精通STM32定时器几乎是不太可能,因为STM32的定时器系统实在是太过庞大和复杂。那么我这里还是推荐你去下载官方的参考手册,如果觉得自己英文功底还可以的,可以直接下载英文版本,方法也很简单。在STM32CubeMX软件中,选择任意一个外设,将鼠标放置在上面不要点击,就会弹出相应外设的简介,点击details and documentation,就会弹出外设相关的详细介绍,并且附带两个下载链接,直接点击便可立即下载。
非常感谢大家的阅读,如有不当或者错误的地方,欢迎指正,谢谢支持。 一个字一个字敲出来不容易,如果觉得有帮助,点个赞再走呗~ 祝大家事业蒸蒸日上! 奥里给~ |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1750 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1608 浏览 1 评论
1049 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
721 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1665 浏览 2 评论
1924浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
709浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
559浏览 3评论
583浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
544浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-18 10:22 , Processed in 0.817683 second(s), Total 79, Slave 62 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号