回复【楼主位】 小虫儿 :
-------------------------------
小虫提的这个问题很好。
第一个问题:
SysTick->CTRL&=0xfffffffb;//bit2 清空,选择外部时钟 HCLK/8 此处是将CTRL寄存器设置为外部时钟,其余项都是置位状态
这里你看看SysTick->CTRL的默认值就知道了,SysTick->CTRL在复位后的状态为0X0000,也就是全零。这里我的SysTick->CTRL&=0xfffffffb;//bit2 清空,其实只是清空bit2,其他位,原来是什么状况,在执行这句之后,还是什么状况。注意这里用的是&。
第二个问题:
SysTick->CTRL=0x01 ; //开始倒数 而在这一步当中又把CTRL寄存器的相当于 只是把第0位开启了,也就是开启了倒数,而其他的位全部不都是变为了0么?这一点不会对相应的前面的设置造成影响么? 比如CTRL的16位,2位,1位造不成影响么?
这里,其实我的设置真是有不妥的,只是在使用的时候,恰好不影响之前的设置(bit2,本来就该设置为1)。所以结果是正确的。但是这样设置是不妥的。最好就是SysTick->CTRL|=0x0001 ; 这样,就完美了。
同样,在结束延时之后:
SysTick->CTRL=0x00; //关闭计数器
应该改为:
SysTick->CTRL&=0xFFFE; //关闭计数器
|