用stm32f407开发板的标准库函数写一个系统时钟滴答计时器systick
时间: 2024-09-18 13:12:51 浏览: 43
在STM32F407开发板上,标准库函数`SysTickDelay()`通常用于实现Systick定时器的功能,这是一个非常基础的时间管理工具。Systick是一个嵌入式定时器,周期默认为1ms,在STM32中主要用于实现简单的延时、计数等功能。
以下是一个简化的示例代码片段,展示了如何设置并利用Systick实现一个基本的100毫秒延时:
```c
#include "stm32f4xx_hal.h"
// 定义Systick的中断处理函数
void SysTick_IRQHandler(void)
{
// 禁止抢占模式
__disable_irq();
// 当Systick计数溢出时,标志位为SET
if (__HAL_SYSTICK_GET_FLAG() != RESET) {
__HAL_SYSTICK_CLEAR_FLAG(); // 清除标志位
// 滴答计数器加1,代表1ms时间过去
++global_tick_counter;
// 如果达到设定的目标时间,例如100ms,执行相应的任务
if (global_tick_counter >= 100) {
global_tick_counter = 0; // 重置计数器
// 这里可以添加你的延时结束后的操作
}
}
// 启动抢占模式
__enable_irq();
}
int main(void)
{
// 初始化系统时钟
HAL_Init();
// 开启Systick定时器,并配置周期为1ms
HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq() / 1000);
HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);
// 配置Systick中断
HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0); // 设置优先级最高
HAL_NVIC_EnableIRQ(SysTick_IRQn); // 开启中断
// 示例全局变量,记录Systick计数
uint8_t global_tick_counter = 0;
while (1)
{
// 主程序在这里运行...
}
}
阅读全文