前言
大部分接触STM32的学生还是以电赛为目的的,由于最近省赛时间紧迫,所以对于STM32的学习更多的在应用层,接下去的文章对于原理的介绍会减少,主要在于应用。
一、定时器类型
STM32F103C8T6外设:TMI1,TIM2,TIM3,TIM4
二、定时器具体配置
1.时间单元设置及通道初始化
这里的计数器溢出频率单位是赫兹,计数器溢出频率的倒数就是定时器触发的时间周期,一般我们计算用的是下面一个等于号的式子,这里的符号表示如下:
CK_PSC 一般为72Mhz(720 0000)
ARR 自动重装 对应变量TIM_Period 范围0~65535
PSC 分频 对应变量 TIM_Prescaler 范围0~65535
还有一些具体的操作看代码的注释,套模板即可
1. void Timer_Init(void) 2. { 3. RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); 4. 5. TIM_InternalClockConfig(TIM2);//选择哪个中断就写哪个 6. 7. TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure; 8. TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;//修改分频,对实际情况影响不大,可以不修改 9. TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;//向上对齐模式,同时还有向下对齐,中央对齐模式 10. TIM_TimeBaseInitStructure.TIM_Period = 10000 - 1; 11. TIM_TimeBaseInitStructure.TIM_Prescaler = 7200 - 1; 12. TIM_TimeBaseInitStructure.TIM_RepetitionCounter = 0;//高级计数器需要,不需要用到的直接给0就好 13. TIM_TimeBaseInit(TIM2, &TIM_TimeBaseInitStructure); 14. 15. TIM_ClearFlag(TIM2, TIM_FLAG_Update);//用于解决一复位时就先进一次中断的情况 16. TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE); 17. 18. NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); 19. 20. NVIC_InitTypeDef NVIC_InitStructure; 21. NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn; 22. NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; 23. NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;//抢占优先级 24. NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;//响应优先级 25. NVIC_Init(&NVIC_InitStructure); 26. 27. TIM_Cmd(TIM2, ENABLE); 28. }
2.定时器中断函数
直接套模板即可
1. void TIM2_IRQHandler(void) 2. { 3. if (TIM_GetITStatus(TIM2, TIM_IT_Update) == SET) 4. { 5. 6. TIM_ClearITPendingBit(TIM2, TIM_IT_Update);//清出中断寄存器标志位,用于退出中断 7. } 8. }