admin管理员组文章数量:1558970
一、引言
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.GPIO_Pin = GPIO_Pin_3;
gt.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA, >);
//串口设置参数
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.GPIO_Pin = GPIO_Pin_3;
gt.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA, >);
//串口设置参数
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模块通讯,并通过串口助手实现信息交流。
版权声明:本文标题:STM32F103C8T6与蓝牙HC-05模块通讯,通过串口助手实现信息交流,学习笔记(一) 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dianzi/1727404901a1113262.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论