stm_32【系统滴答】

精确延时:

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))



猜你喜欢

转载自blog.csdn.net/luoyir1997/article/details/80285603