stm32系统滴答
精确延时:
72M个脉冲->1s
1个脉冲(系统滴答)的时间:1/72M s
f=72Mhz
2个寄存器
STK_VAL自-
STk_LOAD 1000
24位寄存器 不能计数到1S,最多可以2^24/72M s
systic挂在AHB上
1秒=f个ticks
1ms=f/1000个ticks
1us=f/1000000个ticks
定时:1ms,1ms后产生中断 (1个jifies=1ms 产生一个中断)
1.保存现场
2.总裁,查询中段号,优先级(中断嵌套)
3.掉用中断服务处理程序
4.恢复现场
在中断里自-
jifies就是系统时间,假如要500ms内一直打H
首先要获取当前时间
uint_32t start_time;
start time=jifies;
while(jiffles-starttime<500)
{printf(“H”);
printf("/n");}
(bug: 假设jifies是8位的 范围0-255
刚好 starttime=254 走了3个毫秒 此时jifies=1ms 1-254=负数转化=> 超过500ms)
下午1点到下午四点。走了4-1=3h (4+12-1)%12=3
上午11-下午1点:1+12-11=2h (1+12-11)%12=2
1<<n =2^n
while(jiffles+period-start_time)%period <500)
要先 -后+ 因为会溢出,报错 此时是error
1<<32-starttime+jifflie
period=1>>32 溢出 会warning
加printfl 要加2ms
time after(a,b)a的时间在b的时间之后
time_before(a,b)a的时间在b的时间之前
。
怎么知道有没有超时?
while(time before(jifies,starttime))