【个人纪录】STM32G431RBT6 USART/UART

COM口

串行接口简称串口(COM口),使用USART/UART协议,单片机中兼容TTL电平和CMOS电平,意思就是多高电压是1,多低电压是0

代码实现

在main函数之前先定义

uint8_t str[100] = "test string";

//回调函数,触发中断后执行的程序
void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size)
{
  /* Prevent unused argument(s) compilation warning */
    HAL_UART_Transmit_IT(&huart1, str, Size);
    HAL_UARTEx_ReceiveToIdle_IT(&huart1, str, 100);

  /* NOTE : This function should not be modified, when the callback is needed,
            the HAL_UARTEx_RxEventCallback can be implemented in the user file.
   */
}

让我感到疑惑的是在发送函数里的长度是Size,而接收函数里却是100,询问deepseek得知

HAL_UART_Transmit_IT(&huart1, str, Size);

  • Size:这个参数表示要发送的数据长度。在 HAL_UARTEx_RxEventCallback 回调函数中,Size 是由 UART 接收事件触发时传入的,表示实际接收到的数据长度。因此,发送数据时使用 Size 作为长度参数,确保只发送实际接收到的数据,而不是整个缓冲区的内容。

HAL_UARTEx_ReceiveToIdle_IT(&huart1, str, 100);

  • 100:这个参数表示接收缓冲区的最大长度。HAL_UARTEx_ReceiveToIdle_IT 函数用于启动 UART 接收,直到接收到指定数量的数据或检测到空闲线路(idle line)事件。这里的 100 是接收缓冲区的最大容量,表示最多可以接收 100 个字节的数据。

在UART发送或接收数据函数的定义里可以看到

HAL_StatusTypeDef HAL_UART_Transmit_IT(UART_HandleTypeDef *huart, const uint8_t *pData, uint16_t Size)

数据的类型格式是uint8_t,所以在定义字符串数组的时候用uint8_t,说明这里是字节数据而非字符。

最后在main函数里加入一句代码

HAL_UARTEx_ReceiveToIdle_IT(&huart1, str, 100);

HAL_UARTEx_ReceiveToIdle_IT 是一个用于启动 UART 接收的函数,它会在接收到指定数量的数据或检测到空闲线路(idle line)事件时触发回调函数。

否则回调函数检测不到空闲线路或者数据,当数据接收完成就无法处理这些数据。

触发回调函数的目的是通知应用程序:当前帧的数据已经接收完成,可以处理这些数据了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值