历史上的今天
今天是:2024年09月01日(星期日)
2021年09月01日 | STM32—驱动BT-06蓝牙模块传输数据
2021-09-01
BT-06简介
BT06蓝牙模块是专为智能无线数据传输而打造,遵循V3.0 蓝牙规范。本模块支持UART接口,并支持SPP蓝牙串口协议,具有成本低、体积小、功耗低、收发灵敏性高等优点,只需配备少许的外围元件就能实现其强大功能。
BT-06蓝牙模块驱动简单,只需要4根线就可以驱动:
RXD
TXD
GND
VCC
将电源接在5V供电口上,TXD、RXD就是其数据传输的接口,BT-06是以串口的方式驱动的,只需要将蓝牙的TXD、RXD接口对应接在串口的RXD、TXD上,就可以进行数据传输。
数据透传
当BT-06上电,手机APP与蓝牙配对成功后,BT-06即进入数据透传模式。
数据透传:透传是指与传输网络的介质、调制解调方式、传输方式、传输协议无关的一种数据传送方式。数据透传即透明传送,是指在数据的传输过程中,通过无线的方式这组数据不发生任何形式的改变,仿佛传输过程是透明的一样,同时保证传输的质量,原封不动地到了最终接收者手里。
也就是说,连接好蓝牙后,从串口发送出的所有消息都可以原封不动的传输到手机APP中,注意!是原封不动,所以要想驱动BT-06,本质上是驱动串口来传输数据,所以接下来的主要任务就是驱动开发板上的串口进行数据传输。
配置串口
由于我是第一次搞蓝牙,所以比较谨慎,分了几步:
USART1作为向上位机打印调试信息的串口
USART2用来连接蓝牙接口,进行传输数据
USART1初始化函数
void USART1_Init( void )
{
USART_InitTypeDef USART_InitStruct;
GPIO_InitTypeDef GPIO_InitStruct;
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB, ENABLE );
RCC_APB2PeriphClockCmd( RCC_APB2Periph_USART1, ENABLE );/* 开启时钟 USART1在APB2总线 USART2在APB1总线 */
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
/* USART1 Tx:PA9 */
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;//复用输出
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_9;
GPIO_Init(GPIOA, &GPIO_InitStruct);
/* USART1 Rx:PA10 */
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_10;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空输入
GPIO_Init(GPIOA, &GPIO_InitStruct);
/* USART1配置 */
USART_InitStruct.USART_BaudRate = 9600;
USART_InitStruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
USART_InitStruct.USART_Mode = USART_Mode_Tx|USART_Mode_Rx;
USART_InitStruct.USART_Parity = USART_Parity_No;
USART_InitStruct.USART_StopBits = USART_StopBits_1;
USART_InitStruct.USART_WordLength = USART_WordLength_8b;
USART_Init(USART1, &USART_InitStruct);
/* 使能串口 */
/* 容易忽略 */
USART_Cmd( USART1, ENABLE );
}
USART2初始化函数
void USART2_Init( void )
{
USART_InitTypeDef USART_InitStruct;
GPIO_InitTypeDef GPIO_InitStruct;
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA , ENABLE );
RCC_APB1PeriphClockCmd( RCC_APB1Periph_USART2, ENABLE );
USART_DeInit(USART2);
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
/* USART2 Tx:PA2 */
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_2;
GPIO_Init(GPIOA, &GPIO_InitStruct);
/* USART2 Rx:PA3 */
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_3;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA, &GPIO_InitStruct);
/* USART2串口配置 */
USART_InitStruct.USART_BaudRate = 9600;
USART_InitStruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
USART_InitStruct.USART_Mode = USART_Mode_Tx|USART_Mode_Rx;//配置为发送和接收模式,实现发送接收数据
USART_InitStruct.USART_Parity = USART_Parity_No;
USART_InitStruct.USART_StopBits = USART_StopBits_1;
USART_InitStruct.USART_WordLength = USART_WordLength_8b;
USART_Init(USART2, &USART_InitStruct);
/* USART2的中断优先级配置 */
USART2_NVIC_Config();
/* 打开USART_IT_RXNE标志中断,即接收数据寄存器不为空中断,收到数据就进入中断 */
USART_ITConfig( USART2, USART_IT_RXNE, ENABLE );
/* 使能串口 */
USART_Cmd( USART2, ENABLE );
}
USART2的NVIC配置
/* USART2 的中断优先级配置,需要在中断中处理数据的接收 */
void USART2_NVIC_Config( void )
{
NVIC_InitTypeDef NVIC_InitStruct;
NVIC_PriorityGroupConfig( NVIC_PriorityGroup_2 );
NVIC_InitStruct.NVIC_IRQChannel = USART2_IRQn;
NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;
NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStruct.NVIC_IRQChannelSubPriority = 1;
NVIC_Init( &NVIC_InitStruct );
}
USART1串口重映射
/* USART1 的重映射 */
/* 1.勾选MicroLIB
2.添加头文件:stdio.h
*/
int fputc( int ch, FILE *f )
{
USART_SendData( USART1, ( uint8_t ) ch );
/* 等待发送完成 */
while( USART_GetFlagStatus( USART1, USART_FLAG_TXE) == RESET )
;
return ch;
}
史海拾趣
|
Verilog 的一本好书The Verilog Golden Reference Guide Verilog 的一本好书The Verilog Golden Reference Guide… 查看全部问答> |
|
集成产品开发流程(IPD),是一套进行产品开发管理的体系和方法,是业界流行的最佳实践,它的起源是美国80年代出现的PACE理论。CMM是软件成熟度模型,主要侧重于项目在研发过程中的管理,由美国SEI提出。项目管理则是一套通用的项目管理的方法,其 ...… 查看全部问答> |
|
【推荐】加拿大Elprotronic Inc 高速USB接口MSP430加密编程器 ZOGLAB(佐格微系统)代理的加拿大Elprotronic Inc MSP430编程器,这是一系列高速USB接口的MSP430编程器,60K标准16进制代码,使用JTAG模式下载仅仅需要3.5秒,通过BSL模式也仅仅需要6.3秒,这是目前TI网站上公布的最快的一款430FXXX系列编程器.它同时支持 ...… 查看全部问答> |
|
vs2005+wince下 BindingSource不能接收SqlCeDataReader? vs2005 pc下可以这样绑定数据: SqlCommand cmd=new SqlCommand(\"select * from table\", conn); SqlDataReader reader = cmd.ExecuteReader(); BindingSource1.datasource = reader; wince下就会报错:\"system.NotSupportException &nb ...… 查看全部问答> |
|
电子节能灯的十大经验定律 能灯电子镇流器的设计是照明行业设计的一大难点。很多厂家生产的产品由于质量不过关,给用户造成“节能不节钱”的现象,严重地影响了节能灯的声誉。这其中很大的部分问题是镇流器的质量不过关,镇流器的质量首先是和电路 ...… 查看全部问答> |
|
DDS AD9850 木块资料 购买的木块送的资料。。需要的进来 本帖最后由 paulhyde 于 2014-9-15 09:05 编辑 DDS AD9850 木块资料 购买的木块送的资料。。需要的顶一下! 含PCB、原理图、串并程序,使用。。。内容丰富(pdf)!!值得下载 … 查看全部问答> |
|
最近试用了国内一家叫“知用”的高频电流探头,型号为CP8030A。 简单用信号源和一个50欧姆电阻接了个电路,原理图如图一。同轴电缆的长度大约为50cm,将信号源的频率设置为10Mhz,用泰克的电压探头测了AB端的电压,又用“知用”的电流探头测了下A端 ...… 查看全部问答> |
|
C2000 LaunchPad的usb转串口驱动我找不到,求助 C2000 LaunchPad的XDS100已经驱动成功,但usb转串口驱动不起来,找不到驱动,那位坛友提供一下解决之道。… 查看全部问答> |




