赞
踩
最近很多人在做蓝牙小车,问了我很多问题,所以打算写一篇文章来帮助大家、方便大家学习。
话不多说,直接进入主题!
手机蓝牙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,操作如下图所示:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。