用途:精确的时钟 可以做延迟函数us、ms
设置思路
F1时钟72/8=9MHZ
F4时钟168/8=21MHZ(八分频)
1MHZ的速度,数一次是1us
分完之后假设是xMHZ 就计数x次 得到1us
只有寄存器方式配置:(F4)
Void delay_us(u32 us)
{Systick->ctrl &=~(1<<2); 选取外部时钟源,第2位写0
Systick->load =21*us; 8分频,us由函数参数值确定(相乘结果不能超过24位二进制)
Systick->val =0; 当前值清零(写入清零,同时也清第16位寄存器位置)
Systick->ctrl |=(1<<0); 滴答计数开启,第0位写1
While((Systick->ctrl &1<<16)==0){;} 第16位未数完之前都是0 ,读取之后1清除回0
Systick->ctrl &=~(1<<0);} 计数关闭
15行——ms可以由us循环而得——进制1000
配置思路
寄存器方式
选取外部时钟 0<<2 写零
装载值 次数*us
当前值写零
计数开始
控制位1<<16 满1跳出
关闭计数 0<<0 写零
ms等于一千次us
参考学习,望有助