<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 重返STM32之---STM32定時(shí)器的誤解

重返STM32之---STM32定時(shí)器的誤解

作者: 時(shí)間:2016-11-11 來(lái)源:網(wǎng)絡(luò ) 收藏
說(shuō)是接觸STM32都快3年了,說(shuō)來(lái)也慚愧,很多東西都還沒(méi)搞明白;應該也是因為英文水平有待提到的原因,不能正確的理解英文的含義,畢竟我們的語(yǔ)言思維是不一樣的(找個(gè)借口吧哈哈)。

最近在用STM32的定時(shí)器,以前都是匆匆走過(guò),由于自己想標準化自己的編程代碼,所以這次很用心的用通用定時(shí)器寫(xiě)通用的延時(shí)函數,網(wǎng)上很多都是用的系統滴答時(shí)鐘(SysTlck)來(lái)做的,但是想著(zhù)自己要向操作系統方向發(fā)展,就不能用這個(gè)定時(shí)器了。

本文引用地址:http://dyxdggzs.com/article/201611/316594.htm

平時(shí)因為用的是滴答時(shí)鐘來(lái)做的延時(shí)函數,就沒(méi)怎么去深究;這次用通用定時(shí)來(lái)做的時(shí)候,發(fā)現問(wèn)題一大把。首先就是定時(shí)器的時(shí)鐘分頻,第二個(gè)就是如何不用中斷來(lái)實(shí)現定時(shí)。因為自己覺(jué)得對STM32很了解,所以就范范的寫(xiě)了代碼,覺(jué)得自己肯定沒(méi)問(wèn)題;編譯下載。What f**k?!居然定時(shí)不對,和我以前理解的定時(shí)器不一樣?還是我的代碼有問(wèn)題?花了大半天去看每個(gè)寄存器;(其實(shí)我最開(kāi)始用的就是直接操作寄存器,后來(lái)才用的庫函數)覺(jué)得沒(méi)問(wèn)題呀;后來(lái)想要不在把每個(gè)寄存的意思在認真理解一遍;不看不知道,一看下一跳呀。哎,多的廢話(huà)就不說(shuō)了,直接看圖吧。

第一個(gè)就是我們認為是控制時(shí)鐘分頻的寄存器,以前大家都是設置為00,但是當把它設置為其他值時(shí),發(fā)現定時(shí)沒(méi)有變化;其實(shí)是被名稱(chēng)誤導了,仔細看后邊的說(shuō)明,這個(gè)時(shí)鐘只是用于數字濾波器?。?!更本沒(méi)有改變定時(shí)器的時(shí)鐘。它只影響ETR和TIX。

第二個(gè)就是對于定時(shí)器時(shí)鐘和APB1時(shí)鐘是一致的誤解。

其實(shí)定時(shí)器的時(shí)鐘和系統時(shí)鐘是一致的。所以更本不是APB1的時(shí)鐘。

其實(shí)現在才發(fā)現自己以前有多么的不仔細,經(jīng)過(guò)此事以后發(fā)現在技術(shù)方面對自己要求太低了,什么都是了解一個(gè)大概;要用的時(shí)候才發(fā)現自己千瘡百孔。

這也算是提醒自己,也提醒正在嵌入式系統開(kāi)發(fā)道路上的仁兄們,萬(wàn)事要認真呀?。?!

貼一段我自己寫(xiě)通用定時(shí)器代碼吧。

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;//采樣時(shí)鐘分頻.不是定時(shí)器時(shí)鐘分頻。

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);

}




關(guān)鍵詞: STM32定時(shí)

評論


技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>