stm單片機io管腳翻轉實驗
以下為匯編程序
org 0000h
ajmpmain
org0080h
main:
loop: mov p1,#0ffh;全不亮
mov P1,#000h
jmp loop
end
ajmpmain
org0080h
main:
loop: mov p1,#0ffh;全不亮
mov P1,#000h
jmp loop
end
后來我又將c語言改成
void main()
{
P1=0xff;
while(1)
{
P1=0xff;
P1=0;
}
}
編譯后運行,結果和匯編編寫的一樣了,
這說明,循環(huán)程序執(zhí)行到最后一句話以后會重新跳回第一句話,這個jmp loop也占一條語句的時間,所以才有了以上的兩種結果
上圖是我又把程序變?yōu)?/div>
void main()
{
P1=0xff;
while(1)
{
P1=0xff;
P1=0;
P1=0xff;
P1=0;
P1=0xff;
P1=0;//。。。。。。。
//好多個p1=0,p1=0xff
}
}
這個時候,頻率變成了333.3kHZ了,說明這已經是最快的速度了,但問題是,占空比還是33.3%,不解中。理論上來說,應該是50%的占空比才對,也許是芯片內部,下降保持的速度大于上升時保持的速度吧。
于是我又將程序改為
void main()
{
P1=0xff;
while(1)
{
P1=~P1;
P1=~P1;
P1=~P1;//。。。。。。。
//好多個P1=~P1;
}
}
這回又有變化了,以下是截圖
這回效果已經非常不錯了,達到250K,而且占空比在50%,但計算一下可得知,12M的12分頻為1M,也就是說,他的io翻轉速度應該在500Kh左右阿,也許是時鐘的問題,不解中。
從以上效果圖來看,還可以得出一個結論,就是好像取反要比改變管腳狀態(tài)來得快。
這是LED與電阻中間的波形,還挺好看,但原因還不知道,先不分析,以后解決。
下面是STM32F103VE的管腳
這個是72M的可比那快多了
從上面的波形猜測,頻率接近18Mhz,是不是因為管腳速度太快,由于管腳的分布電容電阻引起的波形變化。
已經快接近正弦波了。
經過驗證:芯片的IO翻轉速度低于芯片頻率的一半,其原因可能是因為編譯器翻譯出的語句問題。
評論