本讲实现内容:在LCD上显示定时器中断的值,每过一秒值+1
基于上一讲ADC12的文件来编这一讲的代码,记得inc和src中的创建
CubeMX配置
打开CubeMX,把TIM6(定时器6)激活
当我们时钟频率为80Mhz时,分频系数给8000,计数器频率 = 时钟频率 /(分频系数+1)
计数器频率 = 80000000 / 8000 = 1000hz , 则计数器周期为T = 1/f = 10*-4次方秒(相当于记一个数花费10^-4次方秒 = 1秒能记10^4次方个数)
我们程序设计每一秒进入一次中断,所以在CubeMX里配置,并使能中断
PSC: 8000分频,配置7999
ARR:10000重装载值,配置9999
配置中断优先级组,串口肯定能打断定时器,定时器的抢占优先级要低于串口
CubeMX配置完毕,生成源码
修改主代码
复制粘贴源码tim.c里的两个初始化函数到bsp_basic_tim6.c并在bsp_basic_tim6.h里声明
声明变量htim6需要用到extern
因为用到了中断,所以还需要粘贴源码it.c里的中断函数到这次工程的it.c里
在主函数中声明
TIM6一秒产生一次中断,产生中断就跳入it.c的TIM中断函数里
产生中断后进入HAL_TIM_IRQHandler(&htim6); 这个函数里会调用Callback回调函数
如何找callback函数?
从main.h按如下步骤一步步go to 直到hal_tim.h,拉到最下边就能找到
想让定时器靠中断打开还需要定时器函数HAL_TIM_Base_Start_IT(TIM_HandleTypeDef *htim)
在定时器中断调用结束后同样需要再打开定时器中断
定义i值来计算定时器每秒+1的数值
每过一秒就进入一次定时器中断,i值+1
到LCD_Proc里实现本章内容:每过一秒定时器的值+1