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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1121|回復: 5
打印 上一主題 下一主題
收起左側(cè)

stm32用spi協(xié)議在同一塊板子之間實現(xiàn)數(shù)據(jù)收發(fā)遇到的問題

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

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

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

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

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

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

while發(fā)送數(shù)據(jù)以及查詢

while發(fā)送數(shù)據(jù)以及查詢

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

中斷回調(diào)函數(shù)

中斷回調(diào)函數(shù)

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

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

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

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

使用道具 舉報

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

使用道具 舉報

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

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

使用道具 舉報

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

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

使用道具 舉報

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

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

使用道具 舉報

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

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

使用道具 舉報

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

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产欧美日韩一区二区三区 | 免费国产一区二区视频 | 欧美日韩一区二区三区四区 | 黄色大片在线视频 | 日韩在线视频一区二区三区 | 日韩在线精品强乱中文字幕 | 涩涩视频在线播放 | 亚洲一区二区三区桃乃木香奈 | 国产一区二区三区在线看 | 蜜臀av日日欢夜夜爽一区 | 中午字幕在线观看 | 岛国毛片 | 91麻豆精品国产91久久久久久 | 一级黄片一级毛片 | 国产精品久久久久久久久久久久 | 精品在线一区 | 国产成人久久精品 | 成人网址在线观看 | 成人免费视频一区二区 | 久久亚洲一区二区三区四区 | 亚洲 欧美 另类 综合 偷拍 | 美日韩免费视频 | 精品欧美激情精品一区 | 国产成人免费在线 | 91精品国产综合久久小仙女图片 | 成人深夜福利网站 | 永久网站| 久久不卡| 91一区二区 | 日韩视频在线播放 | 天天天操操操 | 国产日韩欧美在线 | 欧美精品一区在线发布 | 国产成人午夜精品影院游乐网 | 国产精品久久a | 九九热这里只有精品在线观看 | 国产精品国产a | 日韩欧美一区二区三区在线播放 | 久久日韩精品一区二区三区 | 夜夜爆操| 在线观看中文字幕亚洲 |