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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

STM32復位后遙控數據出錯的解決方法

[復制鏈接]
跳轉到指定樓層
樓主
ID:98924 發表于 2015-12-9 01:44 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
DR16接收機的Dbus取反后接到STM32串口的RX腳,使用官方遙控器控制協議V1.4.pdf 中提供的參考代碼接收數據,可以正常接收。在DMA中斷里面加上IO翻轉后,可以通過邏輯測試儀看到如下波形:
如上圖所示,18個字節發送約2ms多,周期約14ms(和手冊里的7ms有出入),18個字節接收完畢后進入DMA中斷,解析各個字節的信息。另一個串口打印出的解析后的遙控數據如下(四個通道搖桿均在中位,S1、S2中位,未接入鍵鼠信息):
但經過測試,在接收機一直上電的情況下,復位STM32,有時會出現如下圖的波形,DMA在18個字節未傳輸完成的時候就中斷了:
另一個串口打印出的解析后的遙控數據如下(四個通道搖桿均在中位,S1、S2中位,未接入鍵鼠信息):
究其原因,是復位并配置好串口后,串口收到的第一個字節有可能不是一幀(18個字節)中的第一個字節,而DMA只管18個字節中斷一次,所以就會出錯。出錯的概率大約為2/14,14%。 解決的方法就是讓串口接收到的第一個字節是一幀中的第一個字節,可以算好時間后讓接收機和STM32同時上電,保證接收數據正確。但在調試過程中,難免會經常復位,所以最好能在代碼里面解決這個問題。
由于Dbus的數據中不包含幀頭或幀尾之類的標識信息,所以不能通過識別標識信息的方法來解決這個問題。筆者解決這個問題的思路大致為:首先開啟串口的接收中斷,當串口收到第一個字節的時候進入中斷服務函數,在中斷服務函數里面重置串口(重置后不會再進入串口接收中斷),延時3ms,延時結束的時候肯定就是在兩幀信息的間隔里面,然后再配置并開啟DMA,這樣DMA傳輸的第一個字節必然就是一幀的首字節。經筆者的測試,這種方法效果良好:
如上圖所示,就算串口收到的第一個字節不是幀首字節,DMA也能正確的接收后續的數據。

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: av一级久久 | 亚洲精品日韩一区二区电影 | 美女天天操 | 国产精品一区二 | 久久综合久 | 99精品久久 | 久久精品免费一区二区三 | 精品福利在线视频 | 久久99国产精品 | 91亚洲国产成人精品一区二三 | 国产一级免费在线观看 | 欧美男男videos | 日韩成人 | 色吧色综合| 欧美中文一区 | 日本一二区视频 | 国产精品欧美日韩 | www.v888av.com| 亚洲综合第一页 | 孰女乱色一区二区三区 | 精品国产一区二区三区观看不卡 | 欧美日在线 | 亚洲 欧美 日韩 精品 | 日韩中文字幕在线观看 | 成人妇女免费播放久久久 | 国产精品久久久久久妇女 | 成人精品一区二区三区 | 国产精品1区2区3区 男女啪啪高潮无遮挡免费动态 | 成人亚洲视频 | 中文字幕一区二区三区不卡 | 欧美精品电影一区 | 国内精品视频 | 国产成人免费视频网站高清观看视频 | 日本精品裸体写真集在线观看 | 日日操日日干 | 日韩一区二区在线观看 | 欧美激情一区二区三级高清视频 | 国产精品九九九 | 国产精品久久久久久吹潮 | www.久久| 国产精品五月天 |