基于STM32F407+蓝牙模块(HC-05)与电脑蓝牙通信(含代码)

基于STM32F407+蓝牙模块(HC-05)与电脑蓝牙通信(含代码)
在许多基于STM32控制方面,很多时候需要我们获得许多数据,而这些数据很多时候不能有线传输,要进行必要的无限传输,在无限传输方面蓝牙有着许多的优点,操作简单,开发源码对,等等。我们进入正题:
蓝牙模块和电脑通信一共有两种方式:
一,蓝牙模块与电脑互发互收(其实就是电脑通过电脑蓝牙发给蓝牙模块,模块通过串口又发给电脑)
1,需要一个蓝牙模块(HC-05,最好使能端有按钮的方便修改AT指令),一个USB-TTL下载器,电脑一台(电脑自带蓝牙)。基于STM32F407+蓝牙模块(HC-05)与电脑蓝牙通信(含代码)_第1张图片
2,在电脑上安装《串口助手》,《蓝牙调试助手》。基于STM32F407+蓝牙模块(HC-05)与电脑蓝牙通信(含代码)_第2张图片
3,把US-TTL的5v,ged,rx,tx,分别接到蓝牙模块的5v,ged,tx,rx。然后按住蓝牙模块上的那个小按钮,然后再插到电脑上,然后放开按键,即进入蓝牙模块的AT指令.
4, 打开蓝牙调试助手,波特率设置为38400,然后点击获取模块信息,如果出现OK说明已经进入AT指令。进行以下修改:
① 设备名称:就是你想给蓝牙串口模块上的蓝牙命名,支持中英文;这里设置为“Bluebooth”;
② 主从角色:就是模块的角色,这里选“从角色”;③ 设备类:就是蓝牙设备类型,这里设置为COD;
④ 连接密码:就是指与其他蓝牙设备连接时需要对方输入匹配的密码,这里设置为“1234”,可支持至少8位的长度,字母与数字混合;
⑤ 查询访问码:设置成通用查询访问码9e8b33;
⑥ 连接模式:主从和回环模式选择,这里选“从角色”;
⑦ 查询访问模式:选0或1,0是标准模式,1是RSSI加强模式,可以连接多个设备,这里选1;
⑧ 通信波特率:在常用的波特率里选择,由于手机通信波特率是9600,所以建议这里选择9600;
最后点击“更新模块信息”,设置完毕。关闭软件。
5,断电,不用按那个小按钮,上电。led快速闪烁说明已经进入工作模式。
6,然后打开电脑蓝牙连接上蓝牙模块,这时候蓝牙模块的led缓慢闪烁,然后等一会电脑会自动安装蓝牙驱动,过一会打开电脑的设备管理,在端口里面就可以看到蓝牙的2个串口com,然后记下排名靠后的那个com。
7,打开电脑串口助手,如上图就那样设置。
8,打开2个电脑串口助手,一个选择蓝牙的com,一个选择USB-TTL的com,然后就可以用实现本功能,效果是,一个发送一定的字符,另一个显示刚才发出的字符。
二,电脑和单片机通过蓝牙通信(给蓝牙发送字符,让单片机上的led闪烁)
先进行方法一的前6步,打开一个电脑助手,发送1,led灯亮,发送2,led灯灭。
下面分享代码:

#include "sys.h"
#include "usart3.h" 
#include 
#include "led.h

//////////使用printf需要以下代码
struct __FILE 
{ 
 int handle; 
}; 
FILE __stdout;       
//定义_sys_exit()以避免使用半主机模式    
_sys_exit(int x) 
{ 
 x = x; 
} 
//重定义fputc函数 
//重定向c库函数printf到USART3
int fputc(int ch, FILE *f)
{
  /* 发送一个字节数据到USART1 */
  USART_SendData(USART3, (uint8_t) ch);
  
  /* 等待发送完毕 */
  while (USART_GetFlagStatus(USART3, USART_FLAG_TXE) == RESET);  
 
  return (ch);
}
void uart3_init(void){
   //GPIO端口设置
  GPIO_InitTypeDef GPIO_InitStructure;
 USART_InitTypeDef USART_InitStructure;
 NVIC_InitTypeDef NVIC_InitStructure;
 RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB,ENABLE); //使能GPIOA时钟
 RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3,ENABLE);//使能USART1时钟
 //串口2对应引脚复用映射
 GPIO_PinAFConfig(GPIOB,GPIO_PinSource10,GPIO_AF_USART3); //GPIOA9复用为USART1
 GPIO_PinAFConfig(GPIOB,GPIO_PinSource11,GPIO_AF_USART3); //GPIOA10复用为USART1
 //USART2端口配置
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10 | GPIO_Pin_11; //GPIOA9与GPIOA10
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;//复用功能
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //速度50MHz
 GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽复用输出
 GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; //上拉
 GPIO_Init(GPIOB,&GPIO_InitStructure); //初始化PA9,PA10
 //USART2 初始化设置
 USART_InitStructure.USART_BaudRate = 9600;//波特率设置
 USART_InitStructure.USART_WordLength = USART_WordLength_8b;//字长为8位数据格式
 USART_InitStructure.USART_StopBits = USART_StopBits_1;//一个停止位
 USART_InitStructure.USART_Parity = USART_Parity_No;//无奇偶校验位
 USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//无硬件数据流控制
 USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; //收发模式
  USART_Init(USART3, &USART_InitStructure); //初始化串口1
  USART_Cmd(USART3, ENABLE);  //使能串口1 
  USART_ITConfig(USART3, USART_IT_RXNE, ENABLE);//开启相关中断
  //Usart2 NVIC 配置
  NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn;//串口1中断通道
 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1;//抢占优先级3
 NVIC_InitStructure.NVIC_IRQChannelSubPriority =0;  //子优先级3
 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;   //IRQ通道使能
 NVIC_Init(&NVIC_InitStructure); //根据指定的参数初始化VIC寄存器、
 void USART3_IRQHandler(void)                 //串口2中断服务程序
{
 u8 Res;
 if(USART_GetITStatus(USART3, USART_IT_RXNE) != RESET)  //接收中断
 {
  Res=USART_ReceiveData(USART3);
  if(Res=='1')
   LED0=0;
   if(Res=='2')
   LED0=1;
   USART_ClearFlag(USART3,USART_IT_RXNE); //清除标志位
 }
 
}

你可能感兴趣的:(基于STM32F407+蓝牙模块(HC-05)与电脑蓝牙通信(含代码))