STM32F103C8T6与蓝牙HC-05模块通讯,通过串口助手实现信息交流,学习笔记(一)

一、引言

1. 背景介绍

        随着科技的迅猛发展,物联网(Internet of Things, IoT)正在深刻改变我们的生活和工作方式。物联网通过将各种设备互联,实现数据的采集、传输和处理,从而使设备之间能够相互协作,提供智能化服务。其应用范围广泛,包括智能家居、工业自动化、医疗健康、智慧城市等多个领域。

        在物联网应用中,无线通讯技术起着至关重要的作用。STM32F103C8T6是一款基于ARM Cortex-M3内核的微控制器,具有高性能、低功耗的特点,广泛应用于各种嵌入式系统中。而HC-05蓝牙模块是一种常见的串口蓝牙模块,支持蓝牙2.0标准,具有传输速度快、距离远、成本低等优点,常用于无线数据传输和设备间通讯。

2. 目的与意义

        本文旨在介绍如何使用STM32F103C8T6与HC-05蓝牙模块进行无线通讯,通过串口助手实现信息交流。通过这一实现,不仅可以掌握STM32与蓝牙模块的基本通讯原理,还能为后续的物联网项目开发打下坚实的基础。

        使用STM32F103C8T6与HC-05模块进行无线通讯具有以下几个意义:

  • 无线通讯的便捷性:减少了传统有线连接的繁琐,提升了设备的灵活性和便捷性。
  • 学习与实践结合:通过实际项目操作,提升对STM32和蓝牙通讯的理解和应用能力。
  • 扩展性强:这一通讯方法可以应用于更多复杂的物联网项目中,如智能家居控制、无线传感网络等。

        本文将详细介绍硬件准备、软件配置、代码实现及测试调试的具体步骤,帮助读者完整掌握STM32F103C8T6与HC-05模块通讯的实现过程。通过本文的学习,读者将能够独立完成STM32与蓝牙模块的通讯设计,为后续的物联网应用开发奠定基础。

二、硬件准备

1. 主要硬件介绍

        STM32F103C8T6是一款基于ARM Cortex-M3内核的32位微控制器,具有以下主要特点:

  • 高性能:主频高达72MHz,内置64KB Flash和20KB SRAM,支持多种外设和接口,如USART、SPI、I2C、ADC等。
  • 低功耗:提供多种省电模式,有效降低能耗,适用于电池供电的嵌入式系统。
  • 丰富的外设:内置多种外设模块,包括定时器、看门狗、RTC、PWM、DMA等,方便实现复杂的嵌入式应用。
  • 广泛的应用:适用于工业控制、消费电子、医疗设备、智能家居等多个领域。

         HC-05蓝牙模块是一款支持蓝牙2.0协议的串口蓝牙模块,具有以下基本功能和技术参数:

  • 基本功能
    • 支持主从一体模式,可通过AT指令配置为主机或从机模式。
    • 提供透明传输模式,方便实现串口设备的无线通讯。
    • 内置LED指示灯,用于显示蓝牙连接状态。
  • 技术参数
    • 工作电压:3.3V(兼容5V输入)
    • 通讯距离:10米(空旷环境)
    • 波特率:默认9600bps,可通过AT指令配置
    • 支持UART接口,TXD、RXD、VCC、GND四个引脚
    • 尺寸:37.3mm x 15.5mm

2. 其他必要硬件

   面包板、杜邦线、电源等。

3. 连接方案

        以下是STM32F103C8T6与HC-05模块的连接图:

STM32F103C8T6          HC-05
   3.3V      ------>   VCC
   GND       ------>   GND
   PA2 (TX)  ------>   RXD
   PA3 (RX) ------>   TXD

        引脚连接方法

  • VCC:HC-05模块的VCC引脚连接到STM32F103C8T6的3.3V电源引脚,提供工作电压。
  • GND:HC-05模块的GND引脚连接到STM32F103C8T6的GND引脚,保证电路的共地。
  • TXD (Transmit Data):HC-05模块的TXD引脚连接到STM32F103C8T6的PA10引脚,用于接收来自HC-05模块的数据。
  • RXD (Receive Data):HC-05模块的RXD引脚连接到STM32F103C8T6的PA9引脚,用于发送数据到HC-05模块。

