蓝牙学习心得
一、连接步骤(最关键)---->配对蓝牙
1、【AT模式】两个蓝牙模块的PIO11接VCC,上电后即进入AT指令模式,都用USB转TTL模块连接到电脑的USB接口。
2、【打开串口调试助手】开启2个串口调试窗口,一个打开蓝牙A的COM口,一个打开蓝牙B的COM口。【默认波特率一般为38400】
3、【恢复A默认设置】串口调试助手A,将蓝牙A恢复默认设置:AT+ORGL\r\n 【\r\n即回车、换行,在串口调试助手上输入一个回车即可】
4、【设置A配对码】串口调试助手A,配置蓝牙A的配对码:AT+PSWD=1212\r\n 【蓝牙A与蓝牙B的配对码相同,这样才能成功配对】
5、【设置A主模式】串口调试助手A,将蓝牙A配置为主机模式:AT+ROLE=1\r\n
6、【恢复B默认设置】串口调试助手B,将蓝牙B恢复默认设置:AT+ORGL\r\n
7、【设置B配对码】串口调试助手B,配置蓝牙B的配对码与蓝牙A一致:AT+PSWD=1212\r\n
8、【设置B从模式】串口调试助手B,将蓝牙B配置为从机模式:AT+ROLE=0\r\n
9、【 查询B地址 】串口调试助手B,查询蓝牙B的地址:AT+ADDR?\r\n 【如2015:2:120758】
10、【蓝牙A绑定蓝牙B】串口调试助手A,蓝牙A绑定蓝牙B地址:AT+BIND=2015,2,120758\r\n 【注意把地址的冒号换成逗号】
11、【常规工作模式】2个模块的PIO11引脚都接地,重新上电后进入常规工作模式,自动完成配对。之后,串口调试助手A和串口调试助手B就能互传数据了。
二、蓝牙通信
1、首先要把程序下载到单片机中,写好能够通信的初始化,以及通信要做的内容
void uart_init(u32 bound) //设置与蓝牙一致的波特率
{ //接下来就是初始化
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_10MHz;
GPIO_Init(GPIOA,&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_10MHz;
GPIO_Init(GPIOA,&GPIO_InitStructure);
USART_InitStructure.USART_BaudRate=bound;
USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;
USART_InitStructure.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;
USART_InitStructure.USART_Parity=USART_Parity_No;
USART_InitStructure.USART_StopBits=USART_StopBits_1;
USART_InitStructure.USART_WordLength=USART_WordLength_8b;
USART_Init(USART1,&USART_InitStructure);
USART_Cmd(USART1,ENABLE);
USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);
NVIC_InitStructure.NVIC_IRQChannel=USART1_IRQn;
NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2;
NVIC_InitStructure.NVIC_IRQChannelSubPriority=2;
NVIC_Init(&NVIC_InitStructure);
}
void USART1_IRQHandler(void) //串口1中断服务程序
{
u8 Receive_Data;
if(USART_GetITStatus(USART1,USART_IT_RXNE))
{
Receive_Data = USART_ReceiveData(USART1); //把发送的值存储到Receive_Data
//接下来只要判断Receive_Data是否有你要得值
if(Receive_Data == 'a') //每发送一个'a'就会使绿灯闪烁一下
{
LED1 = 1;
delay_ms(1000);
USART_SendData(USART1,Receive_Data);
}
else if(Receive_Data == 'b') LED1 = 1;
else if(Receive_Data == 'c') LED0 = 0;
}
}
2、硬件连接----->非常容易出错,我被它困惑了很久
蓝牙连接除了VCC和GND以外,在往单片机上连接时要连上你程序上写的引脚,比如我上面就写了PA9和PA10
,所以蓝牙上的RXD要连PA9,TXD要连PA10!!!
最后就可以发消息通信了