历史上的今天
返回首页

历史上的今天

今天是: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之限位开关

推荐阅读

史海拾趣

Babcock Inc公司的发展小趣事

随着公司的发展壮大,Babcock开始注重品牌建设和企业文化建设。通过加强品牌宣传和推广,提升公司的知名度和美誉度;同时,公司还注重培养员工的归属感和忠诚度,营造积极向上的工作氛围。这些举措不仅提升了公司的软实力,也为公司的长远发展提供了有力保障。

这五个故事展示了Babcock Inc公司在电子行业中的发展历程和取得的成就。通过技术创新、市场拓展、国际合作以及品牌建设等方面的努力,Babcock逐渐成为了电子行业中的佼佼者,为行业的发展做出了积极贡献。

General Cable公司的发展小趣事
内部集成振荡器与定时发生器、地址产生电路、控制逻辑电路和编码产生电路等,最多可提供12位地址或6位数据编码,提供高达531441(3^12)种码,适用于复杂的遥控系统。
Antiference公司的发展小趣事

近年来,随着物联网、5G等技术的快速发展,电子行业面临着巨大的变革。Antiference公司敏锐地捕捉到这一趋势,及时调整战略方向,将研发重点转向物联网设备的电磁兼容性研究。通过不断创新和优化产品,Antiference成功抓住了物联网发展的机遇,实现了业务的快速增长。

Aromat Corp公司的发展小趣事

在电子行业快速发展的背景下,Aromat Corp始终坚持创新引领的发展理念。公司不断投入研发资源,推出了一系列具有创新性的电子产品。这些产品不仅满足了市场的多样化需求,还为公司带来了可观的利润增长。同时,Aromat Corp还注重知识产权保护,积极申请专利,保护公司的创新成果。

CHENMKO公司的发展小趣事

随着产品技术的成熟,Aromat Corp开始积极拓展市场。公司加大了对营销和宣传的投入,通过参加行业展会、举办产品发布会等方式提升品牌知名度。同时,Aromat Corp还积极与合作伙伴建立战略合作关系,共同开拓市场,进一步扩大了公司的市场份额。

Consolidated Wire公司的发展小趣事

在电子行业的早期,Consolidated Wire公司以其出色的技术研发能力崭露头角。公司投入大量资源研发新型导电材料,成功推出了一种具有更高导电性能和更低电阻的新型线材。这一技术突破不仅提升了电子设备的性能,还降低了能耗,赢得了市场的广泛认可。随着新型线材的普及,Consolidated Wire公司的业务规模迅速扩大,逐渐在电子线材市场占据了领先地位。

问答坊 | AI 解惑

LM567通用音调译码器集成电路的应用

LM567通用音调译码器集成电路的应用 资料来源:http://www.qlmcu.com/567为通用音调译码器,当输入信号于通带内时提供饱和晶体管对地开关,电路由I与Q检波器构成,由电压控制振荡器驱动振荡器确定译码器中心频率。用外接元件独立设定中心频率带 ...…

查看全部问答>

2007年全国大学生电子设计竞赛 讨论专用帖(附加了几道与公布器件相关的题目、附加

本帖最后由 paulhyde 于 2014-9-15 08:57 编辑 2007年全国大学生电子设计竞赛马上拉开帷幕根据清单可以猜测很多题目。有需要的话大家踊跃讨论。附2007年全国赛元件清单: 1、基本仪器清单 20MHz普通示波器(双通道,外触发输入,有X轴输入,可选 ...…

查看全部问答>

模拟技术是一门手艺

模拟技术是一门手艺,硬件工程师的功力全在画印制板上,就像厨师的功力全在火候上一样。电原理图就像菜谱,网上随处可找到。我们看了菜谱,但炒出的菜和厨师不一样,但菜的名字是一样的。我们可以在网上、杂志中找到各种原理图,按照原理图画出印制 ...…

查看全部问答>

博客大赛要开始啦!

各位论坛上的朋友们:         看着eeworld论坛上的工程师圈子不断扩大,不断提升,我们心里甚是欢喜~ 借此,我们也想趁着热乎气儿,举办一次规模庞大,专业性强的博客大赛,希望大家多多参与哦。现在这个活动正在 ...…

查看全部问答>

ThinkPad玩high了 联想将推彩色版上网本

ThinkPad要出上网本的消息已成板上钉钉的事实,今日曝光的产品外观、配置等资料已表明此产品正在有条不紊的进行中。从此次爆出的详细消息看,ThinkPad X100e上网本并不是只有黑白两款颜色,还包含了另外一款红色外观的产品,当然硬件配置是相同的。 ...…

查看全部问答>

无线视频传输

最近想搞一下无线传输,想无线传输视频信号,不过还没涉及过这一方面,听听大家的意见,用个什么片子好呢,,,,24L01?我看看大家都在用什么片子呢…

查看全部问答>

本版最近没什么人气啊,国赛将至

本帖最后由 paulhyde 于 2014-9-15 09:15 编辑 本版最近没什么人气啊,国赛将至  …

查看全部问答>

全球首创内置三级管的非隔离LED恒流驱动QX6102/20W

概述 QX6102是一款内置NPN功率三极管,具有自供电功能的高精度降压型大功率LED恒流驱动芯片,适用于交流85V到265V全范围输入电压的非隔离LED恒流驱动电源。芯片采用自供电结构,无需辅助绕组,内置NPN三极管,提供高性价比。专利的高端电流检测、 ...…

查看全部问答>

反激变换器的辅助绕组电压会随着空载和带载而变化

我的反激变换器,在输出带负载的情况下,辅助绕组VCC的电压为12V,可是当空载的时候,辅助绕组VCC的电压只有10V了,请问这是什么原因呢? …

查看全部问答>

恒压整流滤波器

搞认证谐波电流不过。230V AC输入,通过KBP610全波整流,然后LC无源滤波,输出的直流电压是不是300V DC左右? 因为负载需要的是230V DC的直流,怎么办? …

查看全部问答>