加入星計劃,您可以享受以下權(quán)益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴(kuò)散
  • 作品版權(quán)保護(hù)
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長期合作伙伴
立即加入

基于STM32的SPI主從全雙工通信源碼,歡迎測試

2016/08/25
29
服務(wù)支持:
技術(shù)交流群

完成交易后在“購買成功”頁面掃碼入群,即可與技術(shù)大咖們分享疑惑和經(jīng)驗(yàn)、收獲成長和認(rèn)同、領(lǐng)取優(yōu)惠和紅包等。

虛擬商品不可退

當(dāng)前內(nèi)容為數(shù)字版權(quán)作品,購買后不支持退換且無法轉(zhuǎn)移使用。

加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論
相關(guān)方案
  • 方案介紹
  • 相關(guān)文件
  • 相關(guān)推薦
  • 電子產(chǎn)業(yè)圖譜
申請入駐 產(chǎn)業(yè)圖譜

個人心得:

       在做主從雙機(jī)通信時,一定要理解好主機(jī)和從機(jī)的作用,做主機(jī)時會控制通信的時鐘,從機(jī)是不能產(chǎn)生時鐘的。如果從機(jī)要發(fā)送數(shù)據(jù),那可以在主機(jī)發(fā)送數(shù)據(jù) 的時鐘上發(fā)送數(shù)據(jù)。配置上差不多是一樣的,就設(shè)計主從就得了。我這里接收都是用中斷。

還有一點(diǎn)要注意的,做主機(jī)接收時,不能和發(fā)送共用一個函數(shù)。這個為什么我自己現(xiàn)在也沒有清楚,只是在實(shí)驗(yàn)中測得。

糾錯:從機(jī)的接收函數(shù)改成,這時因?yàn)槲覝y試完成后有改動就壓包,后來測試發(fā)現(xiàn)主機(jī)不能正常接收到數(shù)據(jù)
更正:我之前的兩個時鐘的理論是不合理的,因?yàn)槿p工收發(fā)是可以共用時鐘的,這個我在后面改進(jìn)的主機(jī)程序中有體現(xiàn)。

歡迎大家測試

u8 SPI1_ReadByte(u8 TxData)
{
u8 retry=0;
// while((SPI1->SR&1<<1)==0)//等待發(fā)送區(qū)空
// {
// retry++;
// if(retry>200)return 0;
// }
// SPI1->DR=TxData; //發(fā)送一個byte
retry=0;
while((SPI1->SR&1<<0)==0) //等待接收完一個byte
{
retry++;
if(retry>200)return 0;
}
return SPI1->DR; //返回收到的數(shù)據(jù)
}

工具:STM32 MINI板兩塊

注意:NSS軟件管理模式,主機(jī):SSM=1,SSI=1。

從機(jī):SSM=1,SSI=0;

連線:主機(jī) SCK<-> SCK 從機(jī)

MISO <-> MISO

MOSI<-> MOSI

SPI主機(jī)通信程序部分截圖:

SPI從機(jī)通信程序部分截圖:

改進(jìn):把主機(jī)改成查詢接收也是可以的,這時只要一個發(fā)送,是真正意義上的全雙工了。

部分程序截圖:(詳見附件內(nèi)容)

  • STM32 SPI雙機(jī)通信.rar
    描述:SPI雙機(jī)通信源碼

相關(guān)推薦

電子產(chǎn)業(yè)圖譜