三、软件准备

1. 开发环境搭建

  • STM32开发环境的搭建,使用Keil 5 MDK或STM32CubeIDE。
  • 安装串口助手软件,例如SSC、XCOM、Serial Port Utility等。

2. 库文件和驱动

  • 安装必要的库文件和驱动程序。

四、代码实现

1. 初始化代码

   编写STM32的串口初始化代码,设置波特率等参数。

void bluetooth_init()
{
	GPIO_InitTypeDef gt;
	USART_InitTypeDef ut;
	NVIC_InitTypeDef nt;
	
	//开启时钟
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE);
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//GPIO端口使能
	
	//管脚功能
	gt.GPIO_Pin = GPIO_Pin_2;
	gt.GPIO_Mode = GPIO_Mode_AF_PP;
	gt.GPIO_Speed = GPIO_Speed_10MHz;
	GPIO_Init(GPIOA, &gt);
	
	gt.GPIO_Pin = GPIO_Pin_3;
	gt.GPIO_Mode = GPIO_Mode_IN_FLOATING;
	GPIO_Init(GPIOA, &gt);
	
	//串口设置参数
	ut.USART_BaudRate = 115200;
	ut.USART_Parity = USART_Parity_No;
	ut.USART_StopBits = USART_StopBits_1;
	ut.USART_WordLength = USART_WordLength_8b;
	ut.USART_Mode = (USART_Mode_Rx | USART_Mode_Tx);
	ut.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
	USART_Init(USART2, &ut);
	//串口使能
	USART_Cmd(USART2,ENABLE);
	
	USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);//中断开启,很重要
	
	//必须要设置USART1的接收中断使能,这样当接收数据寄存器有数据就会触发接收中断
	nt.NVIC_IRQChannel = USART2_IRQn;					//中断源,USARTl的全局中断
	nt.NVIC_IRQChannelCmd = ENABLE;						//使能中断
	nt.NVIC_IRQChannelPreemptionPriority = 0;	//先占优先级s
	nt.NVIC_IRQChannelSubPriority = 2;				//从占优先级
	NVIC_Init(&nt);
}

2. 蓝牙模块配置

CH340模块           HC-05模块
  VCC(5V)   ------>  VCC
  GND       ------>  GND
  RXD       ------>  TXD
  TXD       ------>  RXD

进入AT命令模式方法:
先按住按键,再给模块上电,此时灯是慢闪,进入AT命令模式,默认波特率是38400。

打开此电脑---管理---设备管理器---端口(COM和LPT)会看到有USB-SERIAL CH340(COM?)出现即可

ps:如果没有出现,需要安装开发板USB转串口CH340驱动

注意:如果不按按钮给模块上电,是通信模式,灯光为快闪。 使用usb转ttl 电源接5V。 XCOM需要把发送新行勾上。
 
常用AT命令:
AT+ORGL            恢复出厂默认设置
AT+VERSION?          返回HC-05的软件版本号

AT+NAME?           返回HC-05的名字
AT+NAME=car_uart        修改蓝牙模块的名字为car_uart

AT+UART?            返回蓝牙波特率
AT+UART=115200,0,0     设置串口波特率115200,1位停止位,无校验
【波特率  停止位: 0=1位,1=2位   校验位: 0=无校验,1=奇校验,2=偶校验  默认设置为9600,0,0】

AT+PSWD?           查询配对密码
AT+PSWD="123456"        设置密码123456
AT+ROLE?           查询主从状态,=1:设置成主,=0:设置成从,=2:设置成回环
AT+ROLE=0           设置成从

