關於stm32f103 systick小實驗

2021-08-14 02:54:18 字數 1630 閱讀 4714

在測試stm32 systick延時函式時,用的keil軟體**測試時間中發現延時500ms以內基本準確,當大於這個數值延時總是保持在500ms,出現問題,本著發現問題解決問題的思想,做如下實驗。

實驗**

static uint8_t  fac_us=0;//us延時倍乘數

static uint16_t fac_ms=0;//ms延時倍乘數

//初始化延時倍乘數

void delay_init()

//nus延時函式    

void delay_us(uint32_t nus)

while(temp&0x01&&!(temp&(1<<16)));//等待時間到達

systick->ctrl&=~systick_ctrl_enable_msk;       //關閉計數器

systick->val =0x00;       //清空計數器}//

//<=1864 

void delay_ms(uint16_t nms)

while(temp&0x01&&!(temp&(1<<16)));

systick->ctrl&=~systick_ctrl_enable_msk;

systick->val =0x00;

} 測試前設定 

option->target->72mhz   option->debug->trace-> enable core clock = 72mhz   

keil軟體測試時間

delay_init();     //time =  

delay_us(100);           //time = 0.00113824

delay_us(100);//time =  0.00124268

delay_us(100);//time =  0.00134714

delay_ms(100);//time = 0.00145176

delay_ms(100);//time =0.10145617  

delay_ms(100);//time =  0.20146068

delay_ms(1000);//time =  0.71950460

總結:500ms以內計時基本準確,1s計時出錯

手動秒錶測試      

delay_init();            //time = 

delay_ms(500);//time = 1.08

delay_ms(500);//time = 2.10

delay_ms(500);//time = 3.32

delay_ms(1000);//time = 4.65

delay_ms(1000);//time = 6.19

delay_ms(1000);//time = 7.75

delay_ms(1500);//time = 9.74

delay_ms(1500);//time = 11.76

delay_ms(1500);//time = 13.77

總結:本人手速為0.5s左右,除去手速,個延時基本對應,也就是延時程式沒有問題,那麼問題來了,keil軟體有問題???(但是keil這個大的公司應該不會出現這種簡單的問題,估計是軟體本身**沒有設定對,繼續**~)

關於STM32F103精確延時

為了相容freertos,所以將延時函式統一規範,後續使用方便移植。此延時針對無晶振,示例為系統倍頻64mhz,型號 stm32f103c8t6。新建system資料夾,新增兩個檔案,delay.c和delay.h 以下為delay.c內容 其中系統已倍頻為64m include stm32f10x...

stm32f103外部中斷

void extix init void 外部中斷0服務程式 void exti9 5 irqhandler void 這是簡單的外部中斷的配置,pc7作為中斷輸入 上面補充io口的初始化 gpio initstructure.gpio mode gpio mode ipu pc6配置為快充指示 1...

STM32F103啟動檔案

目錄 一 概述 二 彙編指令 2.1 equ 2.2 area 2.3 space 2.4 preserve8 2.5 thumb 2.6 export 2.7 dcd 2.8 proc 2.9 ldr 2.10 blx 2.11 bx 2.12 temport 2.13 b 2.14 if,els...