蓝牙模块HC08 和 手机APP数据传输 (STM32代码)
生活随笔
收集整理的這篇文章主要介紹了
蓝牙模块HC08 和 手机APP数据传输 (STM32代码)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
目錄
一、HC08重要參數
二、主要AT命令解釋
三、STM32端操作
1.操作重點
2.GPIO初始化代碼
3.UART初始化代碼
4.HC08發送數據代碼
5.HC08接收數據代碼
6.數據處理
四、手機APP端操作
1.操作重點:
2.APP步驟截圖:
五、源代碼下載
一、HC08重要參數
- 藍牙4.0,BLE,主從一體
- 模塊上電后,啟動需要150ms
- 默認波特率:9600
- 模塊未連接時,為AT指令模式,連接后為串口透傳模式;
- 空中速率:1Mbps;? (與HC05, HC06等不同, 不能直接與之通信)
- 通信距離:80米; (空曠)
- 工作電流:主機未連21mA,已連9mA; 從機未連8.5mA, 已連9mA; 睡眠0.4uA;?
二、主要AT命令解釋
- AT指令結尾,無需添加換行符;
- AT指令修改,立即生效,掉電不丟失;
- AT指令修改,成功時,統一返回OK,查看信息類指令除外;
- AT指令修改,不成功,不返回任何信息;
三、STM32端操作
1.操作重點
2.GPIO初始化代碼
GPIO_InitTypeDef GPIO_InitStructure; // 時鐘使能RCC->APB1ENR |= RCC_APB1ENR_USART3EN; // 使能USART1時鐘RCC->APB2ENR |= RCC_APB2ENR_IOPBEN; // 使能GPIOA時鐘// GPIO_TX引腳配置GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; // TX引腳,配置為復用推挽工作模式GPIO_Init (GPIOB, &GPIO_InitStructure);// GPIO_RX引腳配置GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING ; // RX引腳,配置為浮空輸入工作模式GPIO_Init (GPIOB, &GPIO_InitStructure);3.UART初始化代碼
NVIC_InitTypeDef NVIC_InitStructure;USART_InitTypeDef USART_InitStructure; // 中斷配置NVIC_InitStructure .NVIC_IRQChannel = USART3_IRQn;NVIC_InitStructure .NVIC_IRQChannelPreemptionPriority=2 ; // 搶占優先級NVIC_InitStructure .NVIC_IRQChannelSubPriority = 2; // 子優先級NVIC_InitStructure .NVIC_IRQChannelCmd = ENABLE; // IRQ通道使能NVIC_Init(&NVIC_InitStructure); //USART 初始化設置USART_DeInit(USART3); USART_InitStructure.USART_BaudRate = baudrate; // 串口波特率USART_InitStructure.USART_WordLength = USART_WordLength_8b; // 字長為8位數據格式USART_InitStructure.USART_StopBits = USART_StopBits_1; // 一個停止位USART_InitStructure.USART_Parity = USART_Parity_No; // 無奇偶校驗位USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; // 使能收、發模式USART_Init(USART3, &USART_InitStructure); // 初始化串口USART_ITConfig(USART3, USART_IT_TXE , DISABLE );USART_ITConfig(USART3, USART_IT_RXNE, ENABLE); // 使能接受中斷USART_ITConfig(USART3, USART_IT_IDLE, ENABLE); // 使能空閑中斷USART_Cmd(USART3, ENABLE); // 使能串口, 開始工作4.HC08發送數據代碼
// 發送AT指令,或字符串 void HC08_SendString(char* strTemp) {HC08_SendData((uint8_t *)strTemp, strlen(strTemp)); }// 發送指定長度的數據 void HC08_SendData(uint8_t* dataBuf, uint16_t cnt) {while(cnt--){while((HC08_UARTx->SR & 0X40)==0); // 等待上一次串口數據發送完成 HC08_UARTx->DR = *dataBuf; // 寫DR,串口將的發送數據 dataBuf++;} }5.HC08接收數據代碼
void USART3_IRQHandler(void) { static uint8_t cnt=0;static uint8_t RxTemp[256];// 接收中斷if(USART3->SR & (1<<5)){RxTemp[cnt++] = USART3->DR ; // 讀取數據寄存器值;注意:讀取DR時自動清零中斷位;}// 空閑中斷, 用于配合接收中斷,可判斷一幀數據接收完成if(USART3->SR & (1<<4)) // 檢查IDLE中斷標志{ memcpy(xUSART.USART3RecivedBuffer , RxTemp , 256); // 臨時數據轉存為全局數據, 等待處理,注意:復制的是整個數組,包括0值,以方便字符串數據xUSART.USART3RecivedFlag = 1; // 標記;外部程序通過檢查xUSARTFlag.USART_2_Recived是否等于1, 可判斷是否有新一幀數據 xUSART.USART3RecivedCNT = cnt;cnt=0; memset(RxTemp ,0, 256); // 臨時數據空零,準備下一次的接收 USART3 ->SR; USART3 ->DR; // 清零IDLE中斷標志位!! 序列清零,順序不能錯!! /********************************************************************************方式1:可在這里調用外部函數,處理接收到數據(不推薦)方式2:可在外部判斷USARTxRecivedFla==1,然后處理數據區xUSART.USARTxRecivedBuffer 禁 止:不可在中斷里調用printf等不可重入函數!!!示 例: 下面這一行代碼, 只作示例, 輸出到上位機以觀察所收到的最新一幀數據, 可刪除*********************************************************************************/USART1_printf((char*)xUSART.USART3RecivedBuffer); // 這行代碼只作示例,輸出USART3收到的最新一幀數據,可刪除 } }6.數據處理
// 本函數為main函數中的while函數while(1) // while函數死循環,不能讓main函數運行結束,否則會產生硬件錯誤{ // Scheduler_Run(); // 任務輪詢器; 如要使用, 清除while中其它函數(移到Scheduler文件中去), 以保證計時的準確System_DelayMS(100); // 上面已初始化SysTick, 可直接使用delay_ms()、delay_us()LED_RED_TOGGLE; // 紅色LED 每0.5秒閃滅一次,以監察系統正常工作 if(xUSART.USART1RecivedFlag==1) // 判斷上位機(USART1)是否收到新的數據{HC08_SendString((char *)xUSART.USART1RecivedBuffer); // 如果收到新數據,就從藍牙發送出去xUSART.USART1RecivedFlag=0; // 處理完了,標記清0,不然下一個while循環又會重復操作} // 處理HC08收到的數據if(xUSART.USART3RecivedFlag==1) // 判斷藍牙HC08(USART3)是否收到新的數據{if(xUSART.USART3RecivedBuffer[0]=='0') { LED_BLUE_OFF;} // 判斷收到的數據if(xUSART.USART3RecivedBuffer[0]=='1') { LED_BLUE_ON;} if(xUSART.USART3RecivedBuffer[0]=='3') { LED_BLUE_TOGGLE;} xUSART.USART3RecivedFlag=0; // 處理完了,標記清0,不然下一個while循環又會重復操作} }四、手機APP端操作
1.操作重點:
- 手機設置,打開藍牙功能,無需搜索連(接在APP里搜索);
- 手機設置,打開位置功能!! 不開位置時搜索不到HC08;
- 必須使用BLE協議的APP,下圖二維碼為HC藍牙助手;?
2.APP步驟截圖:
五、源代碼下載
需要代碼的兄弟,可通過以下方式下載代碼:
1:CSDN資源:HC08與手機藍牙APP通信.zip_stm32與手機APP通過藍牙通信-嵌入式文檔類資源-CSDN下載
2:Q群文件夾:887199504
互相學習,歡迎指正!~
總結
以上是生活随笔為你收集整理的蓝牙模块HC08 和 手机APP数据传输 (STM32代码)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 51单片机、DS18B20、智能窗帘控制
- 下一篇: KeePass 2.42.1 简体中文翻