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

關(guān)于調(diào)試stm32和stm8(51單片機(jī))的i2c和spi協(xié)議的之間的區(qū)別

作者:佚名   來(lái)源:本站原創(chuàng)   點(diǎn)擊數(shù):  更新時(shí)間:2014年04月25日   【字體:

 在調(diào)試STM32的i2c和io口模擬spi協(xié)議時(shí)發(fā)現(xiàn)時(shí)序是很關(guān)鍵的。stm32在72M運(yùn)行下可以實(shí)現(xiàn)i2c或者spi協(xié)議,但并不代表把相同的代碼移植到51單片機(jī)上就會(huì)成功的跑起來(lái),因?yàn)?1單片機(jī)的速讀最塊8M,所以在時(shí)序上會(huì)產(chǎn)生很多大的區(qū)別。

經(jīng)過(guò)測(cè)試,在stm32上的spi協(xié)議時(shí)鐘線可達(dá)到20Khz,移植到51后,頻率會(huì)降到<10hz。可是盡管把延時(shí)調(diào)小或者去掉還是無(wú)濟(jì)于事,此時(shí)就要加幾句把鐘線置高置低的語(yǔ)句了 以便增大的速度,后來(lái)成功后,測(cè)試時(shí)鐘線的確達(dá)到了10Khz左右。
先貼上部分代碼
unsigned char ReadRawRC(unsigned char Address)
{
     unsigned char i, ucAddr;
     unsigned char ucResult=0;
 
     MF522_SCK = 0;
     MF522_NSS = 0;
     ucAddr = ((Address<<1)&0x7E)|0x80;
 
     for(i=8;i>0;i--)
     {
         MF522_SI = ((ucAddr&0x80)==0x80);
         MF522_SCK = 1;//stm32上沒(méi)有
         ucAddr <<= 1;
         MF522_SCK = 0;
     }
 
     for(i=8;i>0;i--)
     {
         MF522_SCK = 1;//stm32上沒(méi)有
         ucResult <<= 1;
         ucResult|=(bit)MF522_SO;
         MF522_SCK = 0;
     }
 
     MF522_NSS = 1;
     MF522_SCK = 1;
     return ucResult;
}
 
關(guān)閉窗口

相關(guān)文章