完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
定时器作为单片机不可或缺的外设,当然也是学习单片机时重要的知识点,但是STM32单片机的定时器非常多而且结构复杂。*其中在STM32F4中,共有14个定时器,定时器分为通用定时器,基本定时器和高级定时器。*我将通过三章分别进行讲解。本章我将先简单介绍一下基本定时器的特性及其HAL库函数,然后通过工程配置向大家展示其基本功能的实现。
基本定时器 在STM32F4中,TIM6和TIM7为基本定时器,主要特性如下:
打开HAL库函数手册定时器的章节,可以发现里面定时器相关的函数是非常多的,与之前GPIO的函数有着天壤之别,那么我们该怎么使用这些函数呢?不要着急,我们慢慢分析。 定时器HAL库函数主要分为类,分别为:通用基本功能、从机功能、输出比较功能、PWM功能、输入捕获功能、单脉冲功能和时间编码功能。十分繁杂,我这里没办法每一个都进行细说,但从名字也知道个大概,具体函数功能也可以在HAL库函数参考手册上面找到说明。我在这里主要介绍一下通用基本功能相关函数。
本次我就以TIM6为例配置STM32CubeMX工程,进入工程后先配置时钟,在RCC中高低速时钟均选择外部晶振 然后进入时钟树的配置,这里我们为了能够准确地知道定时器的频率,就要了解该定时器的频率是由哪个时钟源输出的,在STM32F4中,TIM2-7和TIM12-14是挂载在APB1时钟线上的,而TIM1和TIM8-11则是挂载在APB2时钟线上,我们这里用到了TIM6,所以应该是APB1,经过分频后我得到了一个84MHz的时钟源。 那么定时器的时钟周期怎么计算呢,不用着急,先给大家看看我的定时器配置 TIM6
接下来需要在NVIC中使能中断,对STM32CubeMX的NVIC不理解的可以参考《STM32CubeMX实战教程(三)——外部中断(中断及HAL_Delay函数避坑)》 最后配置一下LED灯的IO口就可以生成代码了,具体IO配置过程参照《STM32CubeMX实战教程(二)——按键点个灯》 进入代码 生成代码并编译过后,首先来到定时器初始化的地方 /* TIM6 init function */ void MX_TIM6_Init(void) { TIM_MasterConfigTypeDef sMasterConfig = {0}; htim6.Instance = TIM6; htim6.Init.Prescaler = 8400-1; htim6.Init.CounterMode = TIM_COUNTERMODE_UP; htim6.Init.Period = 5000-1; htim6.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE; if (HAL_TIM_Base_Init(&htim6) != HAL_OK) { Error_Handler(); } sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; if (HAL_TIMEx_MasterConfigSynchronization(&htim6, &sMasterConfig) != HAL_OK) { Error_Handler(); } } 基本都是我们之前所配置的样子,但这里我想让大家留意一下 ** htim6.Instance = TIM6 ** 这一句,TIM6是定时器6的时基地址,之后的中断我们需要它用来进行参数判断,另外 htim6 是一个全局变量是STM32CubeMX给用户生成的结构体,里面包含了定时器初始化的所有信息,我们可以直接使用该结构体进行传参,正如下面这个函数 现在进入main函数并在while循环前加入开启定时器函数,这里所传入的 htim6就是刚刚定时器初始化后的结构体。 /* USER CODE BEGIN 2 */ HAL_TIM_Base_Start_IT(&htim6); /* USER CODE END 2 */ 并在main函数之后添加回调函数代码,如果对回调函数的概念不清晰,欢迎阅读《STM32CubeMX实战教程(三)——外部中断(中断及HAL_Delay函数避坑)》。 /* USER CODE BEGIN 4 */ void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) { if(htim->Instance==TIM6) { HAL_GPIO_TogglePin(LED_GPIO_Port,LED_Pin); } } /* USER CODE END 4 */ 下载验证 重新编译就可以下载验证了,最后我的工程已上传,欢迎下载,在《基于STM32CubeMX的基本定时器》。 非常抱歉由于CSDN官网上传的资源必须要设定积分,否则几乎无法通过审核,这里就没有办法免费开发给大家,不过源码在教程里已经非常详细了。结语 非常感谢大家的阅读,如有不当或者错误的地方,欢迎指正,谢谢支持。如果感一个字一个字敲出来不容易,如果觉对你有帮助的,别忘了点个赞~ 祝大家事业蒸蒸日上! 奥里给~ |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1777 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1621 浏览 1 评论
1080 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
728 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1678 浏览 2 评论
1937浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
730浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
570浏览 3评论
595浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
553浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-23 00:19 , Processed in 0.916188 second(s), Total 46, Slave 40 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号