国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【SPI】STM32 SPI 雙機(jī)通信,SPI從機(jī)模式使用

這篇具有很好參考價(jià)值的文章主要介紹了【SPI】STM32 SPI 雙機(jī)通信,SPI從機(jī)模式使用。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

最近要用到STM32的SPI從機(jī)模式,從其他板子讀SPI數(shù)據(jù)過(guò)來(lái),踩了2天坑,記錄一下過(guò)程。

(因?yàn)閔al庫(kù)提供了三種函數(shù),我調(diào)試的過(guò)程是阻塞、中斷、DMA依次來(lái)調(diào)試學(xué)習(xí)的,這份代碼為使用DMA方式的代碼。

軟件:keil5、STM32CubeMX

硬件:兩塊STM32F103C8T6最小系統(tǒng)

實(shí)現(xiàn)功能:兩塊板子進(jìn)行SPI通信,一主一從,都是使用的SPI1。

代碼下載github:https://github.com/wyfroom/SPI_Master_Slave_STM32(第一次編程過(guò)程中使用git管理代碼)

代碼下載藍(lán)奏云:https://wwzr.lanzout.com/b04885ouf 密碼:372j

強(qiáng)調(diào)!?。。。。。。。。?!強(qiáng)調(diào)!?。。。。。。。。。?!強(qiáng)調(diào)?。。。。。。。。。。。?!

如果你SPI通了,但是莫名其妙數(shù)據(jù)亂碼、能發(fā)不能收等問(wèn)題,啥都別干了,先把杜邦線(xiàn)換新,一共5根線(xiàn),一根共地線(xiàn),四根SPI線(xiàn)。

spi從機(jī),stm32,嵌入式硬件,單片機(jī)

一、SPI主機(jī)配置

基礎(chǔ)的工程配置,這邊就不貼圖了,可以看這個(gè)有詳細(xì)的步驟:http://t.csdn.cn/Wpcpk

spi從機(jī),stm32,嵌入式硬件,單片機(jī)

直接看spi的配置,主要注意以下幾點(diǎn):

  • SPI模式選擇
  • 片選選擇
  • 大端小端選擇
  • 通信速率
  • 采樣模式配置(CPOL、CPHA)
  • CRC選擇

spi從機(jī),stm32,嵌入式硬件,單片機(jī)

如果要用SPI中斷,要勾選中斷。

spi從機(jī),stm32,嵌入式硬件,單片機(jī)

如果要用DMA,要對(duì)DMA進(jìn)行配置。

spi從機(jī),stm32,嵌入式硬件,單片機(jī)

補(bǔ)充:片選還是要選,不然高速傳輸會(huì)出問(wèn)題。

spi從機(jī),stm32,嵌入式硬件,單片機(jī)

二、SPI從機(jī)配置

從機(jī)配置僅模式選擇和主機(jī)不同,其他都一樣且必須一樣。

spi從機(jī),stm32,嵌入式硬件,單片機(jī)

如果使用中斷,要勾選:

spi從機(jī),stm32,嵌入式硬件,單片機(jī)

DMA配置:(和主機(jī)一樣)

spi從機(jī),stm32,嵌入式硬件,單片機(jī)

補(bǔ)充:片選還是要選,不然高速傳輸時(shí)會(huì)出問(wèn)題。

spi從機(jī),stm32,嵌入式硬件,單片機(jī)

三、雙機(jī)通信

HAL庫(kù)提供了三種SPI調(diào)用方式。都試了一遍,最后還是選用了DMA,高效,簡(jiǎn)潔。

//阻塞方式使用SPI
HAL_SPI_Transmit()
HAL_SPI_Receive()
HAL_SPI_TransmitReceive()
//中斷方式使用SPI
HAL_SPI_Transmit_IT()
HAL_SPI_Receive_IT()
HAL_SPI_TransmitReceive_IT()
//DMA方式使用SPI
HAL_SPI_Transmit_DMA()
HAL_SPI_Receive_DMA()
HAL_SPI_TransmitReceive_DMA()

spi從機(jī),stm32,嵌入式硬件,單片機(jī)

1 輪詢(xún)+中斷(低速)

主機(jī)輪詢(xún),從機(jī)中斷。

這個(gè)我就不演示了,就正常流程,注意就行,在main里啟動(dòng)中斷,在中斷函數(shù)里再次啟動(dòng)中斷。

//main里啟動(dòng)中斷
HAL_SPI_TransmitReceive_IT(&hspi1, sendData, receiveData, 8);

