stm32 定时器初步
今天學習STM32 的通用定時器:TIMx (TIM2、TIM3、TIM4 和 TIM5)。
定時器比較復雜,功能繁多,這里我們就說最基本的計數功能。
1.定時器的時鐘從哪里來?
定時器的時鐘來源有 4 個:?
1)內部時鐘(CK_INT)
2)外部時鐘模式 1:外部輸入腳(TIx)?
3)外部時鐘模式 2:外部觸發輸入(ETR)?
4)內部觸發輸入(ITRx):使用 A 定時器作為 B 定時器的預分頻器(A 為 B 提供時鐘)?
這些時鐘,具體選擇哪個可以通過 TIMx_SMCR 寄存器的相關位來設置。我們的實驗選擇內部時鐘。
注意:這里的 CK_INT時鐘是從 APB1 倍頻(*1或者*2)的來的:
如果 APB1 的時鐘分頻數設置為 1,那么就等于PCLK1;
如果 APB1 的時鐘分頻數設置不等于1,那么就等于PCLK1*2。
本實驗中,APB1的預分頻=2,所以TIMxCLK = PCLK1 * 2 = 36MHz * 2 = 72MHz.
看圖就明白了。
2.兩個關鍵的參數
1) ?PSC[15:0]:預分頻器的值 (Prescaler value)?
計數器的時鐘頻率CK_CNT等于F_CK_PSC /(PSC[15:0]+1)。?
假設我們的PSC[15:0]取值是7199,那么F_timx = 72MHz / 7200 = 10KHz,T = 1/10000 s?
2) ? ??ARR[15:0]: 自動重裝載的值 (Auto reload value)?
假設我們令其等于4999,如果設置了更新中斷,那么中斷的周期是 (4999+1)* 1/10000 s = 0.5s
3.代碼怎么寫?
//TIM3的初始化 //時鐘是72M //arr : 自動重裝載值 //psc: 預分頻值void TIM3_Int_Init(u16 arr,u16 psc) {TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;NVIC_InitTypeDef NVIC_InitStructure;RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //外設時鐘使能//TIM3初始化TIM_TimeBaseStructure.TIM_Period = arr; //自動重裝載值TIM_TimeBaseStructure.TIM_Prescaler =psc; //預分頻值TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //向上計數模式TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE); //使能更新中斷//中斷優先級配置NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); TIM_Cmd(TIM3, ENABLE); //開啟時鐘 }中斷程序如下
//定時器3的中斷服務程序 void TIM3_IRQHandler(void) {if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) //發生了更新中斷{TIM_ClearITPendingBit(TIM3, TIM_IT_Update); //清除中斷標志LED1=!LED1; //LED翻轉} }主函數如下
int main(void) { delay_init(); NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //設置中斷分組LED_Init(); //LED初始化TIM3_Int_Init(4999,7199);//定時器3初始化// T = 1/[72MHz/(7199+1)] * (4999+1) s = 0.5swhile(1){LED0=!LED0;delay_ms(200); } }
實驗結果:LED0每隔200ms 翻轉一次,LED1 每隔500ms翻轉一次。
仿真結果:
總結
以上是生活随笔為你收集整理的stm32 定时器初步的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 面试题,产品经理岗位的哪些特点最吸引你?
- 下一篇: 做产品,大公司克制,小公司放纵