天天看點

關于STM32與OpenMv通訊踩過的那些坑(1)

話不多說,進入主題。

在stm與openmv進行序列槽通訊的過程中遇到的問題是,openmv發送資訊給stm,而stm隻能接收一個位元組、也就是隻能進入中斷一次,stm接受不到結束字元,進入不了一段字元串的結尾判斷。而stm、openmv和電腦進行單獨通訊的時候都能正常通訊。

#OpenMv的代碼:

我使用的初始代碼:

while(True):
    uart.write("green")
    time.sleep_ms(1000)

    uart.write("blue")
    time.sleep_ms(1000)

           

openmv序列槽發送字元,沒有結束符。開始的時候就有想到這個問題,但stm方面的代碼也有問題,就沒有得到認證,後面慢慢改正才确定是這個問題。

關于STM32與OpenMv通訊踩過的那些坑(1)
關于STM32與OpenMv通訊踩過的那些坑(1)
關于STM32與OpenMv通訊踩過的那些坑(1)

是以openmv程式代碼不改的話,就算stm方面能正常接受。openmv發送出去不同的字元串就會被認為是同一條字元串,這樣就不能達到我們識别資訊的目的了。

關于STM32與OpenMv通訊踩過的那些坑(1)
關于STM32與OpenMv通訊踩過的那些坑(1)

在ascii嗎中\r \n這兩個字元串的編碼分别是0x0d和0x0a。這是我在檢視openmv序列槽通訊例程和電腦通訊時發現的。

while(True):
    uart.write("Hello World!\r")
    time.sleep_ms(1000)

           
關于STM32與OpenMv通訊踩過的那些坑(1)
關于STM32與OpenMv通訊踩過的那些坑(1)

那麼,如果我在green後面加上\r \n這兩個字元。不就是相當于stm序列槽通訊要求的以0x0d 0x0a結尾了嗎?

下面展示一些

内聯代碼片

while(True):
    uart.write("green\r\n")
    time.sleep_ms(1000)

    uart.write("blue\r\n")
    time.sleep_ms(1000)
           
關于STM32與OpenMv通訊踩過的那些坑(1)
關于STM32與OpenMv通訊踩過的那些坑(1)

可以看出,openmv發送出去的字元串能被分割開了,stm方面也能正常接受到。

因為篇幅的原因,stm方面的代碼在下一章寫。

小白一枚,第一次寫部落格,多多指教!有什麼問題及錯誤的地方,歡迎提出。

stm32方面的問題講解已經出來啦:

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