//中斷回調(diào)函數(shù)
void HAL_SPI_TxRxCpltCallback(SPI_HandleTypeDef *hspi)
{
  // 數(shù)據(jù)發(fā)送完成回調(diào)函數(shù)
	if (hspi == &hspi1)
	{
		HAL_SPI_TransmitReceive_IT(&hspi1, sendData, receiveData, 8);
	}
}

2 輪詢(xún)+DMA(低速)

主機(jī)使用阻塞函數(shù),從機(jī)使用DMA函數(shù)。(原因是我試了主從全部使用DMA的話(huà),速度太快了,會(huì)卡死和數(shù)據(jù)傳輸亂碼。解決啦,可以看問(wèn)題一,這一部分還是演示輪詢(xún)+DMA

主機(jī):
spi從機(jī),stm32,嵌入式硬件,單片機(jī)

從機(jī):
spi從機(jī),stm32,嵌入式硬件,單片機(jī)

debug測(cè)試:

spi從機(jī),stm32,嵌入式硬件,單片機(jī)

3 DMA+DMA(高速)

之前高速使用時(shí)出現(xiàn)了程序卡死和數(shù)據(jù)亂碼的現(xiàn)象。(高速使用:用阻塞函數(shù)while里不加延時(shí)、主從都用中斷、主從都用DMA)

解決方法如下:

  • 1 片選要開(kāi)啟。我直接把兩個(gè)板子的硬件片選打開(kāi),兩邊都使用DMA方式全雙工發(fā)送讀取,數(shù)據(jù)不在亂碼,只是接收到的第一個(gè)數(shù)據(jù)不一定是發(fā)送的第一個(gè)數(shù)據(jù)。
  • 2 從機(jī)要比主機(jī)先啟動(dòng)程序。 解決上一步數(shù)據(jù)順序不對(duì)的問(wèn)題。在主機(jī)DMA程序啟動(dòng)前加一個(gè)延時(shí)2s。

spi從機(jī),stm32,嵌入式硬件,單片機(jī)

spi從機(jī),stm32,嵌入式硬件,單片機(jī)

直接Debug:(模擬實(shí)際上電,debug先點(diǎn)從機(jī)啟動(dòng),再點(diǎn)主機(jī)啟動(dòng))

spi從機(jī),stm32,嵌入式硬件,單片機(jī)

4 開(kāi)啟CRC校驗(yàn)(自選)

CRC計(jì)算生成的校驗(yàn)值可以用于檢測(cè)數(shù)據(jù)在傳輸或存儲(chǔ)過(guò)程中是否發(fā)生了錯(cuò)誤或損壞。
spi從機(jī),stm32,嵌入式硬件,單片機(jī)

開(kāi)啟CRC后,使用DMA函數(shù)的話(huà),SIZE要加一:

HAL_SPI_TransmitReceive_DMA(&hspi1, sendData, receiveData, 8+1);

spi從機(jī),stm32,嵌入式硬件,單片機(jī)

四、遇到的問(wèn)題

1 高速使用時(shí),程序卡死,或者數(shù)據(jù)出錯(cuò)(已解決)

  • 主機(jī)中斷模式發(fā)送,從機(jī)中斷模式接收,不停的收發(fā)清空標(biāo)志,數(shù)據(jù)就會(huì)亂,可能是傳的太快了??想當(dāng)于是全速的在收發(fā)? 非得主機(jī)用輪詢(xún)的方式,間隔個(gè)1ms什么的來(lái)讀取,那這SPI速度咋算的?

  • 主機(jī)DMA發(fā),從機(jī)DMA收,直接死機(jī),DMA中斷被刷爆,while里的程序沒(méi)機(jī)會(huì)執(zhí)行,可以屏蔽掉DMA中斷,程序不會(huì)在死機(jī),但是,數(shù)據(jù)會(huì)亂。

    spi從機(jī),stm32,嵌入式硬件,單片機(jī)

  • 加了CRC好像要好一點(diǎn),但還是很多亂碼,碰運(yùn)氣碰好的。這能行嗎?是SPI就不是這么用的嗎?還是說(shuō)這事高速傳輸?shù)墓残詥?wèn)題。

  • 終于解決

    • 1 片選要開(kāi)啟。我直接把兩個(gè)板子的硬件片選打開(kāi),兩邊都使用DMA方式全雙工發(fā)送讀取,數(shù)據(jù)不在亂碼,只是接收到的第一個(gè)數(shù)據(jù)不一定是發(fā)送的第一個(gè)數(shù)據(jù)。
    • 2 從機(jī)要比主機(jī)先啟動(dòng)程序。 解決上一步數(shù)據(jù)順序不對(duì)的問(wèn)題。在主機(jī)DMA程序啟動(dòng)前加一個(gè)延時(shí)2s。
    • 3 CRC,開(kāi)不開(kāi)沒(méi)影響。

    spi從機(jī),stm32,嵌入式硬件,單片機(jī)

    spi從機(jī),stm32,嵌入式硬件,單片機(jī)

    ? spi從機(jī),stm32,嵌入式硬件,單片機(jī)文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-580055.html

