历史上的今天
今天是:2025年01月29日(星期三)
2020年01月29日 | STM32之蓝牙透传模块(昇润科技HY-254124 V8)
2020-01-29 来源:eefocus
一、简介
本文介绍如何使用STM32控制蓝牙透传模块,蓝牙透传模块使用昇润科技的HY-254124 V8。
二、实验平台
库版本:STM32F10x_StdPeriph_Lib_V3.5.0
编译软件:MDK4.53
硬件平台:STM32开发板(主芯片stm32f103c8t6)
仿真器:JLINK
三、版权声明
四、实验前提
在进行本文步骤前,请先阅读并实现以下博文:
1、《STM32之NVIC》:http://blog.csdn.net/feilusia/article/details/52819709
2、《STM32之串口》:http://blog.csdn.net/feilusia/article/details/52819571
五、基础知识
1、蓝牙透传模块是什么?
答:蓝牙透传模块上有两个接口:UART/IIC/SPI、蓝牙,可对连接这两个接口的设备进行数据透传。
例如STM32与蓝牙透传模块通过串口连接、蓝牙透传模块与手机app通过蓝牙连接,则当手机app发送一串数据给蓝牙透传模块后,这串数据会被STM32收到。以此达到手机app控制STM32的作用。
2、为什么要用蓝牙透传模块,而不直接使用蓝牙芯片?
答:
1)蓝牙透传模块
①优点:快速开发、不用做蓝牙认证。
②缺点:模块成本高。
2)直接使用蓝牙芯片
①优点:成本低、板子尺寸能做更小。
②缺点:有一定开发难度、需要蓝牙认证。
3、蓝牙透传模块如何使用?
答:
1)硬件接口
本次使用的模块上有SPI、IIC、UART三种接口,香瓜选择其中的UART。
硬件接口上需要控制以下几个引脚:

其中REST是复位脚、串口接口使用RX和TX、WAKEUP是唤醒脚、INT是模块响应脚,以及电源GND和VCC。
REST不是必须进行控制的,但进行控制REST可方便仿真调试,否则仿真时需要手动拔插模块进行复位。
2)初始化流程
①通过控制REST对模块进行复位。
②通过控制WAKEUP对模块进行唤醒。
③等待INT中断应答。
④通过测试指令进行测试收发指令。
⑤设置蓝牙透传模块为主模式或从模式。
⑥设置蓝牙透传模块为透传模式。
⑦此时即可进行数据透传。
3)使用注意事项
①昇润的文档有误,只有在唤醒后才会INT中断应答。
②蓝牙透传数据包一包仅有17字节的应用数据可使用。
五、实验步骤
1、编写并添加串口透传模块驱动
1)编写驱动BLE_Uart.c(存放在“……HARDWARE”)
//******************************************************************************
//name: BLE_Uart.c
//introduce: 蓝牙串口透传驱动
//author: 甜甜的大香瓜
//email: 897503845@qq.com
//QQ group 香瓜单片机之STM8/STM32(164311667)
//changetime: 2016.10.17
//******************************************************************************
#include "stm32f10x.h"
#include "BLE_Uart.h"
#include "GUA_USART.h"
#include #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: 897503845@qq.com //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: 897503845@qq.com //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: 897503845@qq.com //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); //等待串口数据接收完毕
上一篇:STM32之SWD
下一篇:STM32之限位开关
史海拾趣
|
LM567通用音调译码器集成电路的应用 资料来源:http://www.qlmcu.com/567为通用音调译码器,当输入信号于通带内时提供饱和晶体管对地开关,电路由I与Q检波器构成,由电压控制振荡器驱动振荡器确定译码器中心频率。用外接元件独立设定中心频率带 ...… 查看全部问答> |
|
2007年全国大学生电子设计竞赛 讨论专用帖(附加了几道与公布器件相关的题目、附加 本帖最后由 paulhyde 于 2014-9-15 08:57 编辑 2007年全国大学生电子设计竞赛马上拉开帷幕根据清单可以猜测很多题目。有需要的话大家踊跃讨论。附2007年全国赛元件清单: 1、基本仪器清单 20MHz普通示波器(双通道,外触发输入,有X轴输入,可选 ...… 查看全部问答> |
|
ThinkPad要出上网本的消息已成板上钉钉的事实,今日曝光的产品外观、配置等资料已表明此产品正在有条不紊的进行中。从此次爆出的详细消息看,ThinkPad X100e上网本并不是只有黑白两款颜色,还包含了另外一款红色外观的产品,当然硬件配置是相同的。 ...… 查看全部问答> |
|
全球首创内置三级管的非隔离LED恒流驱动QX6102/20W 概述 QX6102是一款内置NPN功率三极管,具有自供电功能的高精度降压型大功率LED恒流驱动芯片,适用于交流85V到265V全范围输入电压的非隔离LED恒流驱动电源。芯片采用自供电结构,无需辅助绕组,内置NPN三极管,提供高性价比。专利的高端电流检测、 ...… 查看全部问答> |
|
我的反激变换器,在输出带负载的情况下,辅助绕组VCC的电压为12V,可是当空载的时候,辅助绕组VCC的电压只有10V了,请问这是什么原因呢? … 查看全部问答> |




