【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”)
相關推薦
【STM32】STM32之藍芽透傳模組(昇潤科技HY-254124 V8)
//****************************************************************************** //name: BLE_Uart.c //introduce: 藍芽串
BLE透傳模組--nrf51822透傳模組--藍芽透傳模組
一、概述 使用者的MCU 通過通用串列埠(UART)跟模組進行連線,可實現和移動智慧裝置進行資料的雙向通訊。模組接收到來自使用者CPU 串列埠的資料後,將自動轉發給移動智慧裝置;移動智慧裝置可以通過APP 傳送資料到模組,模組將收到的資料通過串列埠傳送給使用者的MCU。
【TL8266】APP接收藍芽模組傳送過來的訊息
前一篇文章講述瞭如何向藍芽模組傳送資料,這一篇講述如何接收資料,點選開關按鈕傳送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模組是一款高效能主從一體藍芽串列埠模組,可以不用知道太多藍芽相關知識就可以很好的上手。說白了,只是個藍芽轉串列埠的裝置,你只要知道串列埠怎麼程式設計使用,就可以了,實現了所謂的透明傳輸。但
【STM32】STM32之timer3產生PWM
//****************************************************************************** //name: GUA_Timer3_PWM.c
【STM32】STM32之限位開關
五、基礎知識 1、限位開關是什麼? 答:限位開關其實就是會復原開關的開關按鍵。 也就是說按下限位開關的開關能觸發STM32的IO中斷,而鬆開手指時限位開關會復原。 2、限位開關有什麼用? 答:通常被用於限制電機轉動角度來使用。 例如兩個限位開關形成45°的夾角,一旦電機轉動觸發任意其中一個限
【記錄】STM32學習之第一個程式(點亮LED)
STM32學習之第一個程式(點亮LED) 開發板:Nucelo L053R8 芯 片:STM32L053R8 軟 件:IAR for ARM 7.4, STM32CubeL0 程式碼示例
【STM32】STM32之電量採集
//****************************************************************************** //name: GUA_ADC1.c //introduce:
【STM32】STM32之霍爾感測器模組
1、霍爾感測器是什麼? 答:霍爾感測器是根據霍爾效應制作的一種磁場感測器。 用磁鐵去靠近霍爾感測器時,霍爾感測器的引腳電平會產生變化。 2、霍爾感測器主要用在什麼地方? 答:霍爾感測器可測速、計數、限位上。 舉例限位功能:兩個霍爾感測器形成45°的夾角,電機邊緣粘著一個磁鐵,一旦電機轉動導致
【Debug】STM32 HardFault_Handler 故障
3、還是將中斷函式修改,列印中斷時的一些資訊: HardFault_Hander()定義如下: void HardFault_Handler(void) { uint
【STM32】SPI的基本原理、庫函式(SPI一般步驟)
《STM32中文參考手冊V10》-第23章 序列外設介面SPI SPI的基本介紹 SPI的簡介 SPI,是英語Serial Peripheral interface的縮寫,顧名思義就是序列外圍裝置介面,是Motorola首先在其MC68HCXX系列處理器上定義
【STM32】STM32啟動方式
在少量晶片程式下載時,用JLINK或SWD的下載方式比較繁瑣,串列埠下載配合正點原子的FLYMCU比較快捷,STM32的串列埠下載時候需要注意MCU的啟動方式。在復位時,會按照boot的狀態判斷進入哪種模式,boot腳不用保持長狀態。在根據STM407參考手冊來看,STM32
【STM32】STM32 MCU系列介紹
STM32-32 微控制器(MCU)家族 系列 MCU 主流級別MCU STM32 F0系列-ARM Cortex-M0入門級MCU STM32 F1系列-A