今天学习一下正点原子的工程System文件夹delay.c sys.c usart.c源文件实现的原理
1.delay.c
delay_init()函数
1 //初始化延迟函数
2 //当使用OS的时候,此函数会初始化OS的时钟节拍
3 //SYSTICK的时钟固定为AHB时钟的1/8
4 //SYSCLK:系统时钟频率
5 void delay_init(u8 SYSCLK)
6 {
7 #if SYSTEM_SUPPORT_OS //如果需要支持OS.
8 u32 reload;
9 #endif
10 SysTick->CTRL&=~(1<<2); //SYSTICK使用外部时钟源
11 fac_us=SYSCLK/8; //不论是否使用OS,fac_us都需要使用
12 #if SYSTEM_SUPPORT_OS //如果需要支持OS.
13 reload=SYSCLK/8; //每秒钟的计数次数 单位为M
14 reload*=1000000/delay_ostickspersec; //根据delay_ostickspersec设定溢出时间
15 //reload为24位寄存器,最大值:16777216,在168M下,约合0.7989s左右
16 fac_ms=1000/delay_ostickspersec; //代表OS可以延时的最少单位
17 SysTick->CTRL|=1<<1; //开启SYSTICK中断
18 SysTick->LOAD=reload; //每1/delay_ostickspersec秒中断一次
19 SysTick->CTRL|=1<<0; //开启SYSTICK
20 #else
21 fac_ms=(u16)fac_us*1000;