在HAL库环境下使用串口2搭建ECB02串口透传,初始化ECB02,波特率115200,蓝牙端发送过来的int型数据进行判断,通过串口1打印串口2接收到的数据
时间: 2024-02-11 09:33:41 浏览: 79
首先,需要在HAL库中初始化串口2。
```c
/*定义串口2句柄*/
UART_HandleTypeDef huart2;
/*初始化串口2*/
void MX_USART2_UART_Init(void)
{
/*配置串口2的参数*/
huart2.Instance = USART2;
huart2.Init.BaudRate = 115200;
huart2.Init.WordLength = UART_WORDLENGTH_8B;
huart2.Init.StopBits = UART_STOPBITS_1;
huart2.Init.Parity = UART_PARITY_NONE;
huart2.Init.Mode = UART_MODE_TX_RX;
huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE;
huart2.Init.OverSampling = UART_OVERSAMPLING_16;
if (HAL_UART_Init(&huart2) != HAL_OK)
{
Error_Handler();
}
}
```
接下来,需要编写串口透传的代码。在接收到数据后进行判断,如果数据为int型,就通过串口1打印出来。
```c
/*定义串口1句柄*/
UART_HandleTypeDef huart1;
/*定义接收缓冲区*/
uint8_t buffer[1];
int main(void)
{
/*初始化HAL库*/
HAL_Init();
/*初始化串口1*/
MX_USART1_UART_Init();
/*初始化串口2*/
MX_USART2_UART_Init();
/*定义接收数据的变量*/
int data = 0;
while (1)
{
/*接收数据*/
HAL_UART_Receive(&huart2, buffer, 1, 100);
/*判断数据类型*/
if (buffer[0] >= '0' && buffer[0] <= '9')
{
/*将字符转换成整数*/
data = data * 10 + (buffer[0] - '0');
}
else
{
/*打印数据*/
if (data != 0)
{
char str[10];
sprintf(str, "%d\r\n", data);
HAL_UART_Transmit(&huart1, (uint8_t *)str, strlen(str), 100);
data = 0;
}
}
}
}
```
在上面的代码中,我们通过串口2接收数据,并将接收到的数据存储在data变量中。当接收到非数字字符时,就说明接收到了一个完整的int型数据,此时通过串口1打印出来。需要注意的是,我们在打印数据时,使用了sprintf函数,将int型数据转换成字符串后再通过串口1发送出去。
最后,我们需要在HAL库中初始化串口1。
```c
/*初始化串口1*/
void MX_USART1_UART_Init(void)
{
/*配置串口1的参数*/
huart1.Instance = USART1;
huart1.Init.BaudRate = 115200;
huart1.Init.WordLength = UART_WORDLENGTH_8B;
huart1.Init.StopBits = UART_STOPBITS_1;
huart1.Init.Parity = UART_PARITY_NONE;
huart1.Init.Mode = UART_MODE_TX_RX;
huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
huart1.Init.OverSampling = UART_OVERSAMPLING_16;
if (HAL_UART_Init(&huart1) != HAL_OK)
{
Error_Handler();
}
}
```
这样,我们就完成了串口2透传的搭建。
阅读全文