第一步:
具體配置如下圖:激活需要使用到的外設(shè)定時(shí)器,當(dāng)系統(tǒng)時(shí)鐘頻率為64MHz時(shí),我們希望1MS發(fā)生中斷一次;就可以把時(shí)鐘的預(yù)分頻系數(shù)設(shè)置為64-1;計(jì)數(shù)周期設(shè)置為1000-1;計(jì)數(shù)方式為 Up 向上計(jì)數(shù),此時(shí)得到的中斷頻率為:64,000,000 /64 /1000 = 1MS = 1Khz ;
第二步:
可以根據(jù)自身需要在NVIC 中斷控制器中配置中斷響應(yīng)優(yōu)先級。
第三步:
代碼分析:
先看TIM7的初始化函數(shù):static void MX_TIM7_Init(void)
static void MX_TIM7_Init(void)
{
/* USER CODE BEGIN TIM7_Init 0 */
/* USER CODE END TIM7_Init 0 */
TIM_MasterConfigTypeDef sMasterConfig = {0};
/* USER CODE BEGIN TIM7_Init 1 */
/* USER CODE END TIM7_Init 1 */
htim7.Instance = TIM7;
htim7.Init.Prescaler = 64-1;
htim7.Init.CounterMode = TIM_COUNTERMODE_UP;
htim7.Init.Period = 1000-1;
htim7.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
if (HAL_TIM_Base_Init(&htim7) != HAL_OK)
{
Error_Handler();
}
sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
if (HAL_TIMEx_MasterConfigSynchronization(&htim7, &sMasterConfig) != HAL_OK)
{
Error_Handler();
}
/* USER CODE BEGIN TIM7_Init 2 */
//在這這里添加這行代碼,意思是初始化完成便開啟定時(shí)器中斷計(jì)數(shù)
HAL_TIM_Base_Start_IT(&htim7);
/* USER CODE END TIM7_Init 2 */
}
/* USER CODE BEGIN 4 */
//在BEGIN 4 中添加定時(shí)器中斷服務(wù)函數(shù)
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
if (htim->Instance == htim7.Instance) //如果是TIM7響應(yīng)進(jìn)來的中斷
{
MS ++; //前面配置中斷更新時(shí)間為1MS,那么這里進(jìn)來一次MS加一次
if(MS == 1000) //當(dāng)MS加到1000時(shí),即1S
{
HAL_GPIO_TogglePin(LED1_GPIO_Port,LED1_Pin); //即1S LED翻轉(zhuǎn)一次
MS =0; //MS用完后記得清0
}
}
}
/* USER CODE END 4 */
如果能理解到這里,恭喜你已經(jīng)學(xué)會了定時(shí)器的基本操作!
-
定時(shí)器
+關(guān)注
關(guān)注
23文章
3246瀏覽量
114721 -
函數(shù)
+關(guān)注
關(guān)注
3文章
4327瀏覽量
62573 -
代碼
+關(guān)注
關(guān)注
30文章
4779瀏覽量
68525
發(fā)布評論請先 登錄
相關(guān)推薦
評論