1. 程式人生 > >【STM32】STM32之藍芽透傳模組(昇潤科技HY-254124 V8)

【STM32】STM32之藍芽透傳模組(昇潤科技HY-254124 V8)

//******************************************************************************          
//name:             BLE_Uart.c          
//introduce:        藍芽串列埠透傳驅動   
//author:           甜甜的大香瓜                 
//email:            [email protected]     
//QQ group          香瓜微控制器之STM8/STM32(164311667)                  
//changetime:       2016.10.17   
//****************************************************************************** 
#include "stm32f10x.h"
#include "BLE_Uart.h"
#include "GUA_USART.h"
#include <string.h>
#include "main.h"
/*********************巨集定義************************/ 
#ifndef U8  
typedef unsigned char U8;  
#endif  
  
#ifndef U16  
typedef unsigned short U16;  
#endif  

#ifndef U32  
typedef unsigned long U32;  
#endif  

#ifndef int32  
typedef signed long int32;  
#endif 

//引腳巨集定義
#define BLE_UART_INT                    GPIOA
#define BLE_UART_INT_PIN                GPIO_Pin_6

#define BLE_UART_WAKEUP                 GPIOA
#define BLE_UART_WAKEUP_PIN             GPIO_Pin_5

#define BLE_UART_RESET                  GPIOA
#define BLE_UART_RESET_PIN              GPIO_Pin_0
/*********************全域性變數************************/ 
U8 gBLE_Uart_IntPulse = BLE_UART_INTPULSE_IDLE;         //無脈衝

