久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1219|回復: 5
打印 上一主題 下一主題
收起左側

stm32用spi協議在同一塊板子之間實現數據收發遇到的問題

[復制鏈接]
跳轉到指定樓層
樓主
HAL庫函數編程,同一塊板子里SPI1做主機,SPI2做從機,SPI和相關GPIO口配置完成后,主程序里用HAL_SPI_Receive_IT()準備接受數據。圖片里是main.c中發送數據的程序和中斷回調函數(片選NSS寫在SPI2下了,不過設置NSS為軟件控制,這個應該不影響)目前遇到的情況是:
1、可以進入一次中斷但只能進入一次。懷疑是沒有清除中斷標志位,但是我甚至不知道keil調試中應該加什么寄存器來查看(手冊里寫的寄存器好像都是SPI2S->TXDR這樣,難道對于SPI1和SPI2都是這個寄存器嗎?)

2、從機部分接收不到數據,主機也收不到從機發回的數據。這個也許是我函數調用錯了,但是HAL_SPI_Receive_IT()應該能接受數據才對吧?

3、剛進入中斷的時候會修改全局變量Slave_Tx_value為0,本來前面初始化為6,所以我在中斷中又設置了一次

HAL_SPI_Receive_IT()能進入中斷是否說明至少spi引腳配置得沒問題?

在這個問題上糾結了兩天了也沒解決,希望能得到大佬指點,萬分萬分感謝!!

4Q)76F6QPH$EIJN7G{5)$]B.png (46.77 KB, 下載次數: 30)

while發送數據以及查詢

while發送數據以及查詢

40Z7CW5JJ63MVJOV_W@9USP.png (33.73 KB, 下載次數: 31)

中斷回調函數

中斷回調函數

(T`@`1N2TY}KA7]}U4%3M94.png (41.58 KB, 下載次數: 30)

(T`@`1N2TY}KA7]}U4%3M94.png

KU`5[9_DN)FHZHQ3IJ`PJ`S.png (62.08 KB, 下載次數: 33)

KU`5[9_DN)FHZHQ3IJ`PJ`S.png
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:123289 發表于 2022-10-19 08:15 | 只看該作者
設有A,B二機。
1、A在發送時,必須保證B在接收。否則數據會丟失。
2、B在反回數據時,必須保證A在接收。同理。
想一想SPI的通訊過程序吧,假設A要發送1,2,3,4,5。程序是送一個數據等一等,還是一齊發完5個數。當A在發數據的時候CPU在干什么?是在進行B等待嗎?還是在A的發送中?
B接收會在何時發產中斷,當B在返回數據時,CPU在干什么?
能理順、解決好時序關系,問題就解決了。
編程不是簡單地抄寫語句。
回復

使用道具 舉報

板凳
ID:1048225 發表于 2022-10-19 09:39 來自觸屏版 | 只看該作者
yzwzfyz 發表于 2022-10-19 08:15
設有A,B二機。
1、A在發送時,必須保證B在接收。否則數據會丟失。
2、B在反回數據時,必須保證A在接收。 ...

感謝幫助
程序里是用receive_it準備在接受到數據的時候進入中斷,然后在中斷里發送數據回主機,此時兩者應該都處于收發數據的狀態。
剛接觸單片機不久,stm32的標準庫還能看個大致,但是感覺hal庫對我來說太繞了,手上設備還只能支持hal,代碼確實是在網上找了例程照著大概寫的,因為我不是很能看懂hal庫怎么用
回復

使用道具 舉報

地板
ID:123289 發表于 2022-10-20 16:53 | 只看該作者
一個CPU在任何任何時刻只能做一件事!!!
CPU發送時,不可能接收。
CPU接收時,不可能發送。
CPU發出一個字節,這個字節就瞬間被寫入了嵌入式的串行模塊,由模塊進行移位,再從串口串出一位位地數據,這個過程通常需要幾ms。優秀的程序不會讓CPU在此死等這個字節串行發完,再發第二個數據。而是轉去干其它的活。模塊發完了一個字節會通知CPU,這時CPU再回來發下個字節。
同樣, 優秀的接收程序也不會讓CPU死等RI信號,而是在模塊告訴CPU它收到了一個串來字節后,才轉來收這個字節,收到后,通常先存放起來,就去辦別的事了,決不在此花更多的時間。待下次再收到模塊的通知后,才再過來收下另一個字節。如此,當CPU收到一定的數量數據后(一幀)再集中處理。

你調用的是別人的程序(函數),根本無法控制收、發過程,也不知道別人的程序是否合理。這就悲催了。
仔細研讀你調用的函數吧。
回復

使用道具 舉報

5#
ID:1048225 發表于 2022-10-22 09:18 來自觸屏版 | 只看該作者
yzwzfyz 發表于 2022-10-20 16:53
一個CPU在任何任何時刻只能做一件事!!!
CPU發送時,不可能接收。
CPU接收時,不可能發送。

學習了,感謝大佬相助,這就老老實實研究一下庫函數
回復

使用道具 舉報

6#
ID:624769 發表于 2022-10-22 16:12 來自觸屏版 | 只看該作者
yzwzfyz 發表于 2022-10-19 08:15
設有A,B二機。
1、A在發送時,必須保證B在接收。否則數據會丟失。
2、B在反回數據時,必須保證A在接收。 ...

spi有主從關系,a機發,b機收,需要確保b機狀態,但b機返回時,不是考慮a機狀態,時鐘控制在a機手里,所以此時應當依然是a機考慮b機是否準備好了數據,所以很多偽spi傳輸會有busy線,用來從b機通知a機數據是否可以回傳。
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品久久亚洲 | 国产h在线 | 天堂亚洲 | 欧美一级欧美一级在线播放 | 欧美一区在线视频 | 99精品亚洲国产精品久久不卡 | 欧美全黄 | 亚洲欧美国产精品久久 | 日本三级全黄三级三级三级口周 | 日韩在线不卡 | 成人婷婷| 亚洲天堂av一区 | 91中文在线观看 | 国产精品精品视频一区二区三区 | 99久久精品国产毛片 | 国产精品福利网站 | 香蕉婷婷 | 国产97在线视频 | 黄色一级电影免费观看 | 99re在线视频观看 | 久久精品国产一区二区电影 | 成人午夜在线 | 亚洲一区综合 | 97超碰在线免费 | 国产精品美女久久久久aⅴ国产馆 | 久久精品国产99国产精品 | 国产高清一区二区三区 | 精品成人佐山爱一区二区 | 国产免费让你躁在线视频 | 在线中文字幕视频 | 亚洲欧美综合 | 91高清免费观看 | 男女羞羞的网站 | 国产一区电影 | 国产精品视频综合 | 亚洲日本中文字幕在线 | 超碰欧美 | 91久久国产精品 | 国产97视频在线观看 | 国产精品久久久久久久岛一牛影视 | 奇色影视|