一、简介
本文介绍如何使用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之限位开关
推荐阅读最新更新时间:2024-11-01 11:59
设计资源 培训 开发板 精华推荐
- MMA7361模块(程序+原理图+芯片资料).zip
- EVAL-CN0399-SDPZ,评估套件基于 ADL5904 DC 至 6 GHz、45 dB TruPwr 检测器,具有包络阈值检测功能
- 使用 Richtek Technology Corporation 的 RT7299B 的参考设计
- 用于微处理器复位电路的 NCP301HSN22T1 2.2V 电压检测器的典型应用
- EVAL-ADF7012DB5,ADF7012 ISM 频段发射器评估板,单芯片低功耗 UHF 发射器
- C3247486_CP2102N-A02芯片方案验证板
- AD9121-M5375-EBZ,用于 AD9121 双通道、14 位、1230 MSPS 数模转换器的评估板
- MIni教学开发板
- LT3973EDD 1.21V 降压转换器的典型应用
- 用于电池充电器的 5.2V DC 至 DC 单路输出电源
- e络盟大讲堂—告别冗长的手动测试
- 免费测评|涂鸦三明治Wi-Fi&BLE 开发板
- 有奖直播|TI Sitara™ 产品在智能电网中的应用
- 有奖直播:新科技、新课堂、新学期~ ADI软件定义无线电ADALM-Pluto入门实战
- 下载MPS汽车电机控制技术干货,赢【Keep体脂秤、自动洗手机套装、小米保温杯】,开启汽车技术进阶之旅!
- 直播已结束|Molex 和 TTI 更小型、高速、可靠的连接器推动物联网应用的新发展
- 【EE团】开抢啦!!!TI超值工业级模拟器件套装芯片再次登场!!!
- 有奖直播:Microchip适用于CryptoAuthentication™系列的可信任平台
- 基于USB PD受电协议芯片CH224 DIY创意秀
- TI EP类课程年度精选出炉,推荐分享赢好礼!