您的位置 首页 被动

重返STM32之—STM32定时器的误解

说是接触STM32都快3年了,说来也惭愧,很多东西都还没搞明白;应该也是因为英文水平有待提到的原因,不能正确的理解英文的含义,毕竟我们的…

说是触摸STM32都快3年了,说来也羞愧,许多东西都还没搞了解;应该也是由于英文水平有待说到的原因,不能正确的了解英文的意义,究竟咱们的言语思想是不一样的(找个托言吧哈哈)。

最近在用STM32的守时器,曾经都是仓促走过,由于自己想标准化自己的编程代码,所以这次很用心的用通用守时器写通用的延时函数,网上许多都是用的体系滴答时钟(SysTlck)来做的,可是想着自己要向操作体系方向开展,就不能用这个守时器了。

平常由于用的是滴答时钟来做的延时函数,就没怎么去深究;这次用通用守时来做的时分,发现问题一大把。首要便是守时器的时钟分频,第二个便是怎么不必中止来完成守时。由于自己觉得对STM32很了解,所以就范范的写了代码,觉得自己必定没问题;编译下载。What f**k?!竟然守时不对,和我曾经了解的守时器不一样?仍是我的代码有问题?花了大半天去看每个存放器;(其实我最开端用的便是直接操作存放器,后来才用的库函数)觉得没问题呀;后来想要不在把每个存放的意思在细心了解一遍;不看不知道,一看下一跳呀。哎,多的废话就不说了,直接看图吧。

第一个便是咱们认为是操控时钟分频的存放器,曾经我们都是设置为00,可是当把它设置为其他值时,发现守时没有改动;其实是被称号误导了,细心看后边的阐明,这个时钟仅仅用于数字滤波器!!!更本没有改动守时器的时钟。它只影响ETR和TIX。

第二个便是关于守时器时钟和APB1时钟是共同的误解。

其实守时器的时钟和体系时钟是共同的。所以更本不是APB1的时钟。

其完成在才发现自己曾经有多么的不细心,通过此事今后发现在技能方面临自己要求太低了,什么都是了解一个大约;要用的时分才发现自己千疮百孔。

这也算是提示自己,也提示正在嵌入式体系开发道路上的仁兄们,万事要细心呀!!!

贴一段我自己写通用守时器代码吧。

void delay_init()

{

TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);

TIM_TimeBaseStructure.TIM_Prescaler = 72-1;// 预分频 72000000/72=1000000

TIM_TimeBaseStructure.TIM_ClockDivision =TIM_CKD_DIV2;//采样时钟分频.不是守时器时钟分频。

TIM_TimeBaseStructure.TIM_Period = 1;//重装值

TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Down;

TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);

TIM_ARRPreloadConfig(TIM3, ENABLE);

TIM_ITConfig(TIM3,TIM_IT_Update,DISABLE);

TIM_Cmd(TIM3, DISABLE);

}

void delay_ms(uint16_t nms)

{

uint16_t count;

count = nms*10;

TIM3->PSC = 7200-1;

TIM_GenerateEvent(TIM3,TIM_EventSource_Update);

TIM_SetCounter(TIM3,count);

TIM_Cmd(TIM3,ENABLE);

while(count>1)

{

count = TIM3->CNT;

}

TIM_Cmd(TIM3,DISABLE);

}

void delay_us(uint16_t nus)

{

uint16_t count;

count = nus;

TIM3->PSC = 72-1;

TIM_GenerateEvent(TIM3,TIM_EventSource_Update);

TIM_SetCounter(TIM3,count);

TIM_Cmd(TIM3,ENABLE);

while(count>1)

{

count = TIM3->CNT;

}

TIM_Cmd(TIM3,DISABLE);

}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/ziliao/beidong/274371.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部