串列埠除錯小結

2021-06-21 11:29:41 字數 909 閱讀 6911

這個專案是將藍芽模組與nfc模組整合在一起,做乙個demo。兩個模組之間使用串列埠通訊,兩個模組上的mcu均為stm32系列,nfc模組上還有兩個串列埠,乙個作為log,乙個作為at通道,與上位機通訊。

之前由於nfc模組與上位機的串列埠通訊,以及log都調通,所以這次只需要將與藍芽模組的串列埠通訊調通即可。硬體連線完畢後,就開始除錯。當此串列埠初始化後,通過它向藍芽模組通過查詢的方式發資料很快就調通了。接下來就是要能接受藍芽模組發過來的資料,採用中斷方式。at串列埠的中斷優先順序為15,如果這個串列埠的優先順序設定為相同的值,發現中斷處理函式不會被觸發,於是將優先順序改為14。這樣,藍芽發過來的資料就被中斷函式處理了。接下來,要把接收到的藍芽資料解析成一幀一幀的資料**用層解析。當藍芽模組與其他的藍芽模組建立連線時,會發如下資料:

0d 0a ring 0d 0a 0d 0a connect 0d 0a,即2幀資料。中斷一次處理乙個字元,當檢測到接收的位元組為0a,並且之前的位元組為0d,並且不是幀開始的時候,認為一幀資料接收完成,將其值從另乙個串列埠列印出來。繼續接收下一幀。結果第一幀資料能完整的顯示出來,而第二幀資料丟了很多資料,包括分隔符(0d 0a)僅5個位元組。接收緩衝區也開得足夠大不至於溢位。百思不得其解。於是先不解析資料,看是否能將資料完整的接收下來,連續的接收到的字元儲存在緩衝區,結果所有的資料都能接收(接收乙個,就列印乙個)。又通過saleae analysizer,抓取串列埠線上的資料,發現也是ok的。那就是解析的地方出了問題。嘗試了很多方法,都失敗。最後懷疑是不是解析完一幀資料,列印其值時花費了太多的cpu,導致了後面的資料丟失了。於是將列印幀內容去掉,改為將幀的內容通過訊息發到另外乙個task,問題就解決了。果然是列印幀值耗時太多,才導致了後面會丟失資料。因此,在中斷裡,盡量少做大量i/o的操作。其次,藍芽發的兩幀資料時連續發出來的,中間沒有間隔與停頓所以才導致了丟包。

總的來說,這個專案除錯還是蠻順利的。以後一定要進一步熟悉藍芽模組。

5DXTPlayer串列埠除錯小結

過程總是艱難。首先是沒有準備好。沒有安裝vs2012,安裝的時候,出現各種狀況,因為先安裝的 2013 高版本,造成 12安裝不正確,程式編譯出問題。沒有辦法,只好解除安裝 vs2012 2013 及其各項內容啊,解除安裝完了發現連 vs2010 也不能工作了。修復一下,仍舊不行,都亂套完了。我做出...

stm32nucleo 串列埠除錯小結

之前曾經玩過stm32f205,也除錯過串列埠及i2c驅動,現在則是要在stm32f402re上除錯串列埠及spi驅動。由於我是軟體出身,現在慢慢轉向電子工程師,要跟硬體打交道,看硬體原理圖,測量電壓,抓spi波形,最基本就是要把不同的硬體連線起來。箇中滋味真的很的頗難受,備受煎熬!雖然我搞軟體十幾...

Linux串列埠除錯

在第一次除錯linux串列埠驅動的時候,一定要保證與linux串列埠通訊的器件是沒有問題可以使用的,然後我們再進行串列埠操作的學習,否則也許可能碰到問 題的時候不知如何處理了。好了,在保證硬體已經沒有問題的情況下,我們開始學習串列埠驅動模組的使用。pc上的串列埠不比嵌入式,你可以在了解了暫存器之後操...