專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> MCU設(shè)計(jì)實(shí)例 >> 瀏覽文章

stm單片機(jī)io管腳翻轉(zhuǎn)實(shí)驗(yàn)

作者:劉溫電   來源:本站原創(chuàng)   點(diǎn)擊數(shù):  更新時間:2013年11月23日   【字體:

  概述

 
學(xué)了兩年單片機(jī)了,初三一年的電路基礎(chǔ)知識,發(fā)現(xiàn)越來越不夠用了,但又感覺看那些全是公式的大學(xué)的電路基礎(chǔ)又有點(diǎn)傻x,看半天,沒一個講的明白的,估計(jì)只有寫書的那人,能看明白,真正買書的看的明白的,估計(jì)也不多。于是乎,我想出了一個更高科技的辦法——試驗(yàn)唄 毛主席說過實(shí)踐是檢驗(yàn)真理的唯一標(biāo)準(zhǔn),所以放下那些晦澀難懂的書本,拿起面包板,萬用表,示波器做試驗(yàn),應(yīng)該是我這樣只有初三一年電路知識的人唯一的出路 所以,說干就干。目前來說,手上有的就那么點(diǎn)東西,能做啥試驗(yàn),就做啥試驗(yàn)。以后隨著買新器件或產(chǎn)品,再做新器件的試驗(yàn)。日志也會隨著更新。
 
                                                                                                         試驗(yàn)設(shè)備
 
器件:電阻電容若干,三極管,二極管,也有一些,場效應(yīng)管不多,洞洞板,當(dāng)然是必備的,剩下的就是1種電感,兩三種運(yùn)放,和555。目前來說就這些玩意。
試驗(yàn)板:at89s52試驗(yàn)板 1塊,STM8試驗(yàn)板 1塊,STM32F103ZE試驗(yàn)板 1塊,STM32F103VE試驗(yàn)板 1塊。自制STM32F103RB試驗(yàn)板  1塊
設(shè)備:優(yōu)利得萬用表 1塊,普元示波器 1臺,廣州黃花電烙鐵 1把,焊錫絲若干。
 
如果這些算我的資產(chǎn)的話,那我現(xiàn)在的身價也近萬了
 
 
                                                                                                     關(guān)于試驗(yàn)
試驗(yàn)?zāi)康�,試�?yàn)使用器件,試驗(yàn)電路圖,波形圖,結(jié)論。反正越詳細(xì)越好,能多寫就多寫,寫不出來就編 寫的出來就寫。但盡量以事實(shí)為準(zhǔn),堅(jiān)決不弄虛假的東西糊弄領(lǐng)導(dǎo),其實(shí)也沒有領(lǐng)導(dǎo)讓我干這些 
試驗(yàn)方面,電阻電容電感對電壓波形影響,數(shù)字電路方面,驅(qū)動電路方面,開關(guān)電源方面,如果能力達(dá)到的話,可以初探一下無線,嘿嘿。
 
 
 
試驗(yàn)1
目的:單片機(jī)io翻轉(zhuǎn)速度與波形樣式對比
設(shè)備:所有試驗(yàn)板,示波器。
方法:在主函數(shù)中針對一組IO口,置高置低,中間不加任何延時
           或取反
電路圖:沒有直接將示波器探頭接入管腳。
編譯環(huán)境:keil3為at89s52,iar為stm8和stm32,

 

 

 

上圖可見at89S52在12M晶振運(yùn)行的情況下,程序使用c寫的
內(nèi)容為
void main()
{
    P1=0xff;
    while(1)
   {
        P1=0x00;
        P1=0xff;
    }
}
 

 

 

這是用匯編寫出來的效果,可見頻率都一樣,而占空比卻變了 
以下為匯編程序
 org  0000h
 ajmp main
 org 0080h
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í)行到最后一句話以后會重新跳回第一句話,這個jmp     loop也占一條語句的時間,所以才有了以上的兩種結(jié)果

 

 

上圖是我又把程序變?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了,說明這已經(jīng)是最快的速度了,但問題是,占空比還是33.3%,不解中。理論上來說,應(yīng)該是50%的占空比才對,也許是芯片內(nèi)部,下降保持的速度大于上升時保持的速度吧。
于是我又將程序改為
void main()
{
    P1=0xff;
    while(1)
   {
         P1=~P1;
          P1=~P1;
             P1=~P1;//。。。。。。。
        //好多個 P1=~P1;
    }
}
這回又有變化了,以下是截圖

 

 

這回效果已經(jīng)非常不錯了,達(dá)到250K,而且占空比在50%,但計(jì)算一下可得知,12M的12分頻為1M,也就是說,他的io翻轉(zhuǎn)速度應(yīng)該在500Kh左右阿,也許是時鐘的問題,不解中。
從以上效果圖來看,還可以得出一個結(jié)論,就是好像取反要比改變管腳狀態(tài)來得快。

 

 

這是LED與電阻中間的波形,還挺好看,但原因還不知道,先不分析,以后解決。
下面是STM32F103VE的管腳
這個是72M的可比那快多了

 

 

從上面的波形猜測,頻率接近18Mhz,是不是因?yàn)楣苣_速度太快,由于管腳的分布電容電阻引起的波形變化。
已經(jīng)快接近正弦波了。
 
經(jīng)過驗(yàn)證:芯片的IO翻轉(zhuǎn)速度低于芯片頻率的一半,其原因可能是因?yàn)榫幾g器翻譯出的語句問題。

相關(guān)文章