STM32的标准库(HAL库)的例程,演示了如何配置系统定时器(SysTick)并使用定时器中断的方式。
这个例程中,我们将SysTick定时器配置为每秒触发一次中断,并在中断中更新一个全局变量来表示经过的秒数。
- #include "stm32f4xx_hal.h"
- // 全局变量,表示经过的秒数
- volatile uint32_t seconds = 0;
- // SysTick中断处理函数
- void SysTick_Handler(void)
- {
- // 每秒钟递增一次
- seconds++;
- }
- int main(void)
- {
- // 初始化HAL库
- HAL_Init();
- // 配置系统时钟
- SystemClock_Config();
- // 配置SysTick定时器
- if (HAL_InitTick(TICK_INT_PRIORITY) != HAL_OK)
- {
- Error_Handler();
- }
- // 配置SysTick定时器为1秒一次
- HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq() / 1000);
- // 启动SysTick定时器
- HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);
- HAL_SYSTICK_Enable();
- // 主循环
- while (1)
- {
- // 在这里可以执行其他任务
- }
- }
- // 系统时钟配置函数(由CubeMX生成)
- void SystemClock_Config(void)
- {
- // 系统时钟配置代码
- // ...
- }
- // 错误处理函数
- void Error_Handler(void)
- {
- // 发生错误时的处理代码
- while (1)
- {
- // 在这里可以添加错误处理的代码
- }
- }
- #ifdef USE_FULL_ASSERT
- // 断言失败处理函数
- void assert_failed(uint8_t* file, uint32_t line)
- {
- // 发生断言失败时的处理代码
- }
- #endif /* USE_FULL_ASSERT */
这个例程中,SysTick定时器被配置为每秒触发一次中断。
在中断处理函数SysTick_Handler中,全局变量seconds会递增,表示经过的秒数。
在主循环中,你可以执行其他任务,同时使用seconds变量获取经过的时间。
|