在HAL库环境下使用串口2搭建ECB02串口透传,蓝牙端发送过来的int型数据进行判断,通过串口1打印串口2接收到的数据
时间: 2024-02-11 14:35:39 浏览: 77
蓝牙串口透传
4星 · 用户满意度95%
下面是一个简单的代码示例,可以实现串口2透传和数据判断的功能:
```
#include "stm32f10x.h"
#include "stm32f10x_usart.h"
#define USART1_DR_Base 0x40013804
#define USART2_DR_Base 0x40004404
void USART1_Init(void);
void USART2_Init(void);
void USART1_SendChar(char ch);
void USART2_SendChar(char ch);
void USART1_SendString(char* str);
void USART2_SendString(char* str);
int main(void)
{
char buffer[20];
int data;
USART1_Init();
USART2_Init();
while (1)
{
// 接收蓝牙端发送的数据
while (USART2_GetFlagStatus(USART2_FLAG_RXNE) == RESET);
data = USART2_ReceiveData(USART2);
// 判断数据是否符合要求
if (data >= 0 && data <= 100)
{
// 数据合法,将数据转换为字符串并发送到串口1
sprintf(buffer, "%d\r\n", data);
USART1_SendString(buffer);
}
}
}
void USART1_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_USART1, ENABLE);
// 配置PA9(TX)为复用推挽输出
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);
// 配置PA10(RX)为浮空输入
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA, &GPIO_InitStructure);
USART_InitStructure.USART_BaudRate = 115200;
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_Tx | USART_Mode_Rx;
USART_Init(USART1, &USART_InitStructure);
USART_Cmd(USART1, ENABLE);
}
void USART2_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);
// 配置PA2(TX)为复用推挽输出
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
// 配置PA3(RX)为浮空输入
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
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_Tx | USART_Mode_Rx;
USART_Init(USART2, &USART_InitStructure);
USART_Cmd(USART2, ENABLE);
}
void USART1_SendChar(char ch)
{
while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);
USART_SendData(USART1, ch);
}
void USART2_SendChar(char ch)
{
while (USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET);
USART_SendData(USART2, ch);
}
void USART1_SendString(char* str)
{
while (*str)
{
USART1_SendChar(*str++);
}
}
void USART2_SendString(char* str)
{
while (*str)
{
USART2_SendChar(*str++);
}
}
```
在上面的代码中,我们使用了STM32的HAL库来初始化串口1和串口2,并通过中断方式接收串口2收到的数据。然后我们判断收到的数据是否在0~100之间,如果是,则将数据转换为字符串并通过串口1发送出去。
需要注意的是,本例中我们使用了printf函数来将int型数据转换为字符串。如果您的项目中没有使用标准库,可以通过自己编写itoa函数来实现数据转换的功能。
阅读全文