/*********************內部函式宣告************************/ 
static void BLE_Uart_IO_Init(void);
static void BLE_Uart_Exti_Init(void);
//******************************************************************************            
//name:             BLE_Uart_IO_Init           
//introduce:        藍芽串列埠模組的IO初始化         
//parameter:        none                 
//return:           none         
//author:           甜甜的大香瓜                 
//email:            
[email protected]
//QQ group 香瓜微控制器之STM8/STM32(164311667) //changetime: 2016.10.17 //****************************************************************************** static void BLE_Uart_IO_Init(void) { //IO結構體 GPIO_InitTypeDef GPIO_InitStructure; //時鐘使能 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); //RESET配置 GPIO_InitStructure.GPIO_Pin = BLE_UART_RESET_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(BLE_UART_RESET, &GPIO_InitStructure); //WAKEUP配置 GPIO_InitStructure.GPIO_Pin = BLE_UART_WAKEUP_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(BLE_UART_WAKEUP, &GPIO_InitStructure); //INT配置 GPIO_InitStructure.GPIO_Pin = BLE_UART_INT_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(BLE_UART_INT, &GPIO_InitStructure); } //****************************************************************************** //name: BLE_Uart_Exti_Init //introduce: 藍芽串列埠模組的IO中斷初始化 //parameter: none //return: none //author: 甜甜的大香瓜 //email:
[email protected]
//QQ group 香瓜微控制器之STM8/STM32(164311667) //changetime: 2016.10.17 //****************************************************************************** static void BLE_Uart_Exti_Init(void) { EXTI_InitTypeDef EXTI_InitStructure; //配置中斷線 GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource6); //配置中斷引數 EXTI_InitStructure.EXTI_Line = EXTI_Line6; EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; EXTI_InitStructure.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStructure); } //****************************************************************************** //name: BLE_Uart_Init //introduce: 藍芽串列埠模組初始化 //parameter: none //return: none //author: 甜甜的大香瓜 //email:
[email protected]
//QQ group 香瓜微控制器之STM8/STM32(164311667) //changetime: 2016.10.17 //****************************************************************************** void BLE_Uart_Init(void) { u32 i; /**********初始化***************/ //初始化IO BLE_Uart_IO_Init(); //初始化IO的中斷配置 BLE_Uart_Exti_Init(); //復位 GPIO_ResetBits(BLE_UART_RESET, BLE_UART_RESET_PIN); //RESET低 for(i = 0; i < 1000000; i++); GPIO_SetBits(BLE_UART_RESET, BLE_UART_RESET_PIN); //RESET高 for(i = 0; i < 1000000; i++); //喚醒 GPIO_SetBits(BLE_UART_WAKEUP, BLE_UART_WAKEUP_PIN); //WAKE UP 高 for(i = 0; i < 1000000; i++); GPIO_ResetBits(BLE_UART_WAKEUP, BLE_UART_WAKEUP_PIN); //WAKE UP 低 for(i = 0; i < 1000000; i++); //等待INT的低脈衝 while(gBLE_Uart_IntPulse == BLE_UART_INTPULSE_IDLE); //低脈衝 gBLE_Uart_IntPulse = BLE_UART_INTPULSE_IDLE; //清空脈衝計數 while(!GPIO_ReadInputDataBit(BLE_UART_INT, BLE_UART_INT_PIN));//等待INT被拉高 /**********串列埠測試***************/ //發現串列埠測試指令 memset(gGUA_USART2_rx_buf, 0xff, GUA_USART2_RX_SIZE); gGUA_USART2_tx_buf[0] = 0x41; gGUA_USART2_tx_buf[1] = 0x54; gGUA_USART2_tx_buf[2] = 0x0d; gGUA_USART2_tx_buf[3] = 0x0a; GUA_USARTx_Send(USART2, gGUA_USART2_tx_buf, 4); //接收完畢 while(!GPIO_ReadInputDataBit(BLE_UART_INT, BLE_UART_INT_PIN));//等待INT被拉高 gBLE_Uart_IntPulse = BLE_UART_INTPULSE_IDLE; //清空脈衝計數 while(function != FUNC_AT_OK); //等待串列埠資料接收完畢 function = FUNC_IDLE_EVENT; //置位 /*********設定從模式***************/ //傳送設定從模式指令 memset(gGUA_USART2_rx_buf, 0xff, GUA_USART2_RX_SIZE); gGUA_USART2_tx_buf[0] = 0x41; gGUA_USART2_tx_buf[1] = 0x54; gGUA_USART2_tx_buf[2] = 0x2b; gGUA_USART2_tx_buf[3] = 0x53; gGUA_USART2_tx_buf[4] = 0x45; gGUA_USART2_tx_buf[5] = 0x54; gGUA_USART2_tx_buf[6] = 0x3d; gGUA_USART2_tx_buf[7] = 0x31; gGUA_USART2_tx_buf[8] = 0x0d; gGUA_USART2_tx_buf[9] = 0x0a; GUA_USARTx_Send(USART2, gGUA_USART2_tx_buf, 10); //接收完畢(兩個OK應答) while(!GPIO_ReadInputDataBit(BLE_UART_INT, BLE_UART_INT_PIN));//等待INT被拉高 gBLE_Uart_IntPulse = BLE_UART_INTPULSE_IDLE; //清空脈衝計數 while(function != FUNC_AT_OK); //等待串列埠資料接收完畢 function = FUNC_IDLE_EVENT; //置位 while(!GPIO_ReadInputDataBit(BLE_UART_INT, BLE_UART_INT_PIN));//等待INT被拉高 gBLE_Uart_IntPulse = BLE_UART_INTPULSE_IDLE; //清空脈衝計數 while(function != FUNC_AT_OK); //等待串列埠資料接收完畢 function = FUNC_IDLE_EVENT; //置位 /*********進入透傳模式***************/ //傳送透傳模式指令 memset(gGUA_USART2_rx_buf, 0xff, GUA_USART2_RX_SIZE); gGUA_USART2_tx_buf[0] = 0x41; gGUA_USART2_tx_buf[1] = 0x54; gGUA_USART2_tx_buf[2] = 0x2b; gGUA_USART2_tx_buf[3] = 0x4d; gGUA_USART2_tx_buf[4] = 0x4f; gGUA_USART2_tx_buf[5] = 0x44; gGUA_USART2_tx_buf[6] = 0x45; gGUA_USART2_tx_buf[7] = 0x3d; gGUA_USART2_tx_buf[8] = 0x44; gGUA_USART2_tx_buf[9] = 0x41; gGUA_USART2_tx_buf[10] = 0x54; gGUA_USART2_tx_buf[11] = 0x41; gGUA_USART2_tx_buf[12] = 0x0d; gGUA_USART2_tx_buf[13] = 0x0a; GUA_USARTx_Send(USART2, gGUA_USART2_tx_buf, 14); //接收完畢 while(!GPIO_ReadInputDataBit(BLE_UART_INT, BLE_UART_INT_PIN));//等待INT被拉高 gBLE_Uart_IntPulse = BLE_UART_INTPULSE_IDLE; //清空脈衝計數 while(function != FUNC_AT_OK); //等待串列埠資料接收完畢 function = FUNC_IDLE_EVENT; //置位 }

2)編寫驅動標頭檔案BLE_Uart.h(存放在“……\HARDWARE”)

相關推薦

STM32STM32模組科技HY-254124 V8

//****************************************************************************** //name: BLE_Uart.c //introduce: 藍芽串

BLE模組--nrf51822模組--模組

一、概述 使用者的MCU 通過通用串列埠(UART)跟模組進行連線,可實現和移動智慧裝置進行資料的雙向通訊。模組接收到來自使用者CPU 串列埠的資料後,將自動轉發給移動智慧裝置;移動智慧裝置可以通過APP 傳送資料到模組,模組將收到的資料通過串列埠傳送給使用者的MCU。

TL8266APP接收模組傳送過來的訊息

前一篇文章講述瞭如何向藍芽模組傳送資料,這一篇講述如何接收資料,點選開關按鈕傳送AT指令,模組會返回OK 先做一個廣播接收器,按Ctrl+F關注mBluetoothLeService的操作 public class BleAtActivity ext

拆解米家溫溼度計,看看內部用什麼晶片實現的

首先看到的還是小米家族一貫的黑色PCB風格,我們先確定下晶片型號:BLE-MCU: NRF51802Sensor: SHT30Boost IC: TPS610985(絲印1G,應該是)LCD Driver: BU9795怎麼樣,各位磚家們,評論下吧!歡迎關注晶片之家微信公眾號

