历史上的今天
今天是:2025年01月29日(星期三)
2020年01月29日 | STM32之蓝牙透传模块(迅通科技PTR5518)
2020-01-29 来源:eefocus
一、简介
本文介绍如何使用STM32控制蓝牙透传模块,蓝牙透传模块使用迅通科技的PTR5518。
二、实验平台
库版本:STM32F10x_StdPeriph_Lib_V3.5.0
编译软件:MDK4.53
硬件平台:STM32开发板(主芯片stm32f103c8t6)
仿真器:JLINK
手机型号: 小米4S
安卓版本:安卓5.1
安卓app:BLE Tool
三、版权声明
四、实验前提
1、在进行本文步骤前,请先阅读以下博文:
1)《STM32之蓝牙透传模块(昇润科技)》:http://blog.csdn.net/feilusia/article/details/52838571
2、在进行本文步骤前,请先实现以下博文:
1)《STM32之NVIC》:http://blog.csdn.net/feilusia/article/details/52819709
2)《STM32之串口》:http://blog.csdn.net/feilusia/article/details/52819571
3)《STM32之系统滴答定时器》:http://blog.csdn.net/feilusia/article/details/52835711
五、基础知识
1、本文使用的蓝牙透传模块是什么?
答:本文使用的蓝牙透传模块是迅通科技的PTR5518。
该模块采用NORDIC公司的Cortex-M0内核芯片nRF51822、模块封装尺寸为15.2×15.2mm,并且通过了BQB 认证、 FCC 认证、CE 认证。
2、如何使用该蓝牙透传模块?
答:
1)硬件
使用到的引脚是1(EN:唤醒与睡眠)、2(TX:模块串口发送)、3(RX:模块串口接收)、8(NTF:连接状态查询)、
9(GND:模块地)、10(VCC:模块电源正极1.8~3.6V)、11(REST:模块复位)、13(FLOW:忙闲状态查询)
2)软件
①初始化IO
②复位模块
③唤醒模块
3、PTR5518(讯通科技)与HY-254124 V8(昇润科技)有什么区别?
答:
1)芯片
①PTR5518(讯通科技)
使用的是32bit的Cortex-M0内核芯片nRF51822。
②HY-254124 V8(昇润科技)
使用的是8bit的51内核芯片CC2541。
2)价格
①PTR5518(讯通科技)

