HC-05蓝牙模块
有关HC-05蓝牙模块设置历程的博客很多,在这里我就不再介绍了,这次我主要讲一下如何进行32->HC-05->手机的通信,正点原子上也有蓝牙模块的历程,但我看不懂,和LCD结合起来代码量就比较大,我也么得耐心去认真看,所以就讲一下通过串口如何实现32和手机间的通信。
其实原理很简单,就是串口通信,只不过STM32板子上RXD-PA9互相连接,TXD-PA10链接,把他们拆开,将HC-05的RXD连在PA9上,TXD连在PA10上就可以了。
下面的代码是手机向32发送数据的代码,手机上下载一个蓝牙调试助手就可以接收数据了!
led.c
void LED_Init(void)
{
RCC->APB2ENR|=1<<2;
RCC->APB2ENR|=1<<5;
GPIOA->CRH&=0XFFFFFFF0;
GPIOA->CRH|=0X00000003;
GPIOA->ODR|=1<<8;
GPIOD->CRL&=0XFFFFF0FF;
GPIOD->CRL|=0X00000300;
GPIOD->ODR|=1<<2;
}
led.h
#ifndef __LED_H
#define __LED_H
#include "sys.h"
#define LED0 PAout(8) // PA8
#define LED1 PDout(2) // PD2
void LED_Init(void);
#endif
text.c
#include "sys.h"
#include "usart.h"
#include "delay.h"
#include "led.h"
#include "key.h"
//ALIENTEK Mini STM32¿ª·¢°å·¶Àý´úÂë3
//´®¿ÚʵÑé
//¼¼ÊõÖ§³Ö£ºwww.openedv.com
//¹ãÖÝÊÐÐÇÒíµç×ӿƼ¼ÓÐÏÞ¹«Ë¾
int main(void)
{
u8 t;
u8 len;
u16 times=0;
Stm32_Clock_Init(9); //初始化时钟
delay_init(72); //延时初始化
uart_init(72,9600); //串口初始化为9600
LED_Init(); //初始化LED
while(1)
{
if(USART_RX_STA&0x8000)
{
len=USART_RX_STA&0x3fff;//得到此次接收数据的长度
printf("\r\nÄú·¢Ë͵ÄÏûϢΪ:\r\n");
for(t=0;t<len;t++)
{
USART1->DR=USART_RX_BUF[t];
while((USART1->SR&0X40)==0);//等待发送结束
}
printf("\r\n\r\n");//换行
USART_RX_STA=0;
}
else
{
times++;
if(times%5000==0)
{
printf("\r\n123\n");
}
if(times%200==0)printf(" 1232 \r\n");
if(times%30==0)LED0=!LED0;//闪烁LED,表示系统正常运行
delay_ms(10);
}
}
}
如果要仅仅是发送数据的话,直接**printf(“要发送的数据”);**就好了,很方便,但是串口一定要连接正确,不然接收不到数据