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