最近很多人在做蓝牙小车,问了我很多问题,所以打算写一篇文章来帮助大家、方便大家学习。
话不多说,直接进入主题!
手机蓝牙APP控制STM32F103C8T6最小系统板载LED(连接PC13引脚上)亮灭。
手机(APP控制要用) | 一台 |
STM32F103最小系统板 | 一块 |
HC-05蓝牙模块 | 一块 |
USB转TTL | 一个 |
USB转TTL和蓝牙模块连接(蓝牙模块接四根线即可,另外两根不用管),如下图所示。
注意:蓝牙模块的 VCC 只能接 5V,不能接 3.3V!(接3.3V供电不足,工作会不正常。)
(这里以野火的为例,用其它的也行。本教程串口调试助手在文末可自行获取),①选择蓝牙模块连接的端口(不知道可以到设备管理器查,CH340那个就是),②修改:波特率为 38400,8 个数据位,1 个停止位,无校验位。③然后点击“打开串口”。如下图所示:
STM32F103 | HC-05蓝牙模块 |
PA9 | RXD |
PA10 | TXD |
myUsart1.c代码如下:
#include "myUsart1.h" #include "sys.h" u8 RxData=0x00; /* *** USART1 配置串口1与HC-05通信 *** *** 波特率:115200,8位数据位,1位停止位,无奇偶校验位 *** *** 接口:PA9->TX PA10->RX *** *** 作者:陈加油嗯 *** ***关注微信公众号学习更多单片机知识:微信搜索“陈加油嗯” *** */ void USART1_Init(uint32_t bound) { GPIO_InitTypeDef GPIO_Initstructure; NVIC_InitTypeDef NVIC_InitStruct; USART_InitTypeDef USART1_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE); // USART1_TX PA9 GPIO_Initstructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出 GPIO_Initstructure.GPIO_Pin = GPIO_Pin_9; GPIO_Initstructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_Initstructure); // USART1_RX PA10 GPIO_Initstructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //浮空输入 GPIO_Initstructure.GPIO_Pin = GPIO_Pin_10; GPIO_Initstructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_Initstructure); USART1_InitStructure.USART_BaudRate = bound; USART1_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; //无硬件数据流控制 USART1_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; //收模式 USART1_InitStructure.USART_Parity = USART_Parity_No; //无奇偶校验位 USART1_InitStructure.USART_StopBits = USART_StopBits_1; //一个停止位 USART1_InitStructure.USART_WordLength = USART_WordLength_8b; //字长为8位数据格式 USART_Init(USART1, &USART1_InitStructure); USART_Cmd(USART1, ENABLE); //使能USART1 NVIC_InitStruct.NVIC_IRQChannel = USART1_IRQn; NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE; NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 1; NVIC_InitStruct.NVIC_IRQChannelSubPriority = 0; NVIC_Init(&NVIC_InitStruct); // NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); USART_ClearFlag(USART1, USART_FLAG_TC); } void USART1_IRQHandler(void) { if (USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == SET) { USART_ClearFlag(USART1, USART_FLAG_RXNE); RxData = USART_ReceiveData(USART1); //接收到的数据存到 RxData // USART_SendData(USART1, RxData); // while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET); //等待数据发完 } }
#include "stm32f10x.h" // Device header #include "Delay.h" #include "LED.h" #include "myUSART1.h" /* *** main 主函数代码 *** *** 串口初始化 LED初始化 *** *** 作者:陈加油嗯 *** ***关注微信公众号学习更多单片机知识:微信搜索“陈加油嗯” *** */ int main(void) { NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); USART1_Init(115200); //初始化串口1,接HC-05蓝牙模块 LED_Init(); //LED灯初始化 while(1) { if(RxData == 0x00) LED_Close(); //关灯 if(RxData == 0x01) LED_Open(); //开灯 } }
①手机下载、安装APP,安装完成图标如下。
②打开APP,操作如下图所示: