stm32f103c8t6用蓝牙HC05远程控制灯的代码即过程如何完成
时间: 2023-08-25 22:05:36 浏览: 104
以下是使用STM32F103C8T6和HC05蓝牙模块远程控制LED灯的代码和过程:
1. 硬件连接
将HC05蓝牙模块的TX连接到STM32F103C8T6的RX引脚,将HC05的RX连接到STM32F103C8T6的TX引脚,将HC05的VCC连接到STM32F103C8T6的3.3V引脚,将HC05的GND连接到STM32F103C8T6的GND引脚。然后将LED灯连接到STM32F103C8T6的任意一个IO口。
2. 代码编写
使用Keil MDK编写代码,首先需要定义LED灯的IO口,然后定义串口的初始化函数和发送数据函数。接着编写主函数,将串口初始化、IO口初始化、蓝牙模块初始化等步骤放在主函数中。最后使用串口接收数据的中断函数,接收蓝牙模块发送来的数据并将其转换为对LED灯的控制信号,控制LED灯的亮灭。
以下是代码示例:
定义LED灯的IO口
```
#define LED_PIN GPIO_Pin_13
#define LED_PORT GPIOC
GPIO_InitTypeDef GPIO_InitStructure;
void LED_GPIO_Configuration(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
GPIO_InitStructure.GPIO_Pin = LED_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(LED_PORT, &GPIO_InitStructure);
}
```
定义串口的初始化函数和发送数据函数
```
USART_InitTypeDef USART_InitStructure;
void USART_GPIO_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
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);
USART_InitStructure.USART_BaudRate = 9600;
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);
}
void USART_SendChar(char ch)
{
while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);
USART_SendData(USART1, ch);
}
```
编写主函数
```
int main(void)
{
LED_GPIO_Configuration();
USART_GPIO_Configuration();
HC05_Init();
while (1)
{
if (Received_Flag)
{
if (Received_Data == '1')
{
GPIO_SetBits(LED_PORT, LED_PIN);
USART_SendChar('1');
}
if (Received_Data == '0')
{
GPIO_ResetBits(LED_PORT, LED_PIN);
USART_SendChar('0');
}
Received_Flag = 0;
}
}
}
```
使用串口接收数据的中断函数
```
void USART1_IRQHandler(void)
{
if (USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
{
Received_Data = USART_ReceiveData(USART1);
Received_Flag = 1;
}
}
```
3. 软件调试
将程序烧录到STM32F103C8T6开发板中,将HC05蓝牙模块的TX和RX分别连接到电脑的USB转串口模块的RX和TX上,打开串口调试工具,设置波特率为9600,打开蓝牙模块的电源,连接蓝牙模块后即可通过串口调试工具发送控制指令,控制LED灯的亮灭。
以上即为使用STM32F103C8T6和HC05蓝牙模块远程控制LED灯的代码和过程。
阅读全文