新唐N76E003 GPRS 串列埠亂碼故障排除手記

2021-10-01 20:40:59 字數 1986 閱讀 8713

目錄

設計目的

讀取imei號碼出現亂碼故障

嘗試解決方法

懷疑1、微控制器引數配置錯誤

懷疑2、gprs與n76e003介面電平相容問題

懷疑3、電磁相容 射頻干擾問題

暫時處置方法

最終解決方法

修改串列埠傳送函式

原有的串列埠傳送函式

微控制器採用n76e003,gprs模組採用air208,n76e003使用usart0與air208通訊,使用usart1與另乙個裝置通訊。由於每個裝置在服務的唯一性,每個裝置編號都應該是唯一的。而gprs模組的imei號正好是唯一的,所以設計思路是讀取該imei號碼並以此作為裝置的唯一編號。

n76e003傳送控制指令,讀取air208的imei號碼。遂嘗試著定位問題。

1、使用串列埠助手觀察,n76e003確實傳送了控制命令,且air208確實返回了包含mei號碼的返回資料。問題是,微控制器無論是單步執行還是全速執行,讀取的資料均有丟失。

2、使用串列埠助手對gprs模組傳送控制命令,成功接收返回資料,無丟失。

3、使用串列埠助手對微控制器傳送24位元組資料,微控制器成功接收資料,無丟失。

可以得出結論:微控制器串列埠可以傳送,可以接收。gprs模組串列埠可以傳送,可以接收。

n76e003微控制器初始化函式如下,繫結tim3,嘗試繫結tim1後,問題並未解決。

同時懷疑啟用了其他微控制器外設造成衝突,所以禁用/注釋了除uart0以外的所有其他外設,問題並未解決。

1、vbat電平是4.0v>0.7vcc=3.5v,微控制器可以成功識別到高電平

2、將vbat處電壓跳線至vcc=5v,問題未排除

3、將gprs模組傳送引腳直連微控制器的接收引腳,問題未排除,遂恢復原有連線

4、懷疑三極體損壞,更換q1 q2,問題未排除

1、恢復最初程式,使用示波器,觀測微控制器tx0 rx0引腳。結果發現,微控制器傳送引腳tx0存在大量雜波,由於gprs模組是dtu透傳模組,伺服器端收到大量亂碼。

2、遮蔽微控制器傳送的詢問gprs模組imei號碼的指令,亂碼消除。

3、伺服器通過gprs模組傳送心跳命令給微控制器,此時微控制器可以正常返回資料。通訊過程正常,雖然通過示波器觀察tx0 rx0出現了一些雜波,但是不影響整體通訊效果。

通過串列埠傳送命令設定裝置編號

以上嘗試都失敗,並未解決亂碼的問題;僅有的收穫是:微控制器不能傳送讀取gprs模組imei號碼的指令,否則就會出錯。所以暫時的解決辦法是用電腦串列埠助手乙個乙個給裝置傳送控制命令,設定裝置的唯一序列號。

念念不忘,必有迴響。問題得不到解決,筆者反覆思考問題到底出在**。最後靈光一閃,微控制器傳送讀imei號碼的指令就亂碼了,那是否問題就出在傳送函式呢?問題正在這裡。

void usart0_send_buf(char *buf, char len)

}

更改後的串列埠傳送函式

void usart0_send_buf(char *buf, char len)

}

總結:陣列的初始化及其元素個數

1、表面上看,是usart0的傳送函式不規範引起的問題。微控制器執行跑飛。

2、深層的看,是陣列的元素個數問題,如果使用原有的列印函式,只要保證陣列邊界不溢位,也是可以的。正如下圖所示,"rrpc,getimei\r\n",我們認為是14個位元組,但是如果陣列長度也定義為14或只發生14個位元組,就會出問題。編譯器提示,這個陣列要準備15個位元組的儲存空間。

3、今後傳送串列埠資料,盡量採用while (*buf != '\0')的傳送方式,不得已採用逐個傳送的方法時,要注意資料的邊界,不要溢位。

新唐N76E003AT20 多通道ADC採集方法

不得不說n76e003的功能在8051核心微控制器中功能已經是非常強大了,並且官方開提供了bsp 開發庫,這些都是可以直接在官網中直接找到的。對於n76e003的adc,因為作者沒有用過很早之前的版本,作者使用的時候官方已經提供了vbg反推vdd的例程,但是這種做法還是有一些缺陷,因為內部的乘除法運...

新唐N76E003指標指向錯誤問題

問題描述 如下 p指向的資料並不是28 char data p char xdata dat 28 p dat 解決方案1 char data p char data dat 28 p dat 解決方案2 char data p char xdata dat 28 p dat 知識點 c51的指標型...

N76E003紅外解碼程式

最近學習了網上的紅外解碼程式儲存學習一下 使用的是n76e003晶元 借鑑了好多地方 只是簡單的啟動led燈 使用的是日本 nec協議 外部定時器中斷1 定時器模式2,8位自動重灌 256步溢位一次 16m晶振 判斷語句那裡自己集合了好多想了乙個案例 定義乙個16位數字 將 的使用者碼反碼和鍵碼正碼...