SysTick->LOAD和SysTick->VAL
时间: 2024-06-08 09:10:26 浏览: 124
SysTick->LOAD是SysTick重装载数值寄存器,它用于设置SysTick定时器的初始计数值。当SysTick计数器递减到0时,它会重新加载LOAD寄存器中的值,重新开始计数。这样可以实现定时功能。
SysTick->VAL是SysTick当前数值寄存器,它用于读取当前SysTick计数器的值。通过读取VAL寄存器,我们可以获取当前计数器的剩余值,用于判断计数器是否已经倒数到0。如果VAL寄存器的值为0,则意味着计数器已经倒数到0了。这个信息可以通过COUNTFLAG位来确定,当COUNTFLAG位为1时,表示计数器已经倒数到0。
综上所述,SysTick->LOAD用于设置初始计数值,而SysTick->VAL用于读取当前计数值。它们是SysTick定时器中重要的寄存器。
相关问题
SysTick->LOAD = 0xFFFF; SysTick->VAL = 0x1; SysTick->CTRL = 0x5;
这段代码是在启动STM32的SysTick定时器,并将其配置为每隔一个SysTick时钟周期(通常为1ms)触发一次中断。具体来说,代码中的含义如下:
- 将SysTick的LOAD寄存器设置为0xFFFF,表示当SysTick计数器从0开始向上计数到0xFFFF时,就会触发一次中断。
- 将SysTick的VAL寄存器设置为0x1,表示将SysTick计数器初始化为1,而不是0。这是为了避免计数器一开始就是0,导致第一次中断被忽略的问题。
- 将SysTick的CTRL寄存器设置为0x5,表示使能SysTick定时器,并使用外部时钟源(通常为处理器时钟),并且启用中断。
void Delay_ms(uint32_t nCount) { SysTick->LOAD = 72*nCount; SysTick->VAL = 0x00; SysTick->CTRL = 0x01; while((SysTick->CTRL & 0x01) && (!(SysTick->CTRL & (1<<16)))); SysTick->CTRL = 0x00; SysTick->VAL = 0X00; }
这段代码是用于实现延时的函数,输入参数nCount是延时的毫秒数。具体实现是通过STM32的SysTick定时器来实现的。首先将延时的毫秒数乘以72,得到SysTick定时器的重装值,然后将SysTick定时器的VAL寄存器清零,将CTRL寄存器的第0位设置为1,启动SysTick定时器。在SysTick定时器运行期间,程序会一直进入while循环中,等待SysTick定时器的COUNTFLAG标志位被置位并且CTRL寄存器的第16位清零,表示定时器已经定时完成。最后将CTRL寄存器清零,将VAL寄存器清零,结束延时函数的执行。
阅读全文