TIMX->CNT數值讀取


為了實現脈沖測量有時候需要使用定時器計數,STM32的定時器計數精度不錯,獨立於程序之外。可以通過軟件對其設定。當想要對信號進行測量時,只要設置好定期器就行。

舉例說明:

例,如想要通過TIMER5定時器實現某信號周期測量。

void TIM5_IRQHandler(void)
{ 

if(TIM3->SR&0X0001)//溢出中斷
{
LED1=!LED1;    
}    
//TIM3->CNT &= 0x0;
TIM3->SR&=~(1<<0);//清除中斷標志位 
}
//通用定時器中斷初始化
//這里時鍾選擇為APB1的2倍,而APB1為36M
//arr:自動重裝值。
//psc:時鍾預分頻數
//這里使用的是定時器3!
void TIM5_Int_Init(u16 arr,u16 psc)
{
NVIC_InitTypeDef NVIC_InitStructure;

RCC->APB1ENR|=1<<3;    //TIM5時鍾使能 
TIM5->ARR=arr; //設定計數器自動重裝值 
TIM5->PSC=psc; //預分頻器設置
TIM5->DIER|=1<<0; //允許更新中斷    
TIM5->CR1|=0x01; //使能定時器3

// 配置NVIC為優先級組1 /
//NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);

//配置中斷源:按鍵1 
// NVIC_InitStructure.NVIC_IRQChannel = TIM5_IRQn;
//配置搶占優先級
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
// 配置子優先級 
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;
// 使能中斷通道 
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure); 
}
View Code

先進行時鍾設置,開啟時鍾后,根據周期測量需要在測量地方獲取TIMX->CNT數值並進行保存。本例是測量數據發送周期,每次數據完成32bit時獲取計數器值進行保存,同時清空計數器值。

//串口任務的任務函數
void usart_task(void *pvParameters)
{
while(1)
{
if(dis_in_cnt == 32){ //第32位計數輸入完成則進入串口傳輸
timer3_cnt = TIM5->CNT;
TIM5->CNT = 0;

//省略部分無關代碼

}
vTaskDelay(10);
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM