STM32基础项目:基于stm32f1的蓝牙遥控小车(三)
STM32通过串口实现蓝牙通信
我们这里仅使用蓝牙串口通信实现单字节数据的传输,这些就足以控制小车的运动了。我们这里用Usart1来实现蓝牙通信,然后通过检测蓝牙发送的单字节数来简单控制单片机led灯的亮灭。
stm32f103c8t6的led灯的引脚为PC13,所以对PC13进行配置。
1 2 3 4 5 6 7 8 9 10 11 12 13
| #include "led.h" void LED_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOC, &GPIO_InitStructure); }
|
对Usart1进行配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| void Usart1_Init(u32 bound) { GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOA, &GPIO_InitStructure); NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority= 3; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); USART_InitStructure.USART_BaudRate = bound; USART_InitStructure.USART_WordLength = USART_WordLength_8b; 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(USART1, &USART_InitStructure); USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); USART_Cmd(USART1, ENABLE); }
|
连接
| JDY-31 |
stm32f103c8t6 |
| RX |
PA9 |
| TX |
PA10 |
| VCC |
VCC |
| GND |
GND |
我们这里设置当串口检测到蓝牙发送数字0,LED亮,发送数字1,LED灭。
首先对LED进行定义
#define LED PCout(13)
再写串口中断服务函数
1 2 3 4 5 6 7 8 9 10 11 12
| void USART1_IRQHandler(void) { u8 res; if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) { res = USART_ReceiveData(USART1); if(res == 0) LED = 0; if(res == 1) LED = 1; } }
|
蓝牙APP制作
下面我们来用蓝牙app发送信号给串口,蓝牙APP制作网站:http://app.gzjkw.net/login/
登
各个组件的属性可根据自己的爱好配置。
组件设计完后,下面进入到蓝牙APP的逻辑设计,在网页右上角点击进入逻辑设计。

点击相应的组件,可出现对应的逻辑板块,在进行选择与配置。

最后在菜单栏里找到打包apk选项,点击打包apk并显示二维码,手机扫描二维码下载,然后在手机设置中,找到蓝牙模块的广播名,输入PIN连接,打开app,点击蓝牙选择,找到蓝牙模块,连接即可。
这时你会看到,点击开灯按钮,LED亮;关灯按钮,LED灭。