Openmv 與 Stm32f407通訊
入門學習記錄
學習中接觸到了openmv ,發現視覺也挺好玩的,openmv視覺處理的資料經常要傳到另一個微控制器,這裡openmv用的是stm32h7,用的串列埠為串列埠3。控制板是stm32f407zgt6,用的串列埠是串列埠2。
目的是將openmv的資料通過串列埠傳到控制板並在oled上面顯示。
大概思路
兩個微控制器用串列埠通訊,必須把自己的串列埠配置好。stm32f407串列埠2的配置在上一個文章講了;openmv的串列埠直接呼叫。雙方約定好波特率就可以通訊了。難的是資料的處理,在用微控制器與電腦通訊的時候會發現有時候得到一些亂碼,主要是串列埠有可能一直在傳送資料,這不是我們希望得到的。在電腦串列埠助手觀察十六進位制會發現在我們要的資訊前面有亂碼的十六進位制,因此在我們需要的資料前面自己加兩個已知的數,接收的時候判斷到了這兩個數就可以認為接下來的就是我們要的資料,這兩個數就是所謂的“幀頭”,以幀傳送資料比較常用,幀頭和資料比較重要,其它可以省略,具體可以百度。
1.配置串列埠,約定好波特率
2.IO接線,RX接TX
3.傳資料,收資料。openmv的資料要用 bytearray()函式將資料轉化為位元組形式傳到控制板
4.資料處理
程式碼
openmv
import time
from pyb import UART
uart = UART(3, 115200) //波特率為115200
while(True):
FH = bytearray([0xb3,0xb3]) //幀頭,控制板接收資料以後判斷,轉化為位元組傳送,不能用16進位制直接傳
uart.write(FH) //寫到串列埠
uart.write("123321") /// 寫資料
FH = bytearray([0x0d,0x0a]) //結束標誌 ,換行和回車的ascll
uart.write(FH)
time.sleep(1000)
main.c
#include "sys.h" //沒有的標頭檔案要刪掉
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "beep.h"
#include "key.h"
#include "oled.h"
u8 UsartDisPlay[200]; // oled上面顯示的
int main(void)
{
u8 t,n;
u8 len;
u16 times=0;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//設定系統中斷優先順序分組2
delay_init(168); //延遲初始化
uart2_init(115200); //波特率為115200
LED_Init();
OLED_Init(); //oled初始化
while(1)
{
if(USART2_RX_STA&0x8000)
{
len=USART2_RX_STA&0x3fff;//得到此次接收到的資料長度
for(t=0;t<len;t++)
{
if(USART2_RX_BUF[t]==0xb3) //判斷幀頭,即我們加的兩個數
if(USART2_RX_BUF[t+1]==0xb3)
n=t+2; //記錄我們需要資料的位置
}
for(t=0;n<len;t++,n++)
UsartDisPlay[t] = USART2_RX_BUF[n]; // 將我們需要的資料在oled上面顯示,便於觀察是否正確
OLED_ShowString(1,1,UsartDisPlay);
USART2_RX_STA=0;
}else
{
times++;
if(times%5000==0)
{
LED1=!LED1;
}
if(times%30==0)LED0=!LED0; //閃爍LED,提示系統正在執行
delay_ms(10);
}
}
}
![在這裡
stm32f407zgt6串列埠配置的程式碼在上一篇文章。
相關文章
- 【學習筆記】OpenMV與arduino通訊筆記UI
- openmv ide 2.6.5下載IDE
- Binder通訊機制與IPC通訊.md
- 序列通訊與並行通訊的區別並行
- flutter 與native通訊初探Flutter
- 【rosbridge】ROS與Android通訊ROSAndroid
- Flutter與原生通訊 - Flutter PluginFlutterPlugin
- RN 與原生通訊(Android篇)Android
- 工作筆記——CPLD與MCU通過SPI通訊筆記
- 串列埠通訊與其他通訊方式相比有什麼優勢?串列埠
- 樂訊通雲通訊:物聯卡與加油站結合
- 樂訊通雲通訊:物聯卡,物與物之間溝通的橋樑
- 樂訊通雲通訊:物聯網路卡與手機卡區別
- React Native與Android通訊互動React NativeAndroid
- 【通訊】TETRA 與PDT的區別
- 不同頁面通訊與跨域跨域
- Flutter與android之間的通訊FlutterAndroid
- Windows git無法與github通訊WindowsGithub
- Vue使用JSBridge與原生APP通訊VueJSAPP
- Flutter Webview網頁與App通訊FlutterWebView網頁APP
- flutter: 執行緒通訊與訊息迴圈Flutter執行緒
- 使用Python和OpenMV讀取條形碼Python
- 計算機通訊與網路基礎計算機
- redis通訊與高可用叢集原理Redis
- PHP-FPM 與 NGINX 通訊過程PHPNginx
- 【譯】Android Architecture - ViewModel 與 View 的通訊AndroidView
- 程式通訊方式總結與盤點
- Flutter與原生通訊的一切Flutter
- PLC與觸控式螢幕通訊
- [譯] React Native 與 iOS 和 Android 通訊React NativeiOSAndroid
- Flutter與webview通訊橋樑開發FlutterWebView
- php 透過 JSON RPC 與 golang 通訊PHPJSONRPCGolang
- 網路程式設計與通訊原理程式設計
- 程序間的通訊(訊號通訊)
- 程式間通訊——POSIX 有名訊號量與無名訊號量
- $attrs 與 $listeners 進行「巢狀元件」通訊巢狀元件
- Vue 3 元件通訊與 ViewDesign 最佳實踐Vue元件View
- vue3元件通訊與propsVue元件