它对systick的计时是否会有影响,这是systick的设置, void SysTick_init(void) { SysTick->CTRL|=SysTick_CTRL_CLKSOURCE_Msk|SysTick_CTRL_ENABLE_Msk; SysTick->LOAD=0x258; //每1ms进入一次 SysTick->VAL=0x01; SysTick->CTRL|=SysTick_CTRL_TICKINT_Msk; msNow=0; }
时间: 2024-04-12 22:34:27 浏览: 260
在上述代码中,SysTick是使用默认的内部时钟源(System Clock)作为计时源,并且每1ms触发一次中断。而在之前的代码中,我们将DCO频率设置为6MHz,并没有改变系统时钟源。因此,修改DCO频率为6MHz不会对SysTick的计时产生影响,SysTick仍然会以每1ms触发一次中断的方式计时。
相关问题
void SysTick_init(void) { SysTick->CTRL|=SysTick_CTRL_CLKSOURCE_Msk|SysTick_CTRL_ENABLE_Msk; SysTick->LOAD=0x258; //每1ms进入一次 0x258=600000 SysTick->VAL=0x01; SysTick->CTRL|=SysTick_CTRL_TICKINT_Msk; msNow=0; }这是msp432的代码,请告诉我它的作用
这段代码是用于初始化 SysTick 定时器的函数。SysTick 定时器是微处理器内部的一个定时器,它可以生成固定时间间隔的中断,用于实现精确的时间控制。
具体作用如下:
1. 设置 SysTick 的时钟源为处理器时钟,并使能 SysTick 定时器。
2. 设置 SysTick 的加载值为 0x258,即每隔 1ms 触发一次中断。(0x258 对应的十进制为 600000)
3. 将 SysTick 的当前值设置为 0x01,以确保定时器从第一个时钟周期开始计数。
4. 使能 SysTick 定时器的中断功能。
5. 初始化变量 msNow 为 0,用于记录当前的毫秒数。
总之,这段代码的作用是初始化 SysTick 定时器,使其以 1ms 的间隔触发中断,并记录当前的毫秒数。
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; //关闭计数器 SysTick->VAL =0X00; //清空计数器 }
这段代码是用来实现微秒级延时的函数。它会使用 SysTick 定时器来实现延时,具体实现步骤如下:
1. 将要延时的微秒数乘以一个系数 fac_us,得到对应的 SysTick 计数值。
2. 将计数器值加载到 SysTick 的 LOAD 寄存器中,清空计数器值。
3. 开始倒数,等待计数器值减为 0。
4. 关闭计数器,清空计数器值。
这里需要注意的是,SysTick 定时器的时钟源是系统时钟,而 fac_us 系数的计算方法要根据系统时钟的频率来确定。因此,这段代码的可移植性可能会受到一定的限制。
阅读全文