關於STM32與OpenMv通訊踩過的那些坑(2)

2021-10-22 16:14:22 字數 1301 閱讀 8476

不好意思!因為這幾天要準備專案答辯,比較忙,所以沒能及時更新。

不過,雖然這種led除錯方法讓串列埠中斷產生了異常,但它確實幫助我查出了openmv方面的錯誤!

接下來我將先和大家分享我利用led除錯,檢查出openmv方面錯誤的步驟。

下面展示一些內聯**片

//使用正點原子串列埠實驗源**

void usart1_irqhandler(void) //串列埠1中斷服務函式

}else //還沒收到0x0d

else

}}

} }

就是這樣,看那些led亮起來了,就可以明確程式執行到哪一步,因為接收結束符的那些led燈沒有亮起,一步步慢慢除錯逐步發現問題根源。

那為什麼我的串列埠中斷服務函式會出現錯誤的呢,後來我在論壇上看到,有一位大佬說,最好不要再中斷服務函式裡面寫太多的程式,然而我加入的led燈程式是這樣的

bule = 0;

delsy-ms(200);

bule = 1;

200毫秒,對於微控制器在說已經以很長很長的了,可以執行很多其他的**了,大佬說的不要再服務函式裡面寫太多的程式的意思是,不要讓程式再服務函式裡面執行太久。我覺得說的很有道理,後來改了執行就正常了。問題解決。哎,這個問題真的搞了我好久好久。裂開。

下面是串列埠接收多幀資料的流程:

下面展示一些內聯**片

//使用正點原子串列埠實驗源**

u8 usart_rx_buf[usart_rec_len]; //乙個八位的陣列,用於儲存接收的字元

u16 usart_rx_sta=0; //這是乙個接收的標誌位,是程式設計師用來識別和記錄用的,開始的時候我以為這個是stm內部的乙個暫存器(說出來羞死人)

//bit15 接收到完成標誌位,收到0x0a程式就會將這位置1

//bit14 接收到0x0d,收到0x0d程式就會將這位置1

//bit0~13 用於記錄接收到的字元的長度

//那接下來我們開始接收資料啦!首先usart_rx_sta和usart_rx_buf[usart_rec_len]都是空的;所有位都是零

void usart1_irqhandler(void) //串列埠1中斷服務函式

}else //還沒收到0x0d

else

}}

} }

話比較多,不過對新手應該比較友好。

當然,說多錯多,各位發現了希望可以及時提出。

樹莓派與STM32通訊

硬體 使用ch340的usb轉ttl 一般接有 根線 電源 gnd tx rx 操作 開啟樹莓派的終端 輸入 lsusb 會顯示出相應的usb裝置 找到hl 340 usb serial 輸入 pip list 檢視是否安裝pyserial 在測試之前要檢視usb的裝置號 在終端輸入 ls l de...

關於STM32 軟體復位

對於stm32 來說軟體復位有兩種方式 1 採用官方自帶的軟體庫 在官方軟體庫的stm32f10x nvic.c 檔案裡直接提供了系統復位的函式 void nvic generatesystemreset void 但是不是直接呼叫這個函式就ok 了?在cortex m3 權威指南中有這麼一句話 這...

關於STM32空閒中斷

有一次做乙個東西,為了盡量不占用cpu的處理資料時間,所以就使用dma接收串列埠的資料,但是呢問題來了.怎麼樣才能確定接收到了一條完整的資料了,我們都知道只要開啟dma 那傢伙就不停的把接收的資料放到我們指定的地方.只要接收到一條完整的資料我就該去處理了 關於空閒中斷,就是說每接收到一條完整的資料就...