历史上的今天
返回首页

历史上的今天

今天是:2025年01月30日(星期四)

2020年01月30日 | STM32之蓝牙透传模块(昇润科技HY-254124 V8)

2020-01-30 来源: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之限位开关

推荐阅读

史海拾趣

长江微电(cjiang)公司的发展小趣事

在发展过程中,长江微电始终坚持自主创新之路。公司注重人才培养和团队建设,积极引进高端人才和先进技术。同时,公司还建立了完善的研发体系和创新机制,鼓励员工发挥创新精神和创造力。通过自主创新,长江微电在电感产品领域取得了多项核心技术和专利成果,为公司的持续发展提供了强大动力。

以上五个故事分别从不同角度展现了长江微电(CJIANG)公司的发展历程和成就。这些故事不仅记录了公司的发展历程和成长轨迹,也彰显了其坚韧不拔、创新求变的精神和追求卓越、服务客户的理念。

Diconex公司的发展小趣事

在电子行业中,Diconex公司始终坚持以客户需求为导向的市场定位策略。公司深入调研市场需求,针对不同客户群体推出定制化解决方案。这种精准的市场定位使得Diconex的产品能够更好地满足客户需求,赢得了客户的信任和忠诚。同时,公司还积极拓展国际市场,与全球知名企业建立了长期稳定的合作关系。

EETools公司的发展小趣事

EETools公司成立于1992年,当时正值微处理器开发工具行业蓬勃发展的时期。公司创始人凭借对嵌入式系统产品的深刻理解和市场需求的敏锐洞察,决定投身于这一领域。EETools在硅谷的电子和计算机行业中心设立总部,迅速成为该地区的一颗新星。

在初创阶段,EETools专注于嵌入式系统产品的咨询和分销业务。通过与多家知名半导体厂商建立合作关系,EETools成功将各种高性能的嵌入式系统产品引入市场,满足了客户多样化的需求。同时,公司还积极研发自主品牌的嵌入式开发工具,为客户提供更为全面和专业的服务。

Fullywell Semiconductor Co Ltd公司的发展小趣事

为了进一步拓宽业务范围和提升技术实力,Fullywell在2015年进行了一次重要的收购。公司成功收购了某家专注于传感器技术的初创企业,将其先进的技术和产品线纳入麾下。这次收购不仅丰富了Fullywell的产品线,还使其在物联网、智能家居等新兴领域具备了更强的竞争力。随后,公司进行了业务整合,优化了资源配置,实现了优势互补,为公司的持续发展注入了新的动力。

Amaze Electronics Pte Ltd公司的发展小趣事

为了支撑公司的持续发展,Amaze Electronics高度重视人才培养。公司建立了完善的培训体系,为员工提供丰富的培训资源和学习机会。同时,公司还积极引进优秀人才,为研发团队注入新的活力。这些举措使得公司的研发团队不断壮大,为公司的技术创新和业务发展提供了有力保障。

EPC公司的发展小趣事

最后一家EPC公司深知创新是企业发展的核心动力。公司注重研发投入和人才培养,建立了专业的研发团队和完善的研发体系。公司不断跟踪行业发展趋势和技术动态,积极引进新技术、新工艺和新材料,推动产品升级和产业升级。同时,公司注重创新成果的转化和应用,将新技术、新工艺和新材料应用于实际项目中,提高了项目的竞争力和附加值。通过持续的创新和积累,公司逐渐在电子行业中形成了独特的技术优势和核心竞争力。

请注意,以上故事仅为框架性描述,并未包含具体的公司名称、项目细节和具体数字。您可以根据这些框架性描述进一步深入了解相关公司的发展情况,并结合实际案例进行具体分析和撰写。

问答坊 | AI 解惑

从零开始学模电系列讲座(力荐)

为了方便大家学习,特添加目录:后续不断更新中,敬请期待..... 第一讲: 电荷........................................1楼 第二讲:电流、电压、电阻和欧姆定律...................2楼 第三讲:电阻器的认识................................. ...…

查看全部问答>

Altera FPGACPLD设计 基础篇

Altera FPGACPLD设计 基础篇…

查看全部问答>

工作11年后,第二次跳槽,希望是最后一次跳槽

从99年入职通信行业,到2004入职电力电子行业,即将入职测控行业。每次行业跨度都还是比较大,大家有什么建议。…

查看全部问答>

光电耦合器的应用

光电耦合器具有体积小、使用寿命长、工作温度范围宽、抗干扰性能强.无触点且输入与输出在电气上完全隔离等特点,因而在各种电子设备上得到广泛的应用.光电耦合器可用于隔离电路、负载接口及各种家用电器等电路中.下面介绍最常见的应用电路. &n ...…

查看全部问答>

嵌入式

请问哪位知道在哪可以免费下载到《windows CE高级编程及其实例详解》一书啊?急需有关嵌入式方面的书籍,哪位高手可提供点意见!谢谢。。。…

查看全部问答>

请教 单片机 LCD显示驱动 AT89c52 20分敬上!!!

//LCD显示屏幕驱动 //2009-5-6 //------------------------------ #include \"AT89X52.H\" //通用常量 #define HIGH        1 #define LOW                0 #define TRUE&nbs ...…

查看全部问答>

关于VxWorks 2410BSP中rominit.s文件的问题,大家帮我看看吧!

最近从网上下载一个2410的BSP,我想分析并做修改,以便移植到新的平台。但是遇到一大堆问题,请高手帮忙看看!这是在roninit.s中的一些代码。 start:         LDR    r2, L$_S3C2410XWtcon      &n ...…

查看全部问答>

有个问题请教大家

本帖最后由 dontium 于 2015-1-23 13:35 编辑 我现在要用2812作产品,这就意味着要烧写flash,除了编写相应的cmd文件以外,在主程序里还需要加些什么吗? …

查看全部问答>

求助!多少分够60%??

三次测试,分别是10分,4分,22分,达到60%了吗?不是百分制,看起来很不直观啊…

查看全部问答>