STM32讀寫IO時(shí)間測(cè)試
本文分別通過操作寄存器和調(diào)用庫函數(shù)的方式,對(duì)比測(cè)試STM32讀寫IO時(shí)間。
硬件環(huán)境
主控芯片:STM32F103ZET6
外部晶振:8MHZ
系統(tǒng)主頻:72MHZ
1.操作寄存器的方式讀取IO
軟件在線調(diào)試界面
示波器輸出波形
分析:在while(1)中循環(huán)翻轉(zhuǎn)PA3輸出電平。
通過在線調(diào)試的方式,可以看出1條C語句:GPIOA -> BSRR = 1<<3;//PA3輸出高電平
對(duì)應(yīng)3條匯編指令:MOVS r0,#0x08 ;把立即數(shù)0x08傳送給寄存器r0
LDRr1,[PC,#8] ;從地址(PC+8)處讀取一個(gè)字到寄存器r1
STRr0,[r1,#0x00] ;把r0中的低字節(jié)存儲(chǔ)到地址(r1+0)處
由于Cortex-M3的大部分匯編指令均為單周期指令,理論上PA3輸出高電平為3個(gè)時(shí)鐘周期,
即3*(1/72)us = 42ns,經(jīng)示波器實(shí)測(cè)輸出高電平時(shí)間約為:42ns左右。
注意:示波器實(shí)測(cè)輸出低電平時(shí)間明顯比輸出高電平時(shí)間長,原因每一次循環(huán)結(jié)束,都要進(jìn)行新一次while循環(huán)判斷,即while(1)判斷也要浪費(fèi)時(shí)間的,差不多8個(gè)指令周期左右。
2.調(diào)用庫函數(shù)的方式讀取IO
軟件在線調(diào)試界面
示波器輸出波形
分析:在while(1)中循環(huán)翻轉(zhuǎn)PA3輸出電平。
通過在線調(diào)試的方式,可以看出1條C語句:GPIO_SetBits(GPIOA , GPIO_Pin_3);//PA3 = 1
對(duì)應(yīng)的匯編指令為:MOVSr1,#0x08
LDRr0,[pc,#12]
BL.WGPIO_SetBits(0x080002FE)
其中第3條匯編指令為跳轉(zhuǎn)指令,即跳轉(zhuǎn)到函數(shù)GPIO_SetBits()的地址處繼續(xù)執(zhí)行。
執(zhí)行GPIO_SetBits(GPIOA , GPIO_Pin_3);//PA3 = 1所用的時(shí)間通過示波器可以測(cè)出來。
從示波器輸出波形來看,波形周期為708ns,減去while(1)循環(huán)跳轉(zhuǎn)指令110ns,則通過調(diào)用庫函數(shù)輸出高低電平用時(shí)約為300ns,為21個(gè)時(shí)鐘周期,比直接操作寄存器多用時(shí)約260ns。
3.STM32中斷時(shí)間測(cè)試
使能滴答定時(shí)器Systick,配置每1us產(chǎn)生一次中斷,中斷服務(wù)函數(shù)為空,測(cè)試從產(chǎn)生中斷、保護(hù)現(xiàn)場(chǎng)、進(jìn)入中斷服務(wù)函數(shù)、到恢復(fù)現(xiàn)場(chǎng)所用時(shí)間。
軟件在線調(diào)試界面
示波器輸出波形
由示波器輸出波形可以計(jì)算出保存現(xiàn)場(chǎng)、進(jìn)入中斷服務(wù)函數(shù)、恢復(fù)現(xiàn)場(chǎng)的時(shí)間為(475-195)約280ns,約為20個(gè)時(shí)鐘周期。配置滴答定時(shí)器不同中斷周期,經(jīng)實(shí)測(cè)最小周期為1us時(shí),即計(jì)數(shù)72個(gè),能夠正常進(jìn)入中斷,程序正常。若定時(shí)周期小于1us,則定時(shí)時(shí)間不準(zhǔn)確,定時(shí)周期接近于1us,原因分析為定時(shí)時(shí)間太短,內(nèi)核來不及響應(yīng)中斷。





