完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
一、定时器
1.定义 设置等待时间,到达后则执行指定操作的硬件。 定时器(Timer)最基本的功能就是定时,比如定时发送USART数据、定时采集 AD数据等等。如果把定时器与GPIO结合起来使用的话可以实现非常丰富的功能,可以测量输入信号的脉冲宽度,可以生产输出波形。定时器生产PWM控制电机状态是工业控制普遍方法,这方面知识非常有必要深入了解。 STMS2F40xxx系列控制器有2个高级控制定时器、10个通用定时器和⒉个基本定时器,还有2个看门狗定时器。高级控制定时器(TIM1和TIM8) ----具有16位定时功能,也具有PWM输出高级控制功能。 通用定时器(TIM2到TIM5) ----具有16位定时功能,也具有PWM输出控制功能。 通用定时器(TIM9到TIM14) ----具有16 位或32位定时功能,也具有PWM输出控制功能。 基本定时器 ----具有16位定时功能 在编程的时候,先查看固件库手册的相关例子,进行仿照编码即可。 STM32F405xx/07xx和 STM32F415xx/17xx的定时器时钟频率由硬件自动设置。分为两种情况:即84000000/8400/10=1000hz=1ms TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure void TIM3_Init(void) { /* TIM3 clock enable,使能定时器3的硬件时钟 */ RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); /* Enable the TIM3 global Interrupt ,配置定时器3的中断*/ NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); /* Time base configuration,定时器参数的基本配置 */ /* 定时时间、分频值、计数方法 */ TIM_TimeBaseStructure.TIM_Period = (10000/1000)-1;//定时时间为1ms,由来:最终的10000hz/10=1000,即实现了定时1ms,直接写10-1比较好理解 TIM_TimeBaseStructure.TIM_Prescaler = 8400-1;//预分频值,取值0-0xFFFF,2的16次方,65535 TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;//二次分频,即再次分频,这里设置为1分频 TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;//向上计数的方法 TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); /* TIM Interrupts enable,使能定时器3更新中断事件,代表定时已经达到的事件 */ TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE); /* TIM3 enable counter,使能定时器3进行工作 */ TIM_Cmd(TIM3, ENABLE); } //中断服务函数 void TIM3_IRQHandler(void) { static uint32_t cnt=0; if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) { cnt++; if(cnt==1000) { 点灯; } //清空标志位,告诉cpu已经达到1ms定时,可以进行下一次计数 TIM_ClearITPendingBit(TIM3, TIM_IT_Update); } } 2.总结 首先,打开固件库手册,查看例程代码,cv你需要的部分。 然后,查看到所使用的定时器提供的频率是多少,挂载的总线不同值也不同, 然后进行计数 例如这里 的84Mhz,要得出1ms的定时,那么 84000000/ 8400 / 10 = 1000 hz ,即1/1000hz=1ms, TIM_Period设置为10-1,TIM_Prescaler设置为8400-1. TIM_CKD_DIV1使定时器的频率翻倍,这里一般是固定为这个参数。 最后别忘了在主函数调用定时器的初始化函数,以及编写中断服务函数。 例子1: 你要设置定时器1的定时时间为100ms,那么 168000000/16800/1000 =10hz例子2: 又比如你要设置tim2的定时时间设置为200ms中断触发,那么 84000000/8400/2000 =5hz |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1617 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1543 浏览 1 评论
977 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
683 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1595 浏览 2 评论
1863浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
644浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
515浏览 3评论
531浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
504浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 03:33 , Processed in 0.668757 second(s), Total 76, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号