2 數(shù)據(jù)莫名其妙亂碼,主機(jī)發(fā)送正常,接收亂碼等

  • 杜邦線(xiàn),真的會(huì)出問(wèn)題的,換新,5根線(xiàn),全部換新。再試試

到了這里,關(guān)于【SPI】STM32 SPI 雙機(jī)通信,SPI從機(jī)模式使用的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • stm32HAL庫(kù) G4 SPI 從機(jī)DMA可變長(zhǎng)度接受數(shù)據(jù)亂碼問(wèn)題

    stm32HAL庫(kù) G4 SPI 從機(jī)DMA可變長(zhǎng)度接受數(shù)據(jù)亂碼問(wèn)題

    使用一個(gè)引腳當(dāng)作SPI CS, 邊沿觸發(fā); 在電平位0時(shí)候接受SPI數(shù)據(jù)20個(gè)字節(jié) 如果實(shí)際主機(jī)只發(fā)了小于20字節(jié)時(shí)候, 下一個(gè)幀就會(huì)錯(cuò)亂; 去老外找了之后,需要復(fù)位SPi RCC時(shí)鐘才能復(fù)位掉SPI 下面的不行 正確的做法

    2024年02月10日
    瀏覽(16)
  • STM32使用SPI協(xié)議主從通信

    STM32使用SPI協(xié)議主從通信

    目錄 前言 一、理論部分? ??? SPI簡(jiǎn)介?? SPI特征 SPI物理層 SPI協(xié)議層 SPI配置過(guò)程 SPI數(shù)據(jù)發(fā)送與接收過(guò)程 二、代碼部分 主機(jī)代碼 從機(jī)代碼 這是一篇學(xué)習(xí)筆記,記錄自己學(xué)習(xí)SPI通信。方便之后運(yùn)用的時(shí)候回顧。參考《STM32中文參考手冊(cè)》 ?????????SPI 協(xié)議是由摩托羅拉公

    2024年02月13日
    瀏覽(23)
  • 樹(shù)莓派(主)與STM32(從)使用SPI通信(持續(xù)更新中)

    樹(shù)莓派(主)與STM32(從)使用SPI通信(持續(xù)更新中)

    使用樹(shù)莓派向 STM32 發(fā)送數(shù)據(jù),STM32 收到數(shù)據(jù)后通過(guò)串口的方式將數(shù)據(jù)打印到電腦上,同時(shí)返回給樹(shù)莓派數(shù)據(jù)。樹(shù)莓派接收到數(shù)據(jù)后打印在控制臺(tái)上。 SPI 的配置為 樹(shù)莓派主機(jī) STM32 從機(jī) 全雙工 8 bit 傳輸 工作模式 0 :CPOL|CPHA = 00 MSB 優(yōu)先 禁止 CRC 校驗(yàn) SPI(Serial Peripheral Interfac

    2024年02月14日
    瀏覽(74)
  • STM32——SPI通信

    STM32——SPI通信

    SPI(Serial Peripheral Interface)是由Motorola公司開(kāi)發(fā)的一種通用數(shù)據(jù)總線(xiàn) 四根通信線(xiàn): SCK(Serial Clock)【CLK或SCL或CK】、 MOSI(Master Output Slave Input)【DO(Data Output)】、 MISO(Master Input Slave Output)【DI(Data Input)】、 SS(Slave Select)【CS或NSS】 同步,全雙工 支持總線(xiàn)掛載多設(shè)備

    2024年02月11日
    瀏覽(22)
  • 【【STM32-SPI通信協(xié)議】】

    【【STM32-SPI通信協(xié)議】】

    STM32-SPI通信協(xié)議 ?SPI(Serial Peripheral Interface)是由Motorola公司開(kāi)發(fā)的一種通用數(shù)據(jù)總線(xiàn) ?四根通信線(xiàn):SCK(Serial Clock)、MOSI(Master Output Slave Input)、MISO(Master Input Slave Output)、SS(Slave Select) ?同步,全雙工 ?支持總線(xiàn)掛載多設(shè)備(一主多從) 既然是同步的,我們就會(huì)發(fā)

    2024年02月12日
    瀏覽(41)
  • STM32使用SPI通信時(shí)的一些常見(jiàn)問(wèn)題及解決方法(主,從)

    ? ? ? ? 最近在做一個(gè)多MCU的項(xiàng)目時(shí),MCU之間的數(shù)據(jù)傳輸使用了SPI通信,在做從機(jī)時(shí)遇到了一些 “疑難雜癥”,研究了半天,總算是把故障排除了,就又總結(jié)了一下SPI常遇到的幾種問(wèn)題寫(xiě)出來(lái)整理一下。 目錄 一、SPI簡(jiǎn)介: ?二、常見(jiàn)問(wèn)題: 三、疑難雜癥: Q1:使用的HAL庫(kù),

    2024年02月21日
    瀏覽(25)
  • 【STM32】學(xué)習(xí)筆記-SPI通信

    【STM32】學(xué)習(xí)筆記-SPI通信

    SPI通信(Serial Peripheral Interface)是一種同步的串行通信協(xié)議,用于在微控制器、傳感器、存儲(chǔ)器、數(shù)字信號(hào)處理器等之間進(jìn)行通信。SPI通信協(xié)議需要使用4個(gè)線(xiàn)路進(jìn)行通信:時(shí)鐘線(xiàn)(SCLK)、主輸入/主輸出線(xiàn)(MISO)、主輸出/主輸入線(xiàn)(MOSI)和片選線(xiàn)(SS)。其中,SCLK由主設(shè)備提供,用于

    2024年02月09日
    瀏覽(25)
  • STM32開(kāi)發(fā)(十)STM32F103 通信 —— SPI通信編程詳解

    ??《上一篇》 ???《主目錄》 ???《下一篇》 本實(shí)驗(yàn)通過(guò)STM32F103 的SPI功能,實(shí)現(xiàn)對(duì)W25Q64JVSSIQ (Flash芯片)芯片擦除,讀數(shù)據(jù),寫(xiě)數(shù)據(jù)等操作。 本實(shí)驗(yàn)內(nèi)容知識(shí)點(diǎn): 1、SPI通信協(xié)議介紹 2、

    2024年02月07日
    瀏覽(25)
  • STM32硬件SPI通信詳解-------附代碼

    STM32硬件SPI通信詳解-------附代碼

    1.STM32內(nèi)部集成了 硬件SPI收發(fā)電路 ,可以由 硬件自動(dòng)執(zhí)行時(shí)鐘生成 、 數(shù)據(jù)收發(fā) 等功能, 減輕CPU的負(fù)擔(dān) 2.可配置 8位/16位數(shù)據(jù)幀 、 高位先行/低位先行 3. 時(shí)鐘頻率 : fPCLK / (2, 4, 8, 16, 32, 64, 128, 256) 4.支持 多主機(jī)模型 、 主或從操作 5.可精簡(jiǎn)為 半雙工/單工通信 6. 支持DMA 7. 兼

    2024年04月27日
    瀏覽(16)
  • 【正點(diǎn)原子STM32】QSPI四線(xiàn)SPI模式(Quad-SPI存儲(chǔ)器、間接模式、狀態(tài)輪詢(xún)模式、內(nèi)存映射模式、命令序列、QSPI基本使用步驟、SPI FLASH基本使用步驟)

    【正點(diǎn)原子STM32】QSPI四線(xiàn)SPI模式(Quad-SPI存儲(chǔ)器、間接模式、狀態(tài)輪詢(xún)模式、內(nèi)存映射模式、命令序列、QSPI基本使用步驟、SPI FLASH基本使用步驟)

    一、QSPI介紹 1.1、QSPI功能框圖(雙閃存模式禁止) 1.2、QSPI 時(shí)鐘源 1.3、間接模式 1.4、內(nèi)存映射模式 1.5、命令序列(間接模式 或 內(nèi)存映射模式) 1.6、指令、地址、交替字節(jié)、空指令周期、數(shù)據(jù)各階段 1.7、QSPI FLASH設(shè)置 1.8、QSPI 中斷類(lèi)型 二、QSPI相關(guān)寄存器介紹 三、QSPI相關(guān)

    2024年04月22日
    瀏覽(56)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包