Timer
Timer的示例工程实现了以Timer的中断方式定时打印程序中相关信息。
Timer示例的源代码和工程文件位于SDK_Folder\projects\peripheral\timer\timer,其中工程文件在文件夹Keil_5下。
代码理解
示例工程流程图如图 40所示:
- 配置Timer模块。
g_tim0_handle.p_instance = TIMER0; g_tim0_handle.init.auto_reload = SystemCoreClock - 1; hal_timer_base_init(&g_tim0_handle); g_tim1_handle.p_instance = TIMER1; g_tim1_handle.init.auto_reload = SystemCoreClock / 100 - 1; hal_timer_base_init(&g_tim1_handle);auto_reload:自动重载值,TIMER0选择1s加载一次,TIMER1选择10 ms加载一次。
- 调用hal_timer_base_start_it()启用中断方式计时,auto_reload定时时间到时通过接口hal_timer_period_elapsed_callback()返回。代码如下:
void hal_timer_period_elapsed_callback(timer_handle_t *htim) { if (htim->p_instance == TIMER0) { printf("\r\nThis is %dth call TIMER0.\r\n", g_tim0_cnt++); } else { g_tim1_cnt++; } } hal_timer_base_start_it(&g_tim1_handle); hal_timer_base_start_it(&g_tim0_handle); - 调用hal_timer_base_stop_it()结束中断方式计时。代码如下:
hal_timer_base_stop_it(&g_tim1_handle); hal_timer_base_stop_it(&g_tim0_handle);
测试验证
- 用GProgrammer下载timer.bin至开发板。
- 将开发板串口连接至PC端,打开并配置GRUart。
- 在GRUart窗口中程序每秒打印一次调试信息,打印10次后程序运行结束。