android studio

藍芽透傳 關於藍芽透傳,基本步驟如下: 1、設定藍芽許可權 2、開啟藍芽 3、藍芽搜尋 4、藍芽連線與通訊 測試使用android4.4版本手機與藍芽4.0硬體模組; 1、設定藍芽許可權(android6.0以下) 藍芽許可權在AndroidMa

模擬 基於TOA的定位演算法效能分析不同接收站數量下的比較

研究接收機數量對SNR = 30 dB的非線性和線性方法的MSPE效能的影響。 從最小數量的感測器開始,即L = 3,它們的位置是(0,0),(10,0)和(10,10)。 然後將具有座標(0,10),(0,5),(5,0),(10,5)和(5,10)的接收器連續新增到L = 8。未知源位於 (

MATLAB 通過案例學會編寫一個 matlab 函式小貓掉進山洞問題

這是關於matlab學習的第一篇博文,我是不願意承認自己不會MATLAB的,因為這東西大一的時候就學過,如果白駒過隙,都不好意思說自己研幾了,科研的過程中MATLAB是必須要會的,於是得系統的看一下了。自己什麼**水平自己又不是不清楚。 問題提出: 一隻失明的小貓掉進山

Android BLE學習:編寫自己的 BLE讀寫工具功能仿照nrf master control panel

背景 由於nordic官方的nrf master control panel只提供了apk,很多同學學習起來都得自己摸索藍芽的讀寫,專案中整理了BLE模組的基本讀寫方法以及一些常用的UUID,並且抽取了一些藍芽操作的流程,方便Android app程式碼開發,

BZOJ4032[HEOI2015]最短不公共子串後綴自動機,序列自動機

公共子串 com 構建 同時存在 ast can class ble print 【BZOJ4032】[HEOI2015]最短不公共子串(後綴自動機,序列自動機) 題面 BZOJ 洛谷 題解 數據範圍很小,直接暴力構建後綴自動機和序列自動機,然後直接在兩個自動機上進行\(b

STM32 Net MF開發板學習-20遙控智慧小車手機模式

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

常用模組HC-05串列埠通訊模組使用詳解例項:手機控制STM32微控制器

HC-05藍芽串列埠通訊模組應該是使用最廣泛的一種藍芽模組之一了。為什麼呢?因為HC05模組是一款高效能主從一體藍芽串列埠模組,可以不用知道太多藍芽相關知識就可以很好的上手。說白了,只是個藍芽轉串列埠的裝置,你只要知道串列埠怎麼程式設計使用,就可以了,實現了所謂的透明傳輸。但

STM32STM32timer3產生PWM

//****************************************************************************** //name: GUA_Timer3_PWM.c

STM32STM32限位開關

五、基礎知識 1、限位開關是什麼? 答:限位開關其實就是會復原開關的開關按鍵。 也就是說按下限位開關的開關能觸發STM32的IO中斷,而鬆開手指時限位開關會復原。 2、限位開關有什麼用? 答:通常被用於限制電機轉動角度來使用。 例如兩個限位開關形成45°的夾角,一旦電機轉動觸發任意其中一個限

記錄STM32學習第一個程式點亮LED

STM32學習之第一個程式(點亮LED) 開發板:Nucelo L053R8 芯 片:STM32L053R8 軟 件:IAR for ARM 7.4, STM32CubeL0 程式碼示例

STM32STM32電量採集

//****************************************************************************** //name: GUA_ADC1.c //introduce:

STM32STM32霍爾感測器模組

1、霍爾感測器是什麼? 答:霍爾感測器是根據霍爾效應制作的一種磁場感測器。 用磁鐵去靠近霍爾感測器時,霍爾感測器的引腳電平會產生變化。 2、霍爾感測器主要用在什麼地方? 答:霍爾感測器可測速、計數、限位上。 舉例限位功能:兩個霍爾感測器形成45°的夾角,電機邊緣粘著一個磁鐵,一旦電機轉動導致

DebugSTM32 HardFault_Handler 故障

          3、還是將中斷函式修改,列印中斷時的一些資訊: HardFault_Hander()定義如下: void HardFault_Handler(void) {   uint

STM32SPI的基本原理、庫函式SPI一般步驟

《STM32中文參考手冊V10》-第23章 序列外設介面SPI SPI的基本介紹 SPI的簡介 SPI,是英語Serial Peripheral interface的縮寫,顧名思義就是序列外圍裝置介面,是Motorola首先在其MC68HCXX系列處理器上定義

STM32STM32啟動方式

在少量晶片程式下載時,用JLINK或SWD的下載方式比較繁瑣,串列埠下載配合正點原子的FLYMCU比較快捷,STM32的串列埠下載時候需要注意MCU的啟動方式。在復位時,會按照boot的狀態判斷進入哪種模式,boot腳不用保持長狀態。在根據STM407參考手冊來看,STM32

STM32STM32 MCU系列介紹

STM32-32 微控制器(MCU)家族 系列 MCU 主流級別MCU STM32 F0系列-ARM Cortex-M0入門級MCU STM32 F1系列-A