修改成功后,在串口助手页面会看到OK,如果返回ERROR[0],可以恢复出厂设置,但恢复出厂设置后,需要拔出后,重新上电。

设置好之后,把蓝牙模块连接到STM32板子上。

五、测试与调试

1. 硬件连接检查

   确认所有硬件连接无误,电源正常。

2. 串口助手调试

   通过串口助手软件与HC-05模块进行通讯,测试数据发送和接收。

   检查数据传输的正确性和稳定性。

六、实际应用示例

1. 简单通讯示例

2. 扩展应用

   讨论如何将此基础应用扩展到实际项目中,例如家庭自动化控制等。

附录

1. 完整代码

   提供完整的STM32与HC-05通讯代码。

#include <stm32f10x.h>
#include <stdio.h>

void delayms(int m)
{
	while(m--)
	{
		for(int i=0; i<8050; i++);
	}
}

void bluetooth_init()
{
	GPIO_InitTypeDef gt;
	USART_InitTypeDef ut;
	NVIC_InitTypeDef nt;
	
	//开启时钟
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE);
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//GPIO端口使能
	
	//管脚功能
	gt.GPIO_Pin = GPIO_Pin_2;
	gt.GPIO_Mode = GPIO_Mode_AF_PP;
	gt.GPIO_Speed = GPIO_Speed_10MHz;
	GPIO_Init(GPIOA, &gt);
	
	gt.GPIO_Pin = GPIO_Pin_3;
	gt.GPIO_Mode = GPIO_Mode_IN_FLOATING;
	GPIO_Init(GPIOA, &gt);
	
	//串口设置参数
	ut.USART_BaudRate = 115200;
	ut.USART_Parity = USART_Parity_No;
	ut.USART_StopBits = USART_StopBits_1;
	ut.USART_WordLength = USART_WordLength_8b;
	ut.USART_Mode = (USART_Mode_Rx | USART_Mode_Tx);
	ut.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
	USART_Init(USART2, &ut);
	//串口使能
	USART_Cmd(USART2,ENABLE);
	
	USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);//中断开启,很重要
	
	//必须要设置USART1的接收中断使能,这样当接收数据寄存器有数据就会触发接收中断
	nt.NVIC_IRQChannel = USART2_IRQn;					//中断源,USARTl的全局中断
	nt.NVIC_IRQChannelCmd = ENABLE;						//使能中断
	nt.NVIC_IRQChannelPreemptionPriority = 0;	//先占优先级s
	nt.NVIC_IRQChannelSubPriority = 2;				//从占优先级
	NVIC_Init(&nt);
}


void bluetooth_sendbyte(char ch)
{
	USART_SendData(USART2, ch);	//USART1 发送一个字节的数据
	while(!USART_GetFlagStatus(USART2, USART_FLAG_TXE));

}

void bluetooth_write(char *s)
{
	while(*s)
	{
		bluetooth_sendbyte(*s++);
	}
}

int fputc(int ch, FILE *fp)
{
	bluetooth_sendbyte(ch);
	return 0;
}

void USART2_IRQHandler()
{
	//判断 接收中断标志位是否置零
	if(USART_GetITStatus(USART2, USART_IT_RXNE) == SET)
	{
		//置位读一个字节
		bluetooth_sendbyte(USART_ReceiveData(USART2));
		//清除中断标志位
		USART_ClearITPendingBit(USART2,	USART_IT_RXNE);
	}
}

int main()
{
	bluetooth_init(); //蓝牙初始化
	
	delayms(5000);
	printf("device init success \n");
	while(1)
	{
		printf("hello world\n");
		delayms(1000);
	}
}

通过这个框架,你可以详细展开每个部分的内容,使读者能够清晰了解如何实现STM32F103C8T6与蓝牙HC-05模块通讯,并通过串口助手实现信息交流。

  • 30
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值