延遲1us:
1 /*****************************************************
2 * 函 數(shù) 名 : delay_us
3 * 函數(shù)功能 : 延時函數(shù),延時us
4 * 輸 入 : i
5 * 輸 出 : 無
6 *******************************************************************************/
7 void delay_us(u32 i)
8 {
9 u32 temp;
10 SysTick-LOAD=9*i; /設置重裝數(shù)值, 72MHZ時
11 SysTick-CTRL=0X01; /使能,減到零是無動作,采用外部時鐘源
12 SysTick-VAL=0; /清零計數(shù)器
13 do
14 {
15 temp=SysTick-CTRL; /讀取當前倒計數(shù)值
16 }
17 while((temp0x01)(!(temp(116)))); /等待時間到達
18 SysTick-CTRL=0; /關閉計數(shù)器
19 SysTick-VAL=0; /清空計數(shù)器
20 }
延遲1ms:
1 /*****************************************************
2 * 函 數(shù) 名 : delay_ms
3 * 函數(shù)功能 : 延時函數(shù),延時ms
4 * 輸 入 : i
5 * 輸 出 : 無
6 ******************************************************/
7 void delay_ms(u32 i)
8 {
9 u32 temp;
10 SysTick-LOAD=9000*i; /設置重裝數(shù)值, 72MHZ時
11 SysTick-CTRL=0X01; /使能,減到零是無動作,采用外部時鐘源
12 SysTick-VAL=0; /清零計數(shù)器
13 do
14 {
15 temp=SysTick-CTRL; /讀取當前倒計數(shù)值
16 }
17 while((temp0x01)(!(temp(116)))); /等待時間到達
18 SysTick-CTRL=0; /關閉計數(shù)器
19 SysTick-VAL=0; /清空計數(shù)器
20 }
注意:以上兩函數(shù)中間的參數(shù)u32 i不能超過1800,舉例,想定時一分鐘,可以通過for循環(huán)讓delay_ms(1000)走60次,而不能使用delay_ms(60000),不然程序就出錯了。