日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁 > 單片機(jī) > 單片機(jī)
[導(dǎo)讀]問題:在調(diào)STM32的程序的時(shí)候,發(fā)現(xiàn)定時(shí)器(timer2)比自己設(shè)定的中斷周期縮小了一倍。設(shè)定為10ms中斷一次,但實(shí)測(cè)發(fā)現(xiàn)5ms便中斷了一次。初始化代碼如下:void InitTimer2(void){RCC->APB1ENR|=0x01; //enable cloc

問題:在調(diào)STM32的程序的時(shí)候,發(fā)現(xiàn)定時(shí)器(timer2)比自己設(shè)定的中斷周期縮小了一倍。設(shè)定為10ms中斷一次,但實(shí)測(cè)發(fā)現(xiàn)5ms便中斷了一次。

初始化代碼如下:

void InitTimer2(void)
{
RCC->APB1ENR|=0x01; //enable clock,max clock=36M
TIM2->PSC=71; // counter clock CK_CNT=72M/(71+1)=1M
TIM2->ARR=10000; // 10000*1us=10ms
TIM2->CR1 |=0x0080; //Auto-reload preload enable
TIM2->EGR |=0x0001; //Re-initialize the counter and generates an update of the registers.
TIM2->DIER|= 0x0001; //Update interrupt enabled
TIM2->CR1 |=0x01; //enable timer2
}

中斷服務(wù)函數(shù)如下:

void TIM2_IRQHandler(void)
{
TIM2->SR&=0xfffe;//位置一
DS[1].js++;
if(DS[1].js>500)
{
DS[1].en=1;
DS[1].js=0;
}

//TIM2->SR&=0xfffe;//位置二

}

原因分析:

如上圖代碼框架,通過多次試驗(yàn)發(fā)現(xiàn),當(dāng)中斷服務(wù)函數(shù)中執(zhí)行較少時(shí),把中斷清除操作放到位置二,一般也是沒有問題,但當(dāng)服務(wù)函數(shù)中執(zhí)行較多時(shí),會(huì)發(fā)現(xiàn)進(jìn)行中斷的周期會(huì)被縮小一半,當(dāng)把中斷清除操作放到位置一時(shí),會(huì)發(fā)現(xiàn)定時(shí)準(zhǔn)了。

根據(jù)以上現(xiàn)象的猜想如下:

內(nèi)核為72MHZ,而外設(shè)時(shí)鐘頻率最大為36MHZ,當(dāng)在中斷服務(wù)函數(shù)執(zhí)行且未及時(shí)清除中斷標(biāo)志時(shí),內(nèi)核發(fā)現(xiàn)還未進(jìn)行中斷,便再次啟動(dòng)了,中斷函數(shù),此時(shí)便會(huì)發(fā)生此類現(xiàn)象。此說法僅為臆斷,只為更好記住此應(yīng)用。

結(jié)論:在進(jìn)入中斷后首先要清除中斷標(biāo)志。


本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除( 郵箱:macysun@21ic.com )。
換一批
延伸閱讀
關(guān)閉