現象:單片機與服務器雙向通信,服務器發一次數據等待單片機響應,響應完成繼續發送,沒有響應等待1秒再次發送;單片機向服務器發送數據同理。測試進行了幾萬次數據交流,發現一個規律:服務器向單片機發送的數據單片機都能夠接收,而且正常回應,服務器也能夠全部收到,例如服務器發了10000次數據,單片機就能夠收到10000次數據也能響應服務器10000次。而單片機向服務器發送的請求,服務器卻不一定能夠全部收到,但是只要服務器收到的請求,都能夠做出響應,比如單片機發出了10000次數據,但是服務器卻直接受到了9990次,也給單片機響應了9990次,丟了10次。
遇到這個問題后怎么想也想不明白,為什么單片機響應服務器的數據一個沒丟,但是請求服務器的數據卻會丟呢?
調試過程:將測試次數減少,只要發生丟失數據的情況就立即停止。于是單片機與服務器繼續通信,在丟失第一個數據的時候停下來查看狀態,發現單片機發送請求的同時,服務器也在發送請求。那么為什么單片機的請求卻失敗后沒有再次發送?回到單片機的代碼當中發現在CAN模塊初始化的時候禁止自動重發的功能為使能狀態,也就是單片機在發送數據的時候,只發送一次,即使發送失敗了也不會去管,而是返回發送完成的狀態。所以,單片機在與服務器端用的以太網轉CAN模塊的較量當中,丟掉了數據,服務器發送成功。
那么,還有一個問題,就是為什么單片機給服務器發的響應都會成功?這與上層代碼的邏輯有關,因為服務器向單片機發送完請求后會等待單片機響應,此時的總線只有單片機在占用,所以單片機發的相應數據會每次都成功。
后來,使用了單片機的自動重發功能后再次測試,發現單片機發出的請求沒有發生丟包的現象。
查閱STM32的數據手冊,發現這個自動重發功能如果啟用,當單片機檢測到發送數據失敗后會一直重發,直到成功。而如果不用這個功能,則單片機的CAN控制器只發一次數據,不去換結果如何。
上一篇:STM32 CAN 波特率、采樣點設置
下一篇:STM32 中 CAN進入錯誤回調函數后無法接收問題(HAL庫)
推薦閱讀
史海拾趣
隨著公司業務的不斷發展,DeLorme公司開始積極尋求市場擴張的機會。他們通過與國外知名品牌的合作,將自己的產品推向了國際市場。同時,他們還積極參與國際性的戶外活動和賽事,通過這些活動提高品牌知名度和影響力。在國際市場的競爭中,DeLorme公司憑借其獨特的技術優勢和優質的產品質量逐漸獲得了認可。
隨著數字化時代的到來,APDI意識到數字化轉型對于提升公司運營效率和市場競爭力的重要性。公司開始引入先進的生產管理系統和數據分析工具,實現了生產過程的自動化和智能化。同時,APDI還加強了與客戶的在線互動和定制化服務,提升了客戶滿意度和忠誠度。數字化轉型使APDI在激烈的市場競爭中保持了領先地位。
這些故事是基于電子行業的一般趨勢和可能的公司發展路徑虛構的,旨在展示一個假設公司在不同發展階段的可能經歷。它們并不代表任何真實公司的歷史或情況。
品質是Base Two (2) Systems的生命線。公司始終堅持嚴格的質量管理體系,從原材料采購到生產制造的每一個環節都進行嚴格把控。這種對品質的執著追求,使得公司的產品在市場上贏得了客戶的廣泛信賴。許多客戶與公司建立了長期穩定的合作關系,成為公司發展的重要支撐。
隨著產品技術的不斷成熟,Base Two (2) Systems開始積極拓展市場。公司通過與各大電子廠商、分銷商建立緊密的合作關系,將產品推向更廣闊的市場。同時,公司還積極參加各類行業展會和交流活動,與業內同行深入交流,共同探討行業發展趨勢,為公司的長遠發展奠定了堅實的基礎。
近年來,智能制造成為電子行業的新趨勢。FCT Electronics緊跟時代步伐,開始探索智能制造領域。公司引進了先進的自動化生產線和檢測設備,提高了生產效率和產品質量。同時,FCT Electronics還積極開發智能測試系統,為客戶提供更加便捷、高效的服務。這一轉型不僅提升了公司的市場競爭力,也為未來的發展打開了新的空間。
上述五個故事,僅基于公開信息和電子行業的一般發展趨勢構建,并非FCT Electronics公司的真實歷史事件。如需了解FCT Electronics公司的真實發展情況,請查閱相關官方資料。
FCI Connector的前身可以追溯到1937年成立的費城絕緣體公司(Philadelphia Insulation Company)。這家公司最初專注于電子零件的制造和銷售。隨著時間的推移,公司在1976年被德州儀器(Texas Instruments)收購,并更名為TI Electronic Components(TIEC)。然而,TIEC在1981年做出了一個重大的戰略決策:將連接器業務剝離出來,成立了FCI Connector公司。這一決策讓FCI能夠更專注于電子連接器的研發、生產和銷售,為其后續的快速發展奠定了基礎。
本帖最后由 paulhyde 于 2014-9-15 09:16 編輯 如果有的話,希望能給我看下,感激不盡!~~ haishan653@qq.com … 查看全部問答∨ |
|
今天班主任讓我們買了塊arm開發板,說讓我們把它當做單片機來學習(讓我們自學就是),可我只學過c51對arm根本沒有概念啊,不知道怎么入門啊,請各位前輩賜教一下,小弟該如何學習arm,感激不盡… 查看全部問答∨ |
|
我在串口大師中發送如下命令 at 收到:ok at+cmgf=1 收到 ok at+cmgs="手機號碼" test<ctrl-Z> 收到AT+CMGS="13974923062" &n ...… 查看全部問答∨ |
|
在CE5.0的一個背光驅動中看到背光關了以后. 主要由三種事件重新打開背光.具體代碼如下: // Globals const TCHAR szevtBacklightChange[] = TEXT("BackLightChangeEvent"); const TCHAR szevtPowerChanged[] = TEXT("PowerChang ...… 查看全部問答∨ |
什么是三段式描述電路? 所謂三段式描述指的是狀態機的描述. 內國FPGA和CPLD設計者由于多年C語言程序設計風格的影響,常采用一段式狀態機描述. 狀態機采用VerilogHDL/VHDL語言編碼,建議分為三個always/PROCESS段完成。 ...… 查看全部問答∨ |