蓝牙调试器 接收处理 hc-05蓝牙上传数据
文章目錄
- 前言
- 一,設置數據包格式
- 二,編輯控件
- 三,stm32 串口發送
- 四,stm32 串口接收
前言
測試項目地址:https://gitee.com/killerp/stm32_ble_debug
串口是我們經常用來輸出數據的接口,使用一些藍牙串口模塊,如HC-05能方便的通過藍牙將串口數據發送到上位機,省去了串口連線到電腦的步驟。
今天分享一個功能強大的APP,藍牙調試器,它具備以下功能
-
發送/接收藍牙串口的數據
-
自定義藍牙串口 發送/接收數據包格式
-
支持多種控件:如按鍵,文本,滑動窗口,坐標軸顯示等。
尤其是自定義數據包格式 和 多種可選的控件 是數據處理強大工具!
本次實驗基于stm32及HC-05藍牙串口模塊,上位機為安卓手機,藍牙調試器下載:
應用商店搜索 藍牙調試器,APP圖標見下圖:
一,設置數據包格式
APP界面如圖所示,設備連接 與 對話模式 都是基操 ,我們直奔主題:專業調試
首先新建一個工程,暫時取名為demo,我們需要關注 編輯控件 和 通信設置 功能;先進入通信設置,設置我們的數據包格式:
根據自己的數據需求,設置數據包內傳輸的數據。數據包的格式設置規則如下:
- 起始字節:0xA5
- 原始數據
- 校驗和(原始數據所有字節之和,再取低8bit數據)
- 結束字節:0x5A
數據格式支持bool,char,short,int,float四種c語言常用的數據類型,在本次例程中,我將傳輸char,short,int,float類型的數據。假定我們要發送和接收的數據包格式如下:
根據上面的數據包格式,到APP中的發送和接收數據包界面,分別添加一個char,short,int,float的變量;如圖:到此我們就完成了數據包格式的設置了。
二,編輯控件
這里以Y-T一維波形圖為例子,簡單介紹控件的設置流程:
點擊+,選擇Y-T一維波形圖,隨后彈出下面窗口:
該波形圖能同時顯示6個通道的數據,Receive表示數據來自接收的數據包,隨后是數據類型,最后是鏈接到上一步中我們創建的變量。
補充:右上角的黃色的齒輪可設置數據接收周期,這個取決于逆串口發送的周期,暫時設置為100ms。同時還能支持控件的移動和縮放等。
三,stm32 串口發送
藍牙調試器的設置基本完成了,接下來就是單片機的串口程序設計了,這里以stm32為例子:
簡單介紹一下串口的配置:
- 串口波特率:9600
- 使能DMA發送
- 使能接收中斷
這一段代碼顯示如何組裝我們的數據:
#define USART_TX_LEN 14 //數據包大小 extern uint8_t USART_TX_BUF[USART_TX_LEN]; //數據包緩存區 char x = 0x01; short y = 0x02;int z = 0x03;float f = 4.5; USART_TX_BUF[0] = 0xA5; USART_TX_BUF[1] = (uint8_t)x;Short_to_Byte(y,&USART_TX_BUF[2]);Int_to_Byte(z,&USART_TX_BUF[4]);Float_to_Byte(f,&USART_TX_BUF[8]);//計算校驗和USART_TX_BUF[12] =(uint8_t) ((USART_TX_BUF[1]+USART_TX_BUF[2]+USART_TX_BUF[3]+USART_TX_BUF[4]+USART_TX_BUF[5]+USART_TX_BUF[6]+USART_TX_BUF[7]+USART_TX_BUF[8]+USART_TX_BUF[9]+USART_TX_BUF[10]+USART_TX_BUF[11])&0xff);USART_TX_BUF[13] = 0x5A;//通過串口1發送ble_send(USART_TX_BUF,14);//延時100msdelay_ms(100);串口發送函數:
//send data to hc-05 int ble_send(uint8_t *data,int len) {while(__HAL_UART_GET_FLAG(&huart1,UART_FLAG_TC)!=SET); //wait until tx completeif(!data)return -1;HAL_UART_Transmit_DMA(&huart1,data,len); //ê1ó?DMA?£ê?·¢?íwhile(__HAL_UART_GET_FLAG(&huart1,UART_FLAG_TC)!=SET);return 0; }要將short,int,float類型變量轉換為字節類型變量,才能通過串口傳輸,下面函數實現轉換功能:
void Int_to_Byte(int i,uint8_t *byte) {unsigned long longdata = 0;longdata = *(unsigned long*)&i; byte[3] = (longdata & 0xFF000000) >> 24;byte[2] = (longdata & 0x00FF0000) >> 16;byte[1] = (longdata & 0x0000FF00) >> 8;byte[0] = (longdata & 0x000000FF);} void Float_to_Byte(float f,uint8_t *byte) {unsigned long longdata = 0;longdata = *(unsigned long*)&f; byte[3] = (longdata & 0xFF000000) >> 24;byte[2] = (longdata & 0x00FF0000) >> 16;byte[1] = (longdata & 0x0000FF00) >> 8;byte[0] = (longdata & 0x000000FF);}void Short_to_Byte(short s,uint8_t *byte) {byte[1] = (s & 0xFF00) >> 8;byte[0] = (s & 0xFF); }藍牙調試器接收界面顯示:
四,stm32 串口接收
首先,我們在 藍牙調試器 中添加 可編輯文本 控件 來輸入我們要發送的數據;
本實驗中,我們發送一幀數據包給stm32,stm32解析出數據后,對數據進行加法運算并返回到藍牙調試器。
實現效果如圖:
黑色框中顯示接收到的數據,綠色框中顯示發送的數據;
對于char 類型+1,short+2,int+3,float+1.1;
stm32使能串口接收中斷,并在中斷中處理數據:
總結
以上是生活随笔為你收集整理的蓝牙调试器 接收处理 hc-05蓝牙上传数据的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python ITK GetPixel方
- 下一篇: 译电文密码