久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 17730|回復(fù): 3
收起左側(cè)

STM32 高級(jí)定時(shí)器TIM1“計(jì)時(shí)不準(zhǔn)”?

[復(fù)制鏈接]
ID:65608 發(fā)表于 2014-9-15 17:16 | 顯示全部樓層 |閱讀模式
      最近,在學(xué)習(xí)STM32單片機(jī),選用的型號(hào)是通用型STM32F103,在學(xué)習(xí)定時(shí)器應(yīng)用時(shí),遇到了一個(gè)很頭疼的問題,懷疑STM32 高級(jí)定時(shí)器TIM1“計(jì)時(shí)不準(zhǔn)”。       事情的來龍去脈是這樣的,之前寫了一個(gè)通過tim1定時(shí)器中斷實(shí)現(xiàn)led閃爍的程序,測(cè)試時(shí)led閃爍頻率和我設(shè)置的頻率一致,當(dāng)我后面繼續(xù)這個(gè)程序上添加ad采樣程序后,調(diào)試時(shí),偶然發(fā)現(xiàn)led閃爍頻率變慢,RCC時(shí)鐘配置和原來一樣,為什么加個(gè)ad采樣程序,會(huì)影響定時(shí)器工作,這讓我覺得非常奇怪。
       led閃爍頻率變慢,可以肯定與RCC配置和定時(shí)器配置有關(guān),當(dāng)時(shí)寫的程序如下:
void RCC_Configuration(void)
{
ErrorStatus HSEStartUpStatus;
RCC_DeInit();                     
RCC_HSEConfig(RCC_HSE_ON);
HSEStartUpStatus=RCC_WaitForHSEStartUp();
if(HSEStartUpStatus == SUCCESS)
{
FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);  
FLASH_SetLatency(FLASH_Latency_2);
RCC_HCLKConfig(RCC_SYSCLK_Div1);  
RCC_PCLK2Config(RCC_HCLK_Div1);
RCC_PCLK1Config(RCC_HCLK_Div2);   
RCC_ADCCLKConfig(RCC_PCLK2_Div6);
RCC_PLLConfig(RCC_PLLSource_HSE_Div2,RCC_PLLMul_9);     //16M外部晶振,16/2M*9=72
RCC_PLLCmd(ENABLE);              
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)==RESET);
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
while(RCC_GetSYSCLKSource() !=0x08);
}
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);      
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE);
}

void TIM1_Configuration(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef     TIM_OCInitStructure;
TIM_DeInit(TIM1);
TIM_InternalClockConfig(TIM1);
TIM_TimeBaseStructure.TIM_Period = 2000;          //計(jì)數(shù)2000次,每2000/2K=1s產(chǎn)生一次中斷   
TIM_TimeBaseStructure.TIM_Prescaler = 35999;    //進(jìn)行預(yù)分頻35999+1,72M/36K=2K Hz
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;  
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM1,&TIM_TimeBaseStructure);

TIM_PrescalerConfig(TIM1,35999,TIM_PSCReloadMode_Immediate);
TIM_ClearFlag(TIM1,TIM_FLAG_Update);
        TIM_ARRPreloadConfig(TIM1, DISABLE);
TIM_ITConfig(TIM1,TIM_IT_Update,ENABLE);
}


      從程序上看Tim1每一秒產(chǎn)生一次中斷,在中斷函數(shù)中實(shí)現(xiàn)led亮一秒暗一秒,但是實(shí)際led閃爍頻率會(huì)變慢,而當(dāng)我改變ad采集口時(shí),led閃爍頻率會(huì)變得更慢,配置io會(huì)影響時(shí)鐘,很無(wú)厘頭,這芯片還敢用嗎?實(shí)在沒辦法,我配置了一下Tim2,用Tim2定時(shí)中斷,結(jié)果一切都工作正常。這是什么邏輯,高級(jí)定時(shí)器tim1反而沒普通定時(shí)器tim2靠譜,無(wú)語(yǔ)。。。。。
       最近又查了下資料,終于發(fā)現(xiàn)tim1定時(shí)器有一些特有的配置功能,它可以控制溢出中斷的周期,它是由寄存器TIM1_RCR控制,如下圖所示,庫(kù)函數(shù)中是由TIM_TimeBaseStructure.TIM_RepetitionCounter 來控制


