蓝牙( Bluetooth® )
是一种无线技术标准, 可实现固定设备、移动设备和楼宇个人域网 之间的短距离数据交换(使用2.4—2.485GHz 的ISM波段的UHF无线电波)。蓝牙技术最初 由电信巨头爱立信公司于1994年创制,当时 是作为RS232数据线的替代方案。蓝牙可连接 多个设备,克服了数据同步的难题。
通信接口说明
• 与STM32接线方法 STM32F103C8T6 • TXD----接PB11 RXD—接PB10
产品特性
• 1、核心模块使用HC-06从模块,引出接口包括VCC,GND,TXD,RXD,预留LED状 态输出脚,单片机可通过该脚状态判断蓝牙是否已经连接,KEY引脚对从机无效
• 2、led指示蓝牙连接状态,闪烁表示没有蓝牙连接,常亮表示蓝 牙已连接并打开了端口
• 3、底板3.3V LDO,输入电压3.6~6V,未配对时电流约30mA,配 对后约10mA,输入电压禁止超过7V!
• 4、接口电平3.3V,可以直接连接各种单片机(51,AVR,PIC, ARM,MSP430等),5V单片机也可直接连接,无需MAX232也不 能经过MAX232!
• 5、空旷地有效距离10米,超过10米也是可能的,但不对此距离 的连接质量做保证
• 6、配对以后当全双工串口使用,无需了解任何蓝牙协议,但仅 支持8位数据位、1位停止位、无奇偶校验的通信格式,这也是最 常用的通信格式,不支持其他格式。
• 7、在未建立蓝牙连接时支持通过AT指令设置波特率、名称、配 对密码,设置的参数掉电保存。蓝牙连接以后自动切换到透传模 式
• 8、体积小巧(3.57cm*1.52cm),工厂贴片生产,保证贴片质量。 并套透明热缩管,防尘美观,且有一定的防静电能力。
• 9、该链接为从机,从机能与各种带蓝牙功能的电脑、蓝牙主机、 大部分带蓝牙的手机、PDA、PSP等智能终端配对,从机之间不能 配对。
• TXD:发送端,一般表示为自己的发送端,正常通信必须接另一 个设备的RXD。
• RXD:接收端,一般表示为自己的接收端,正常通信必须接另一 个设备的TXD。
• 正常通信时候本身的TXD永远接设备的RXD!
• 自收自发:正常通信时RXD接其他设备的TXD,因此如果要接收自 己发送的数据顾名思义,也就是自己接收自己发送的数据,即自 身的TXD直接连接到RXD,用来测试本身的发送和接收是否正常, 是最快最简单的测试方法,当出现问题时首先做该测试确定是否 产品故障。也称回环测试。
//UART function
//UART3 TxD GPIOB10 推晚复用输出
// RxD GPIOB11 浮空输入 全双工
void USART3Conf(u32 baudRate)
{
NVIC_InitTypeDef NVIC_InitStruct;//定义一个设置中断的结构体
USART_InitTypeDef USART_InitSturct;//定义串口1的初始化结构体
GPIO_InitTypeDef GPIO_InitStruct;//定义串口对应管脚的结构体
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3 , ENABLE);//打开串口管脚时钟
//USART3_Tx_Pin Configure
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_10;//输出引脚 PB10
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_2MHz;//设置最高速度50MHz
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;//推挽复用输出
GPIO_Init(GPIOB , &GPIO_InitStruct);//将初始化好的结构体装入寄存器
//USART3_Rx_Pin Configure
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING;//GPIO模式悬浮输入
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_11;//输入引脚
GPIO_Init(GPIOB, &GPIO_InitStruct);//将初始化好的结构体装入寄存器
//USART3 Configure
USART_InitSturct.USART_BaudRate = baudRate;//波特率9600
USART_InitSturct.USART_WordLength = USART_WordLength_8b;//数据宽度8位
USART_InitSturct.USART_StopBits = USART_StopBits_1;//一个停止位
USART_InitSturct.USART_Parity = USART_Parity_No;//无奇偶校验
USART_InitSturct.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
USART_InitSturct.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;//使能发送与接收
USART_Init(USART3 , &USART_InitSturct);//将初始化好的结构体装入寄存器
//USART1_INT Configure
USART_ITConfig(USART3 , USART_IT_RXNE , ENABLE);//使能接收中断
// USART_ITConfig(USART3 , USART_IT_TXE , ENABLE);
USART_Cmd(USART3 , ENABLE);//打开串口
USART_ClearFlag(USART3 , USART_FLAG_TC);//解决第一个数据发送失败的问题
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
NVIC_InitStruct.NVIC_IRQChannel = USART3_IRQn;
NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStruct.NVIC_IRQChannelSubPriority = 2;
NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;//打开该中断
NVIC_Init(&NVIC_InitStruct);
}
USART_ITConfig(USART3 , USART_IT_RXNE , ENABLE)//使能接收中断
中断函数
void USART3_IRQHandler(void)
{
unsigned char rec_data;
if(USART_GetITStatus(USART3, USART_IT_RXNE) != RESET)
{
USART_ClearITPendingBit(USART3, USART_IT_RXNE);
/* Read one byte from the receive data register */
rec_data = USART_ReceiveData(USART3);
bt_rec_flag = 1;
ctrl_comm = rec_data;
continue_time = 40;
}
}