< Offset: 0x00C (R/ ) SysTick Calibration Register */} SysTick_Type;/* SysTick Control / Status Register Definitions */#defineSysTick_CTRL_COUNTFLAG_Pos 16U/*!< SysTick CTRL: COUNTFLAG Position */#defineSysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos)/*!< SysTick CTR...
1voiddelay_us(uint32_t nus)2{3uint32_t temp;4SysTick->LOAD = RCC_Clocks.HCLK_Frequency/1000000/8*nus;5SysTick->VAL=0X00;//清空计数器6SysTick->CTRL=0X01;//使能,减到零是无动作,采用外部时钟源7do8{9temp=SysTick->CTRL;//读取当前倒计数值10}while((temp&0x01)&&(!(temp&(1<<16)...
SysTick 主要包含CTRL、LOAD、VAL、CALIB 等4 个寄存器。 CTRL:控制和状态寄存器 LOAD:自动重装载除值寄存器 VAL:当前值寄存器 CALIB:校准值寄存器 代码 上述工程源码仓库:https://github.com/strongercjd/STM32F207VCT6/tree/master/04-Delay 汇编指令 如果系统硬件资源紧张,或者没有额外的定时器提供,又不想方法1的...
voiddelay_us(u32 nus)// nus 不要大于798915,因为LOAD寄存器是24位的{u32 temp;SysTick->LOAD=nus*fac_us;// 需要延时的时间SysTick->VAL=0x00;//清空计数器SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk;// 开始倒数do{temp=SysTick->CTRL;}while((temp&0x01)&&!(temp&(1<<16)));//等待时间到达...
ENABLE_Msk; // 清空计时器 SysTick->VAL = 0x00; }/** * 毫秒延时*/void delay_ms(u32 ms){ delay_us(ms*1000);}/** * 秒延时*/void delay_second(u32 second){ for(int i=0;i<second;i++){ delay_ms(1000); }}2. main.c #include "gpio_utils.h"#include "rc...
自定义的us延时 void my_delay_us(uint32_t nus) { uint32_t temp; uint32_t fac_us = SystemCoreClock/1000000; //为系统时钟的1/1000000 SysTick->LOAD = nus*fac_us; //时间加载 SysTick->VAL = 0x00; //清空计数器 SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk ; //开始倒数 ...
#define Value_us 21#define Value_ms 21000 void delay_init(void){ SysTick->CTRL &= (1 << 2); //控制寄存器位2置0,选择8分频时钟 SysTick->CTRL &= ~(1 << 0); //关闭计数器}void delay_us(u32 num){ SysTick->LOAD = num * Value_us; SysTick->VAL = 0; SysTick->CTRL |= (...
在上述代码中,SystemCoreClock是定义了系统时钟(SYSCLK)频率的宏,对于STM32F103x系列mcu,SystemCoreClock被系统库配置成72Mhz。 2.2 实现delay_us()函数 使用systick定时器实现微秒级延时函数delay_us(): void delay_us(uint32_t nus) { uint32_t temp; SysTick->LOAD = nus * fac_us; SysTick->VAL = 0x...
* SystemFrequency / 100000 10us中断一次 * SystemFrequency / 1000000 1us中断一次 */if(SysTick_Config(SystemCoreClock/1000)){/* Capture error */while(1);}} 延时函数 和 SysTick 中断处理函数 static__IO u32 TimingDelay;voiddelay_ms(__IO u32 nTime){TimingDelay=nTime;while(TimingDelay!=0);}...
2.3 SysTick当前值寄存器-VAL 三、delay延时函数讲解 3.1 用中断的方式实现delay延时 3.2 用查询方法实现delay延时 3.2.1 延时初始化函数 3.2.2 us延时函数和xms延时函数 ...