staticu8fac_us=0;//us延时倍数staticu16fac_ms=0;//ms延时倍数delay_init(void);delay_ms(u16nms);delay_us(u32nus); delay_init(void)函数 //选择时钟源函数SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);//SystemCoreClock 定义在芯片文件中 SYSCLK_FREQ_72MHz 72000000//定义了系统时钟的频率...
void delay_xms(uint16_t nms) { uint32_t temp; // fac_ms是毫秒延时因子,需要根据系统时钟频率计算 SysTick->LOAD = (nms * fac_ms) - 1; // 注意这里减1是因为LOAD寄存器是24位的,最大值为2^24-1 SysTick->VAL = 0x00; // 清空计数器 SysTick->CTRL = 0x01; // 开始倒数...
该函数用来初始化2个重要参数:fac_us以及fac_ms;tongshi ba SysTick的时钟源选择位外部时钟,在不加入系统的时候,延时初始化函数的代码如下: 代码语言:javascript 代码运行次数:0 运行 AI代码解释 // 初始化延时函数//SYSTICK的时钟固定为HCLK时钟的1/8staticuint8_t fac_us=0;voiddelay_init(uint8_tSYSCLK)...
//SYSCLK:系统时钟 void delay_init() { SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8); //选择外部时钟 HCLK/8 fac_us=SystemCoreClock/8000000; //为系统时钟的1/8 fac_ms=(u16)fac_us*1000; //非OS下,代表每个ms需要的systick时钟数 } //延时nus //nus为要延时的us数。 void delay_us(...
非RTOS 的delay功能实现 时钟使用SystemInit()初始化(3.5版本库函数)STM32F10x_StdPeriph_Lib_V3.5.0 uint32_t SystemCoreClock = SYSCLK_FREQ_72MHz;/*!< System Clock Frequency (Core Clock)*/ #include"delay.h"staticuint16_t factor_us;//根据系统时钟,延时1uS的计数值staticuint16_t factor_ms;/...
(uint32_t SysTick_CLKSource){ /* Check the parameters */ assert_param(IS_SYSTICK_CLK_SOURCE(SysTick_CLKSource)); if (SysTick_CLKSource == SysTick_CLKSource_HCLK) { SysTick->CTRL |= SysTick_CLKSource_HCLK; //内部时钟72M } else { SysTick->CTRL &= SysTick_CLKSource_HCLK_Div8; //...
//SYSCLK:系统时钟 void delay_init() { SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8); //选择外部时钟 HCLK/8 fac_us=SystemCoreClock/8000000; //为系统时钟的1/8 fac_ms=(u16)fac_us*1000; //非OS下,代表每个ms需要的systick时钟数 ...
__STATIC_INLINE void CLK_SysTickDelay(uint32_t us){ SysTick->LOAD = us * CyclesPerUs;Sys...
LOAD:SysTick 重装载数值寄存器 VAL:SysTick当前数值寄存器 此处参考外设库的例子,程序结构和逻辑大致如下: 通过SystemInit()配置好时钟; 通过SysTick_Config(SystemCoreClock/1000)配置SysTick时钟; 创建Delay(__IO uint32_t nTime)毫秒延时函数(设置执行几次中断,时间为nTime×中断时间); ...
时钟源可以是内部时钟FCLK或外部时钟STCLK 配置系统定时器步骤: ①选择时钟源②设定重载数(reload)③开启中断④启动滴答定时器 在core_cm3.h中有关于系统定时器的配置: static__INLINE uint32_t SysTick_Config(uint32_t ticks) {if(ticks > SysTick_LOAD_RELOAD_Msk)return(1);/*Reload value impossible 判...