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)));//等待时间到达...
void delay_us(u32 nus){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))); //等待时间到达SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk; /...
第0位:ENABLE,Systick 使能位 (0:关闭Systick功能;1:开启Systick功能) 第1位:TICKINT,Systick 中断使能位 (0:关闭Systick中断;1:开启Systick中断) 第2位:CLKSOURCE,Systick时钟源选择 (0:使用HCLK/8 作为Systick时钟;1:使用HCLK作为Systick时钟) 第3位:COUNTFLAG,Systick计数比较标志,如果在上次读取本寄存...
SysTick->LOAD=nus*fac_us; //时间加载 SysTick->VAL=0x00; //清空计数器 SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk; //开始倒数 do { temp=SysTick->CTRL; } while(temp&0x01&&!(temp&(1</等待时间到达 SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk; //关闭计数器 SysTick->VAL =0X00; //清空...
🔧 SysTick的配置SysTick的配置主要通过它的四个寄存器来完成: 控制寄存器(STK_CSR):控制SysTick的启动、中断使能和时钟源选择。 重载寄存器(STK_LOAD):设置SysTick计数器递减到0后重新加载的值,决定了中断的周期。 当前值寄存器(STK_VAL):读取时返回当前计数器的值,写它则使之清零,并清除计数比较标志。
NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ SysTick->VAL = 0UL; /* Load the SysTick Counter Value */ SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | SysTick_CTRL_TICKINT_Msk | ...
ENABLE(0)R/W: SysTick 定时器使能位 (当中断被使能后,需要关注 void SysTick_Handler(void) 函数) SysTick_Type->LOAD: (SysTick_Config() 函数会设置该寄存器) RELOAD(23:0)R/W: 重装载数值寄存器 当SysTick数到0,将被重装载的值 SysTick_Type->VAL: (SysTick_Config() 函数会设置该寄存器) ...
1.SysTick 控制和状态寄存器 (CTRL)用于配置 SysTick 定时器的工作模式、使能定时器和中断,并提供定时器当前状态的查询功能。具体的控制位包括:2.SysTick 重装载值寄存器 (LOAD)用于设置 SysTick 定时器的重装载值,即定时器计数器的初始值。当计数器减到零时,会触发中断请求,并根据加载寄存器的值重新装载计数...
第12行,函数的形参用于配置滴答定时器LOAD寄存器的数值,由于滴答定时器是一个递减计数器,启动后是将LOAD寄存器的数值赋给VAL寄存器,然后VAL寄存器做递减操作,等递减到0的时候重新加载LOAD寄存器的数值继续做递减操作。 函数的形参表示内核时钟多少个周期后触发一次Systick定时中断,比如形参配置为如下数值。
通过SysTick控制与状态寄存器的设置进行选择时钟源。 具体就是通过CLKSOURCE(时钟源)这一Bit位来选择: 再次看SysTick_Config函数源码: __STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) { if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) { return (1UL); /* Reload value impossible */ } Sy...