②HY-254124 V8(昇润科技)
3)认证
①PTR5518(讯通科技)
通过了蓝牙联盟BQB 认证、美国FCC 认证、欧洲CE 认证。
②HY-254124 V8(昇润科技)
通过了蓝牙联盟BQB 认证。
4)使用
①PTR5518(讯通科技)
上电并配置好IO口即能广播,使用方便。
②HY-254124 V8(昇润科技)
需要AT指令进行配置,使用较繁琐。
六、实验步骤
注:以下为核心代码及步骤,报错及缺少文件的可自行修改、添加。
1、编写并添加串口透传模块驱动
1)编写驱动GUA_BLE_Uart.c(存放在“……HARDWARE”)
//******************************************************************************
//name: GUA_BLE_Uart.c
//introduce: 蓝牙串口透传驱动(讯通科技)
//author: 甜甜的大香瓜
//email: 897503845@qq.com
//QQ group 香瓜单片机之STM8/STM32(164311667)
//changetime: 2017.01.15
//******************************************************************************
#include "stm32f10x.h"
#include "GUA_BLE_Uart.h"
#include "GUA_SysTick.h"
#include "GUA_USART.h"
#include /*********************宏定义************************/ //引脚宏定义 //INT #define GUA_BLE_UART_INT_PORT GPIOA #define GUA_BLE_UART_INT_PIN GPIO_Pin_6 #define GUA_BLE_UART_INT_MODE GPIO_Mode_IPU //WAKEUP #define GUA_BLE_UART_WAKEUP_PORT GPIOA #define GUA_BLE_UART_WAKEUP_PIN GPIO_Pin_5 #define GUA_BLE_UART_WAKEUP_MODE GPIO_Mode_Out_PP //RESET #define GUA_BLE_UART_RESET_PORT GPIOA #define GUA_BLE_UART_RESET_PIN GPIO_Pin_0 #define GUA_BLE_UART_RESET_MODE GPIO_Mode_Out_PP //FLOW #define GUA_BLE_UART_FLOW_PORT GPIOA #define GUA_BLE_UART_FLOW_PIN GPIO_Pin_10 #define GUA_BLE_UART_FLOW_MODE GPIO_Mode_IPU //低功耗控制宏 #define GUA_BLE_UART_WAKEUP_STATE_HALT 0 #define GUA_BLE_UART_WAKEUP_STATE_ACTIVE 1 /*********************内部函数声明************************/ static void GUA_BLE_Uart_IO_Init(void); static void GUA_BLE_Uart_Reset(void); static void GUA_BLE_Uart_Wakeup(GUA_U8 nGUA_BLE_Uart_Wakeup_State); //****************************************************************************** //name: GUA_BLE_Uart_IO_Init //introduce: 蓝牙串口模块的IO初始化 //parameter: none //return: none //author: 甜甜的大香瓜 //email: 897503845@qq.com //QQ group 香瓜单片机之STM8/STM32(164311667) //changetime: 2017.01.15 //****************************************************************************** static void GUA_BLE_Uart_IO_Init(void) { //IO结构体 GPIO_InitTypeDef GPIO_InitStructure; //时钟使能 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //RESET配置 GPIO_WriteBit(GUA_BLE_UART_RESET_PORT, GUA_BLE_UART_RESET_PIN, Bit_SET); //RESET高 GPIO_InitStructure.GPIO_Pin = GUA_BLE_UART_RESET_PIN; GPIO_InitStructure.GPIO_Mode = GUA_BLE_UART_RESET_MODE; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GUA_BLE_UART_RESET_PORT, &GPIO_InitStructure); //WAKEUP配置 GPIO_WriteBit(GUA_BLE_UART_WAKEUP_PORT, GUA_BLE_UART_WAKEUP_PIN, Bit_SET); //WAKE UP高 GPIO_InitStructure.GPIO_Pin = GUA_BLE_UART_WAKEUP_PIN; GPIO_InitStructure.GPIO_Mode = GUA_BLE_UART_WAKEUP_MODE; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GUA_BLE_UART_WAKEUP_PORT, &GPIO_InitStructure); //INT配置 GPIO_InitStructure.GPIO_Pin = GUA_BLE_UART_INT_PIN; GPIO_InitStructure.GPIO_Mode = GUA_BLE_UART_INT_MODE; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GUA_BLE_UART_INT_PORT, &GPIO_InitStructure); //FLOW配置 GPIO_InitStructure.GPIO_Pin = GUA_BLE_UART_FLOW_PIN; GPIO_InitStructure.GPIO_Mode = GUA_BLE_UART_FLOW_MODE; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GUA_BLE_UART_FLOW_PORT, &GPIO_InitStructure); } //****************************************************************************** //name: GUA_BLE_Uart_Reset //introduce: 蓝牙串口模块复位 //parameter: none //return: none //author: 甜甜的大香瓜 //email: 897503845@qq.com //QQ group 香瓜单片机之STM8/STM32(164311667) //changetime: 2017.01.15 //****************************************************************************** static void GUA_BLE_Uart_Reset(void) { //复位异常,暂时不作复位处理 /* GPIO_WriteBit(GUA_BLE_UART_RESET_PORT, GUA_BLE_UART_RESET_PIN, Bit_RESET); //RESET低 GUA_Delay_Us(100000); GPIO_WriteBit(GUA_BLE_UART_RESET_PORT, GUA_BLE_UART_RESET_PIN, Bit_SET); //RESET高 */ } //****************************************************************************** //name: GUA_BLE_Uart_Wakeup //introduce: 蓝牙串口模块复位 //parameter: nGUA_BLE_Uart_Wakeup_State: GUA_BLE_UART_WAKEUP_STATE_HALT or GUA_BLE_UART_WAKEUP_STATE_ACTIVE //return: none //author: 甜甜的大香瓜 //email: 897503845@qq.com //QQ group 香瓜单片机之STM8/STM32(164311667) //changetime: 2017.01.15 //****************************************************************************** static void GUA_BLE_Uart_Wakeup(GUA_U8 nGUA_BLE_Uart_Wakeup_State) { //复位异常,暂时不作复位处理 /* //开启低功耗 if(nGUA_BLE_Uart_Wakeup_State == GUA_BLE_UART_WAKEUP_STATE_HALT) { GPIO_WriteBit(GUA_BLE_UART_WAKEUP_PORT, GUA_BLE_UART_WAKEUP_PIN, Bit_SET); //WAKE UP高 } //关闭低功耗 else { GPIO_WriteBit(GUA_BLE_UART_WAKEUP_PORT, GUA_BLE_UART_WAKEUP_PIN, Bit_RESET); //WAKE UP低 } */ } //****************************************************************************** //name: GUA_BLE_Uart_AT_Cmd //introduce: 蓝牙串口模块AT指令处理 //parameter: npGUA_BLE_Uart_AT_Cmd: 指令首地址 // nGUA_Num: 数据长度 //return: none //author: 甜甜的大香瓜 //email: 897503845@qq.com //QQ group 香瓜单片机之STM8/STM32(164311667) //changetime: 2017.01.15 //****************************************************************************** void GUA_BLE_Uart_AT_Cmd(GUA_U8 *pGUA_BLE_Uart_AT_Cmd, GUA_U8 nGUA_Num) { GUA_U8 aAT_STRS_Buf[7] = "AT+STRS"; GUA_U8 aAT_ADST_Buf[7] = "AT+ADST"; //如果是1、软件复位 if(memcmp(aAT_STRS_Buf, pGUA_BLE_Uart_AT_Cmd, nGUA_Num) == 0) { } //如果是2、广播状态 else if(memcmp(aAT_ADST_Buf, pGUA_BLE_Uart_AT_Cmd, nGUA_Num - 1) == 0) { } //需要用到的后面自己补上 } //******************************************************************************
史海拾趣
|
一、TPMS技术及其轮胎定位原理 TPMS原理及功能简介:TPMS是汽车轮胎压力检测系统,即“Tire Pressure Monitoring System”的英文缩写。主要用于在汽车行驶时,适时地对轮胎气压进行自动监测,对轮胎漏气造成低胎压和高温高胎压防爆胎进行预 ...… 查看全部问答> |
|
国外的有几个公司但好像没有见到国内的,不知什么原因是技术瓶颈还是国内不屑微小的市场份额????asn.1 到JAVA或者到c 语言的商用编译器哪个好?一般什么价位?望大虾指教,感激不尽… 查看全部问答> |
|
最近在做一个双电源的51系统,是用来控制一个机器人的,电机比较多. 第一次做板,而且制板费昂贵,还是处于学生阶段的小弟希望以小心为上.. 我用的软件是Altium Designer 6.9 1.滴泪是为了防止在转孔时导线和焊接盘断裂,那么是否一定要加滴泪呢? 2. ...… 查看全部问答> |
|
大家好! WinCE 中 OCX的调用问题? Primary dispatch interface 的接口的GUID是不是需要DllRegisterServer的注册,如果需要,怎么注册,不需要的话,外部网页怎 ...… 查看全部问答> |
|
SD卡问题:同样的卡在经过多次Suspend/Resume后存储管理部分读到不同的ID值 如题,在使用同样一张卡,并且在操作过程中卡始终是在设备中的。 在多次Suspend/Resume之后发现会出现通过IOCTL_DISK_GET_STORAGEID读到的ID和之前的不同。 那位曾经遇到过这类问题。… 查看全部问答> |
|
用Visual Studio2008 新建了一个智能设备中的MFC智能设备应用程序。跟EVC建立的MFC应用程序比较了一下,发现vs2008的代码模板好麻烦啊,而且好像不是消息处理机制了,那么在EVC上使用的代码能在VS2008运行吗?现在的教材都是在EVC上开发的,一用vs2 ...… 查看全部问答> |
|
我用CF作为启动盘,通过网络启动VxWorks,我已经用MkBoot将CF做成启动盘了,请问CF中是否已经包含了文件系统?还是需要另外再安装相应的文件系统呢?我想在CF卡中创建一个文本文件,肯定需要文件系统的吧!请大侠们指点小弟,不胜感激!… 查看全部问答> |
|
本帖最后由 paulhyde 于 2014-9-15 09:40 编辑 刚才得知自己被选到学校的全国电设大赛校队了,今年暑假集训,由于大二只有自己一个,呵呵,想请教一哈参加过的前辈们该学点什么,已掌握multisim,protel,proteus,擅长汇编,(但据说c语言更好) ...… 查看全部问答> |




