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变量获取经过的时间。
|