當(dāng)TIM_TimeBaseStructure.TIM_RepetitionCounter=N時(shí),表示重復(fù)溢出N次后,才產(chǎn)生一次中斷;當(dāng)TIM_TimeBaseStructure.TIM_RepetitionCounter=0時(shí),當(dāng)然就表示溢出直接中斷。所以當(dāng)在配置tim1定時(shí)器時(shí),在TIM_TimeBaseInit();前面加一句TIM_TimeBaseStructure.TIM_RepetitionCounter=0;定時(shí)器1一切工作正常。
       問題雖然解決,但依然很奇怪的是,TIM1_RCR的復(fù)位值為0,即使我不在程序中將其置零,也不會(huì)影響它的值,為什么程序運(yùn)行時(shí)它的值會(huì)莫名其妙的被改變,這個(gè)問題想不通!
       P.S. 測(cè)試時(shí)又偶然發(fā)現(xiàn),TIM1和TIM2工作時(shí)的時(shí)鐘頻率都是72M,不是說TIM2是來源于APB2,是36M嗎?

回復(fù)

使用道具 舉報(bào)

ID:77005 發(fā)表于 2016-5-11 23:33 | 顯示全部樓層
哥們  特意注冊(cè)一個(gè)號(hào)來感謝你啊,這個(gè)問題困擾我好久。。。
回復(fù)

使用道具 舉報(bào)

ID:142416 發(fā)表于 2016-10-12 12:07 | 顯示全部樓層
感謝~查了半天~終于知道了~以前能用的就是調(diào)整優(yōu)化級(jí)別后出現(xiàn)的問題~
那個(gè)來源APB2的定時(shí)器是有一個(gè)2倍頻的~所以也是72m
回復(fù)

使用道具 舉報(bào)

ID:194316 發(fā)表于 2017-4-27 19:36 | 顯示全部樓層
哥們。我特意注冊(cè)了一個(gè)號(hào)碼,來感謝你的,今天下午排查這個(gè)問題半天,看到你的提示,解決問題了,謝謝。對(duì)于你說的為什么TIME2 時(shí)鐘會(huì)是72MHZ,你仔細(xì)看時(shí)鐘樹,當(dāng)你配置住時(shí)鐘為72Mhz,經(jīng)過APB1 2分頻為36MHZ,這個(gè)時(shí)鐘一個(gè)是給給了APB1外設(shè),另外是給定時(shí)器2-7,但是給定時(shí)器2-7之前,有句話是“如果APB1預(yù)分頻系數(shù)為1,那么頻率不變,不為1,那么頻率為*2”,我們APB1預(yù)分頻系數(shù)為2,所以定時(shí)器2-7的時(shí)鐘頻率就為了72Mhz。
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 日本欧美在线观看视频 | 久久久久亚洲精品中文字幕 | 在线精品亚洲欧美日韩国产 | 亚洲欧美日韩高清 | 中文字字幕一区二区三区四区五区 | 欧美国产一区二区三区 | 在线欧美 | 国产精品日本一区二区在线播放 | 一a级片 | 奇米视频777| 成人免费精品视频 | 国产激情片在线观看 | 韩国久久 | 国产精品久久久久久av公交车 | 国产日韩欧美一区二区在线播放 | 一区二区三区在线免费观看 | 久久成人综合 | 九九视频在线观看 | 丁香五月网久久综合 | 国产一区二区不卡 | 黄色综合 | 国产视频不卡一区 | 欧美一区二区 | 免费在线观看黄网站 | 91亚洲精品久久久电影 | 精品日韩电影 | 欧美1区2区 | 日本天天操 | 国产精品免费一区二区三区四区 | 久久综合av| 色婷婷国产精品综合在线观看 | 九九免费观看视频 | 亚洲精品二区 | 日本一区二区在线视频 | 在线免费视频一区 | 91免费版在线 | 日本黄色大片免费 | 伊人久久精品一区二区三区 | 成人日b视频 | 91在线电影 | 亚洲h视频|