本文主要是介绍STM32定时器笔记_中断方式_10ms,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1. TIM 参考资料整理
《STM32F10xxx参考手册.pdf》P.256
当发生一个更新事件时,所有的寄存器都被更新,硬件同时(依据URS位)设置更新标志位(TIMx_SR寄存器中的UIF位)。 ● 预分频器的缓冲区被置入预装载寄存器的值(TIMx_PSC寄存器的内容)。 ● 自动装载影子寄存器被重新置入预装载寄存器的值(TIMx_ARR)。
注:内部时钟(CK_INT)
《[Reference manual]STM32F101xx, STM32F102xx, STM32F103xx, STM32F105xx and STM32F107xx advanced ARM-based 32-bit MCUs.pdf》8.2 Clocks
2. 10ms定时器,每10ms中断一次,在回调函数中处理。
(1) 设置时钟
STM32F103的TIM2定时器的clock为APB1
《[Datasheet]STM32F103x8_xB.pdf》P.11
(2) 设置定时器
72 000 000 / 72 / 10 000 = 100Hz,即10ms
自动生成的代码如下:
/* TIM2 init function */
void MX_TIM2_Init(void)
{TIM_ClockConfigTypeDef sClockSourceConfig = {0};TIM_MasterConfigTypeDef sMasterConfig = {0};htim2.Instance = TIM2;htim2.Init.Prescaler = 72-1;htim2.Init.CounterMode = TIM_COUNTERMODE_UP;htim2.Init.Period = 10000-1;htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;if (HAL_TIM_Base_Init(&htim2) != HAL_OK){Error_Handler();}sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK){Error_Handler();}sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK){Error_Handler();}}
(3) 在主while(1)前,添加如下代码,开启定时器中断
HAL_TIM_Base_Start_IT(&htim2);
(4) 在程序中添加如下函数,实现10ms中断回调函数
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{if(htim->Instance == TIM2){}
}
这篇关于STM32定时器笔记_中断方式_10ms的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!