STM32定时器,只说最优解

您所在的位置:网站首页 能看到毫秒的时钟 STM32定时器,只说最优解

STM32定时器,只说最优解

2024-06-04 18:39| 来源: 网络整理| 查看: 265

任务:用TIM做一个硬定时实现us级别的延时。

参考:https://blog.csdn.net/qq_22252423/article/details/76468161

         https://blog.csdn.net/anchises/article/details/52101512

分析:操作计数的那个值,控制从哪里到哪里,就可以得到时间。也就是做一个稍大的定时,每1000us中断一次,如果要求延时200us那么我就截取其中一部分时间200段给你,要求500us就截取500段给你,用计数值控制。

控制时间基础为1us。怎么搞呢?上代码。定时器的2个参数!

void TIMX_Config(void) { TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct; TIM_OCInitTypeDef TIM_OCInitStructure; NVIC_InitTypeDef NVIC_InitStructure; RCC_APB1PeriphClockCmd( RCC_APB1Periph_TIM3, ENABLE); TIM_ClearITPendingBit(TIM3,TIM_IT_Update); TIM_TimeBaseInitStruct.TIM_Period=10000-1;//没意义吗?待定 TIM_TimeBaseInitStruct.TIM_Prescaler=72-1;// 1us就是这里! TIM_TimeBaseInitStruct.TIM_ClockDivision=0; TIM_TimeBaseInitStruct.TIM_CounterMode=TIM_CounterMode_Up; TIM_TimeBaseInit(TIM3, &TIM_TimeBaseInitStruct); TIM_ITConfig(TIM3, TIM_IT_Update,ENABLE); TIM_Cmd(TIM3, ENABLE); NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1); NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //抢占优先级 0 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; //子优先级为0 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能 NVIC_Init(&NVIC_InitStructure); }

 

上面就配置好了!!!完成延时吧

 

void TIM3_Delay(int us) { uint16_t differ=0xffff-us-5; TIM_Cmd(TIM3, ENABLE);-------------------------------------打开TIM TIM_SetCounter(TIM3, differ); while(differ=20) { count=0; NOADCARDMODE=1; } } else count=0; }

 

注意:

 

1GPIO_ReadInputDataBit和GPIO_ReadOutputDataBit不同,现在按键是上拉输入哦

2 KEY一直是Set按下去才是Reset

3使用一个循环技巧a++       《-------》 a=a%100+1

 

 

 

基础知识:参考:https://blog.csdn.net/yx_l128125/article/details/7879506

 

 

+++++++++++++++++++++20180719+++++++++++++++

做Spi通讯LCD的TOUCH的时候发现小延时是没有问题的,而在计数器倒减过来的办法会死机

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3