最近我在学习正点原子STM32F767的FreeRTOS移植过程中碰到了delay.c文件设置出错的问题,现已解决,故发出来做个记录,也方便碰到同样问题的XDM借鉴。
#include "delay.h"
#include "FreeRTOS.h"
#include "task.h"
extern void xPortSysTickHandler(void);
static u8 fac_us=0; //us延时倍乘数
static u32 fac_ms=0;
//systick 中断服务函数,使用 OS 时用到
void SysTick_Handler(void)
{
if(xTaskGetSchedulerState()!=taskSCHEDULER_NOT_STARTED)//系统已经运行
{
xPortSysTickHandler();
}
HAL_IncTick();
}
//初始化延时函数
//当使用 FreeRTOS 的时候,此函数会初始化 FreeRTOS 的时钟节拍
//SYSTICK 的时钟固定为 AHB 时钟
//SYSCLK:系统时钟频率
void delay_init(u8 SYSCLK)
{
u32 reload;
//SysTick 频率为 HCLK
HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);
fac_us=SYSCLK; //不论是否使用 OS,fac_us 都需要使用
reload=SYSCLK; //每秒钟的计数次数 单位为 K
reload*=1000000/configTICK_RATE_HZ; //根据 configTICK_RATE_HZ 设定溢出时间
//reload 为 24 位寄存器,最大值:16777216,
//在 180M 下,约合 0.745s 左右
fac_ms=1000/configTICK_RATE_HZ; //代表 OS 可以延时的最少单位
SysTick->CTRL|&