STM32之蓝牙透传模块(昇润科技HY-254124 V8)

发布者:SereneSpirit最新更新时间:2020-01-30 来源: eefocus关键字:STM32  蓝牙透传模块  HY-254124 手机看文章 扫描二维码
随时随地手机看文章

一、简介


本文介绍如何使用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);                                //等待串口数据接收完毕                                        

[1] [2]
关键字:STM32  蓝牙透传模块  HY-254124 引用地址:STM32之蓝牙透传模块(昇润科技HY-254124 V8)

上一篇:STM32之SWD
下一篇:STM32之限位开关

推荐阅读最新更新时间:2024-11-01 11:59

STM32学习之传感器篇——DHT11温湿度传感器
1、DHT11传感器简介 DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器,它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高的可靠性和卓越的长期稳定性。传感器包括一个电阻式感湿元件和一个NTC测温元件,并与一个高性能8位单片机相连接。因此该产品具有品质卓越、超快响应、抗干扰能力强、性价比极高等优点。每个DHT11传感器都在极为精确的湿度校验室中进行校准。校准系数以程序的形式存在OTP内存中,传感器内部在检测型号的处理过程中要调用这些校准系数。单线制串行接口,使系统集成变得简易快捷。超小的体积、极低的功耗,使其成为该类应用甚至最为苛刻的应用场合的最佳选择。产品为4针单排引脚封装,连接方便。
[单片机]
<font color='red'>STM32</font>学习之传感器篇——DHT11温湿度传感器
STM32定时器的预装寄存器以及影子寄存器话题
经常有人问起预装寄存器和影子寄存器的话题,其实STM32相关系列的手册里有介绍,有文档做介绍,这里借花献佛地一起分享下。 在谈预装寄存器及影子寄存器的差别前,不妨先对STM32定时器的时基单元做个基本了解。STM32各系列的定时器结构和框架基本是一样的,时基单元也一样。 下面时基单元是以STM32F3系列为参考。 时基单元中的TIMx_PSC、 TIM_ARR两个寄存器加上捕捉比较模块中TIMX_CCR寄存器,它们都可以动态修改。不过他们的修改和生效可能不在同一个时刻,这里便引入了预装寄存器及影子寄存器的概念。要记住一点,真正在TIMER模块中起作用的是影子寄存器。 1、用户程序对TIMx_PSC寄存器值的修
[单片机]
<font color='red'>STM32</font>定时器的预装寄存器以及影子寄存器话题
STM32的操作过程,寄存器配置与调试过程
很多学习stm32的,为什么学习stm32他也不知道,我们所知道的就是各个论坛讨论stm32的很多,而我们很多人之所以学习stm32是很多的淘宝卖家做了大量的图片文字宣传,于是我们经不住诱惑就买了板子,然后我们就开始了我们的学习之旅。 在淘宝卖家的眼里有着齐全的入门资料是板子的最大的卖点,于是当我们拿到开发板的时候,我们感觉我们永远不能和别人说自己熟悉stm32,因为脱离了网络的资料我们什么都做不了,这是我们最害怕的事情。 今天我就就像在这里记录下自己一无所有建立stm32工程的过程,是我自己的一个探索过程,同时也是大家互相交流的过程。 第一步:当然是新建一个工程我把它命名为small(这个随便你,青菜萝卜各有所爱……)
[单片机]
<font color='red'>STM32</font>的操作过程,寄存器配置与调试过程
基于STM32的机器人伺服控制器设计
引言 目前,机器人控制系统的研究重点在开放式、模块化控制系统等方面,机器人控制器的标准化和网络化已成为研究热点;同时,机器人伺服控制器的研究也具有很大的应用价值。在伺服通信方面,传统的基于模拟信号传输的集散控制系统需采用数/模转换器,系统构成复杂、分辨率低、可靠性得不到保障且难以扩展。为了解决此问题,本系统采用实时工业以太网EtherCAT协议作为机器人伺服系统的底层协议,同时构建伺服从站控制器。实时以太网技术简化了一般总线的互操作性和实时性等方面的问题,能满足控制网络传输的实时性要求,EtherCAT工业以太网技术以其网络实时性高、速度快、拓扑结构灵活等优点得到广泛关注。本控制器采用德国赫优讯公司开发的嵌入式实时以太网模块CO
[单片机]
基于<font color='red'>STM32</font>的机器人伺服控制器设计
stm32如何获取自己的ID号
一、函数。 void STM32_GetChipID(unsigned int *cID) { cID =*(vu32*)(0x1ffff7e8); cID =*(vu32*)(0x1ffff7ec); cID =*(vu32*)(0x1ffff7f0); } 二、可以用串口打印出来。 Printf( \r\nChip ID: %d, %d, %d\r\n , cID , cID , cID );
[单片机]
STM32低功耗模式简介
STM32F10xxx有三中低功耗模式: ●睡眠模式(Cortex?-M3内核停止,外设仍在运行) ●停止模式(所有的时钟都以停止) ●待机模式(1.8V电源关闭) 时钟频率72MHz时,从闪存执行代码,STM32功耗36mA,是32位市场上功耗最低的产品,相当于0.5mA/MHz。 上电,默认使用内部HSI时钟8M,经测试10mA左右。待机模式可实现系统的最低功耗。 可将电流消耗降至两微安。 在待机模式下,所有的I/O引脚处于高阻态,除了以下的引脚: ●复位引脚(始终有效) ●当被设置为防侵入或校准输出时的TAMPER引脚 ●被使能的唤醒引脚 /*按钮GPIOB9进入睡眠,WKUP pin(GPIOA0)唤
[单片机]
<font color='red'>STM32</font>低功耗模式简介
STM32 PWM周期与频率的计算
STM32 PWM周期与频率的计算 TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure; TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1; TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseInitStructure.TIM_Period = 100 - 1; //ARR 自动重装器的值 TIM_TimeBaseInitStructure.TIM_Prescaler = 72 - 1;
[单片机]
<font color='red'>STM32</font> PWM周期与频率的计算
关于STM32的USART的使用(一)--- 初始化过程
串口的使用过程,无非是正确的配置它的IO口的模式,然后在使用函数进行数据的发送或者接受。那么先来说一下STM32的串口初始化配置需要的过程吧。 贴一段代码,作为例子。(据我的理解,不管是M几的核,只要将下面这几个配置好,串口的IO模式就配置好了。) void uart_init(u32 bound) { GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved