使用定時器實現定時中斷的功能:比如每1ms進入中斷處理函數
使用STM32CubeMX配置TIM初始化
?先了解每個參數的含義,在進行配置
Counter Settings:? 計數器基本設置
? ? ? ? Prescaler(PSC):? 預分頻器,設置預分頻器系數
? ? ? ? Counter Mode:? 技術模式,上/下/中央對齊
? ? ? ? Counter Period(AutoReload Register):? 計數周期,ARR的值
? ? ? ? Internal Clock Division:? 內部時鐘頻率,對輸入到定時器內部的時鐘進行分頻,位于預分頻器后面,作用是:數字濾波、信號同步、噪聲抑制
? ? ? ? auto-reload preload:? 自動裝載預裝載,影子寄存器,是否啟用
Trigger Output(TRGO) Parameters:? 觸發輸出參數?
? ? ? ? Master/Slave Mode:? 主從模式選擇
? ? ? ? Trigger Event Selection:? 觸發事件選擇,觸發輸出TRGO
?**************************
使用的L4進入定時器的頻率是 80Mhz
我們選擇80分頻,就是1Mhz,1000 / 1000 000 = 0.001s,就是1ms
int main(void)
{HAL_Init();SystemClock_Config();MX_TIM4_Init();// 以中斷模式啟動定時器// 啟動后 會一直循環 不會停止if (HAL_TIM_Base_Start_IT(&htim4) != HAL_OK){Error_Handler();}while (1){}
}// 用戶的中斷回調函數 編寫自己所需功能
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{if(htim->Instance == TIM4){// 比如使 LED 亮滅HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_13); }
}
void MX_TIM4_Init(void)
{ TIM_ClockConfigTypeDef sClockSourceConfig = {0}; // TIM時鐘配置結構體TIM_MasterConfigTypeDef sMasterConfig = {0}; // TIM主機配置結構體htim4.Instance = TIM4;htim4.Init.Prescaler = 79; // 分頻系數htim4.Init.CounterMode = TIM_COUNTERMODE_UP; // 向上計數模式htim4.Init.Period = 1000; // 計數周期htim4.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; // 內部時鐘分頻htim4.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; // 自動重裝載影子寄存器if (HAL_TIM_Base_Init(&htim4) != HAL_OK){Error_Handler();}sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; // 選擇內部時鐘源if (HAL_TIM_ConfigClockSource(&htim4, &sClockSourceConfig) != HAL_OK){Error_Handler();}sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; // 主輸出觸發源復位sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; // 不使能主機模式if (HAL_TIMEx_MasterConfigSynchronization(&htim4, &sMasterConfig) != HAL_OK){Error_Handler();} }void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* tim_baseHandle)
{if(tim_baseHandle->Instance==TIM4){ __HAL_RCC_TIM4_CLK_ENABLE(); // 打開TIM4時鐘/* TIM4 interrupt Init */HAL_NVIC_SetPriority(TIM4_IRQn, 0, 0); // 設置TIM4中斷優先級HAL_NVIC_EnableIRQ(TIM4_IRQn); }
}
?
?