-
當(dāng)前位置:首頁(yè) > 創(chuàng)意學(xué)院 > 營(yíng)銷(xiāo)推廣 > 專題列表 > 正文
- stm32 can可以接收數(shù)據(jù),但卻無(wú)法發(fā)送數(shù)據(jù),怎么回事
- stm32中can怎么接受另一個(gè)can發(fā)來(lái)的大量數(shù)據(jù)
- Can數(shù)據(jù)接收問(wèn)題
- CAN是如何接收數(shù)據(jù)的?
CAN數(shù)據(jù)對(duì)列接受(can數(shù)據(jù)接收)
大家好!今天讓創(chuàng)意嶺的小編來(lái)大家介紹下關(guān)于CAN數(shù)據(jù)對(duì)列接受的問(wèn)題,以下是小編對(duì)此問(wèn)題的歸納整理,讓我們一起來(lái)看看吧。
開(kāi)始之前先推薦一個(gè)非常厲害的Ai人工智能工具,一鍵生成原創(chuàng)文章、方案、文案、工作計(jì)劃、工作報(bào)告、論文、代碼、作文、做題和對(duì)話答疑等等
只需要輸入關(guān)鍵詞,就能返回你想要的內(nèi)容,有小程序、在線網(wǎng)頁(yè)版、PC客戶端和批量生成器
問(wèn)友Ai官網(wǎng):https://ai.de1919.com。
本文目錄:
stm32 can可以接收數(shù)據(jù),但卻無(wú)法發(fā)送數(shù)據(jù),怎么回事
查錯(cuò)思路:
用回環(huán)模式測(cè)試收發(fā)功能是否正常
若正常,那就是另一臺(tái)CAN節(jié)點(diǎn)有問(wèn)題
注意,兩臺(tái)對(duì)接的節(jié)點(diǎn)都必須在正常模式下,才能發(fā)送成功,若其中一臺(tái)不是正常模式,那另一臺(tái)正常模式的節(jié)點(diǎn)是無(wú)法發(fā)送成功的
若不正常,那就是你的初始化程序有問(wèn)題
STM32的CAN調(diào)試思路,應(yīng)該是在回環(huán)模式下先調(diào)通一臺(tái),能正常接收自己發(fā)送的數(shù)據(jù)后,再在正常模式下接至少2個(gè)節(jié)點(diǎn)測(cè)試(且兩個(gè)節(jié)點(diǎn)都必須是正常模式)
必須注意,CAN總線硬件有問(wèn)題時(shí)可能初始化失敗(比如CAN收發(fā)芯片壞了)
CAN總線怎么實(shí)現(xiàn)一各節(jié)點(diǎn)發(fā)送多各節(jié)點(diǎn)接收,應(yīng)答機(jī)制,向大神求解額?。。。?!
ACK SLOT只有一個(gè)BIT,而接下去的ACK delimiter始終為隱性(我們可認(rèn)為是1),當(dāng)數(shù)據(jù)到達(dá)ACK SLOT的時(shí)候,所有的節(jié)點(diǎn)都會(huì)發(fā)送顯性位(我們可以認(rèn)為是0),而發(fā)送者在ACK這個(gè)時(shí)間里保持隱性位(即發(fā)送者在發(fā)送的時(shí)候ACK SLOT 為1),這時(shí)發(fā)送者會(huì)檢測(cè)總線上的ACK時(shí)間內(nèi)的信號(hào),如果是0,則表示正確,如果是1,表示有錯(cuò)誤。如果當(dāng)中有某一個(gè)節(jié)點(diǎn)在ACK SLOT填入隱性位,則總線上同樣還是顯性位電平,故只要總線上有一個(gè)節(jié)點(diǎn)正確接收到數(shù)據(jù),則ACK SLOT就會(huì)被填入顯性電平;那么,接收錯(cuò)誤的節(jié)點(diǎn)如何來(lái)告知發(fā)送者此次發(fā)送不成功呢?這時(shí)候就要用到CAN的錯(cuò)誤幀,當(dāng)一個(gè)接收者收到錯(cuò)誤的數(shù)據(jù)的時(shí)候,它立即開(kāi)始發(fā)送一個(gè)錯(cuò)誤幀,則接下去總線上的信號(hào)就是這個(gè)錯(cuò)誤幀,其它的節(jié)點(diǎn)和發(fā)送者也都會(huì)收到這個(gè)錯(cuò)誤幀,那所有的節(jié)點(diǎn)都知道出錯(cuò)了,接收者會(huì)丟掉此次消息,而發(fā)送者會(huì)試圖重發(fā)此次消息。這才是ACK SLOT真正的含義。stm32中can怎么接受另一個(gè)can發(fā)來(lái)的大量數(shù)據(jù)
CAN一幀數(shù)據(jù)最多八個(gè)字節(jié)數(shù)據(jù),所以當(dāng)發(fā)送數(shù)據(jù)大于8個(gè)字節(jié)時(shí),拆成多幀來(lái)發(fā)。接收同理,需要對(duì)收到的數(shù)據(jù)包進(jìn)行組包,還原數(shù)據(jù)。
Can數(shù)據(jù)接收問(wèn)題
u32 cnt=0;void Can_Read_thread(void* psock)
{
int sock = *(int *)psock;
struct can_frame frame;
while(1)
{
memset(&frame,0,sizeof(struct can_frame));
read(sock,&frame,sizeof(struct can_frame));
if(frame.can_dlc > 0)
{
cnt += 1;
printf("Number: %d, %s recv: %sn",cnt, ifr.ifr_name,frame.data);
}
}
printf("total recv count: %dn",cnt);
}
CAN是如何接收數(shù)據(jù)的?
CAN數(shù)據(jù)接收:當(dāng)節(jié)點(diǎn)n從CAN總線上接收到電壓信號(hào)后,首先由CAN收發(fā)器n將總線電壓信號(hào)轉(zhuǎn)換為對(duì)應(yīng)的數(shù)字信號(hào),然后將其數(shù)字信號(hào)發(fā)送給CAN控制器n.CAN控制器n首先對(duì)其收到的數(shù)據(jù)進(jìn)行驗(yàn)收濾波,判斷收到的信號(hào)是否為自身節(jié)點(diǎn)需要的數(shù)據(jù),若是,則接受此數(shù)據(jù)并對(duì)其進(jìn)行解包,為節(jié)點(diǎn)n的微控制器n提供有效數(shù)據(jù),否則節(jié)點(diǎn)n放棄此次收到的CAN數(shù)據(jù)。以上就是關(guān)于CAN數(shù)據(jù)對(duì)列接受相關(guān)問(wèn)題的回答。希望能幫到你,如有更多相關(guān)問(wèn)題,您也可以聯(lián)系我們的客服進(jìn)行咨詢,客服也會(huì)為您講解更多精彩的知識(shí)和內(nèi)容。
推薦閱讀:
蘋(píng)果電腦怎么下載caj閱讀器(蘋(píng)果電腦怎么下載cajviewer)
cad室內(nèi)裝修設(shè)計(jì)圖紙(cad室內(nèi)裝修設(shè)計(jì)圖紙?jiān)趺串?huà))_1
一個(gè)手機(jī)號(hào)怎么注冊(cè)兩個(gè)微信(一個(gè)手機(jī)號(hào)怎么注冊(cè)兩個(gè)微信號(hào)碼微信)
人工智能文章生成器開(kāi)源版(人工智能文章生成器開(kāi)源版下載)