欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標(biāo)題: stm32用spi協(xié)議在同一塊板子之間實(shí)現(xiàn)數(shù)據(jù)收發(fā)遇到的問題 [打印本頁]

作者: VITamina    時(shí)間: 2022-10-19 00:35
標(biāo)題: stm32用spi協(xié)議在同一塊板子之間實(shí)現(xiàn)數(shù)據(jù)收發(fā)遇到的問題
HAL庫函數(shù)編程,同一塊板子里SPI1做主機(jī),SPI2做從機(jī),SPI和相關(guān)GPIO口配置完成后,主程序里用HAL_SPI_Receive_IT()準(zhǔn)備接受數(shù)據(jù)。圖片里是main.c中發(fā)送數(shù)據(jù)的程序和中斷回調(diào)函數(shù)(片選NSS寫在SPI2下了,不過設(shè)置NSS為軟件控制,這個(gè)應(yīng)該不影響)目前遇到的情況是:
1、可以進(jìn)入一次中斷但只能進(jìn)入一次。懷疑是沒有清除中斷標(biāo)志位,但是我甚至不知道keil調(diào)試中應(yīng)該加什么寄存器來查看(手冊(cè)里寫的寄存器好像都是SPI2S->TXDR這樣,難道對(duì)于SPI1和SPI2都是這個(gè)寄存器嗎?)

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

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

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

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

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

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

感謝幫助
程序里是用receive_it準(zhǔn)備在接受到數(shù)據(jù)的時(shí)候進(jìn)入中斷,然后在中斷里發(fā)送數(shù)據(jù)回主機(jī),此時(shí)兩者應(yīng)該都處于收發(fā)數(shù)據(jù)的狀態(tài)。
剛接觸單片機(jī)不久,stm32的標(biāo)準(zhǔn)庫還能看個(gè)大致,但是感覺hal庫對(duì)我來說太繞了,手上設(shè)備還只能支持hal,代碼確實(shí)是在網(wǎng)上找了例程照著大概寫的,因?yàn)槲也皇呛苣芸炊甴al庫怎么用
作者: yzwzfyz    時(shí)間: 2022-10-20 16:53
一個(gè)CPU在任何任何時(shí)刻只能做一件事!!!
CPU發(fā)送時(shí),不可能接收。
CPU接收時(shí),不可能發(fā)送。
CPU發(fā)出一個(gè)字節(jié),這個(gè)字節(jié)就瞬間被寫入了嵌入式的串行模塊,由模塊進(jìn)行移位,再從串口串出一位位地?cái)?shù)據(jù),這個(gè)過程通常需要幾ms。優(yōu)秀的程序不會(huì)讓CPU在此死等這個(gè)字節(jié)串行發(fā)完,再發(fā)第二個(gè)數(shù)據(jù)。而是轉(zhuǎn)去干其它的活。模塊發(fā)完了一個(gè)字節(jié)會(huì)通知CPU,這時(shí)CPU再回來發(fā)下個(gè)字節(jié)。
同樣, 優(yōu)秀的接收程序也不會(huì)讓CPU死等RI信號(hào),而是在模塊告訴CPU它收到了一個(gè)串來字節(jié)后,才轉(zhuǎn)來收這個(gè)字節(jié),收到后,通常先存放起來,就去辦別的事了,決不在此花更多的時(shí)間。待下次再收到模塊的通知后,才再過來收下另一個(gè)字節(jié)。如此,當(dāng)CPU收到一定的數(shù)量數(shù)據(jù)后(一幀)再集中處理。

你調(diào)用的是別人的程序(函數(shù)),根本無法控制收、發(fā)過程,也不知道別人的程序是否合理。這就悲催了。
仔細(xì)研讀你調(diào)用的函數(shù)吧。
作者: VITamina    時(shí)間: 2022-10-22 09:18
yzwzfyz 發(fā)表于 2022-10-20 16:53
一個(gè)CPU在任何任何時(shí)刻只能做一件事!!!
CPU發(fā)送時(shí),不可能接收。
CPU接收時(shí),不可能發(fā)送。

學(xué)習(xí)了,感謝大佬相助,這就老老實(shí)實(shí)研究一下庫函數(shù)
作者: 188610329    時(shí)間: 2022-10-22 16:12
yzwzfyz 發(fā)表于 2022-10-19 08:15
設(shè)有A,B二機(jī)。
1、A在發(fā)送時(shí),必須保證B在接收。否則數(shù)據(jù)會(huì)丟失。
2、B在反回?cái)?shù)據(jù)時(shí),必須保證A在接收。 ...

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




歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1