参考:
简介
主要特性
框图
功能
时基单元
计数模式
基本定时器只有向上计数模式
不同预分频数的时序图:
自动重装载是否预装载的时序图:
时钟源
基本定时器只有内部时钟源
主模式
基本定时器只有主模式,没有从模式
参考寄存器->TIMx_CR2->MMS
寄存器
总览
控制寄存器 1(TIMx_CR1)
ARPE:直接写入影子寄存器还是等待更新事件写入影子寄存器
控制寄存器 2(TIMx_CR2)
基本定时器只有主模式
DMA/中断使能寄存器(TIMx_DIER)
状态寄存器(TIMx_SR)
事件产生寄存器(TIMx_EGR)
计数器(TIMx_CNT)
预分频器(TIMx_PSC)
自动重装载寄存器(TIMx_ARR)
hal库相关函数
示例
定时器中断控制led闪烁
宏定义
1 2 3 4
| #define BTIM_TIMX_INT TIM6 #define BTIM_TIMX_INT_IRQn TIM6_DAC_IRQn #define BTIM_TIMX_INT_IRQHandler TIM6_DAC_IRQHandler #define BTIM_TIMX_INT_CLK_ENABLE() do{ __HAL_RCC_TIM6_CLK_ENABLE(); }while(0)
|
全局变量
1
| TIM_HandleTypeDef g_timx_handle;
|
初始化
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
|
void btim_timx_int_init(uint16_t arr, uint16_t psc) { g_timx_handle.Instance = BTIM_TIMX_INT; g_timx_handle.Init.Prescaler = psc; g_timx_handle.Init.CounterMode = TIM_COUNTERMODE_UP; g_timx_handle.Init.Period = arr; HAL_TIM_Base_Init(&g_timx_handle);
HAL_TIM_Base_Start_IT(&g_timx_handle); }
void HAL_TIM_Base_MspInit(TIM_HandleTypeDef *htim) { if (htim->Instance == BTIM_TIMX_INT) { BTIM_TIMX_INT_CLK_ENABLE(); HAL_NVIC_SetPriority(BTIM_TIMX_INT_IRQn, 1, 3); HAL_NVIC_EnableIRQ(BTIM_TIMX_INT_IRQn); } }
|
中断服务函数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
|
void BTIM_TIMX_INT_IRQHandler(void) { HAL_TIM_IRQHandler(&g_timx_handle); }
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) { if (htim->Instance == BTIM_TIMX_INT) { LED1_TOGGLE(); } }
|
主函数
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| int main(void) { HAL_Init(); sys_stm32_clock_init(RCC_PLL_MUL9); delay_init(72); led_init(); btim_timx_int_init(5000 - 1, 7200 - 1);
while (1) { LED0_TOGGLE(); delay_ms(200); } }
|