高级会员

- 积分
- 641
- 金钱
- 641
- 注册时间
- 2012-11-3
- 在线时间
- 6 小时
|
5金钱
首先一下函数肯定是能用的,就是有几点想不通。在相关手册上找不到答案。
问题1:
void delay_us(u32 nus)
{
u32 temp;
SysTick->LOAD=nus*fac_us; //时间加载
当执行下面这句话的时候:写它则使之清零,同时会清除在SysTick 控制及状态寄存器中的COUNTFLAG标志
无论COUNTFLAG是0还是1,执行下面这句话就会清空COUNTFLAG位。
SysTick->VAL=0x00; //清空计数器
当执行下面这句话的时候:开启计数器,当计数器已经开启了,那么这时SysTick->VAL寄存器是已经重装值了还是没有重新装值
我的意思是计数器开启之前SysTick->VAL就重装值了还是计数器开启之后SysTick->VAL才重装值。
假如是计数器开启之后才重新给SysTick->VAL重装值,会不会产生这么一种现象:(1)计数器开启了
(2)此时SysTick->VAL为0,那么COUNTFLAG置1 (3)就会执行一遍do...while()
以上这种现象就是还没等到SysTick->VAL重装值,片子就已经判断SysTick->VAL为0,就会COUNTFLAG置1
SysTick->CTRL=0x01; //开始倒数
do
{
temp=SysTick->CTRL;
}
while((temp&0x01)&&!(temp&(1<<16)));//等待时间到达
SysTick->CTRL=0x00; //关闭计数器
SysTick->VAL =0X00; //清空计数器
}
问题2:
COUNTFLAG: 如果在上次读取本寄存器后,SysTick已经数到了0,则该位为1。如果读取该位,该位将自动清零
关于这一位我有疑问,假如说始终不读“本寄存器”,当SysTick数到了0,COUNTFLAG会不会置位。
假如说会置位,那么我实在想不通问题1。
还有在设置systick时钟源的时候:你需要检视芯片的器件手册来决定选择什么作为时钟源。可是我在stm参考手册毛都找不见。
|
|