zhouzhouhei

USART_串口通讯_轮询和终端模式_HAL

轮询方式

发送数据

发送字符串

HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, const uint8_t *pData, uint16_t Size, uint32_t Timeout);

接收字符串

  • 定长字符串
HAL_StatusTypeDef HAL_UART_Receive(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout)
  • 变长字符串
HAL_StatusTypeDef HAL_UARTEx_ReceiveToIdle(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint16_t *RxLen,uint32_t Timeout)
// 用 uint16* 类型的变量接收变长字符串的长度

中断方式

提前要配置NVIC

接收数据

要明确定义好的中断服务程序的回调函数

定长字符串

  • 在 stm32f1xx_it.c
引入全局变量 isOver
// 中断服务程序的回调函数
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart){
  isOver = 1;
}
  • 在 main.c
while(1){
  // 串口中断接收函数 在 stm32f1xx_hal_uart.c 寻找
  HAL_UARTEx_Receive_IT(&huart1, buffer, 10);
  if(isOver == 1){
    发送回去;
    isOver置零
  }
}

变长字符串

  • 在 stm32f1xx_it.c
引入全局变量 isOver,size
// 中断服务程序的回调函数
void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size){
  isOver置位;
  size = Szie;  //size获取变长字符串的长度;
}
  • 在 main.c
定义全局变量 isOver,数组buffer,size
while(1){
  // 串口中断接收函数
  void HAL_UARTEx_ReceiveToIdle_IT(&huart, buffer, 最大长度);
  if(isOver == 1){
    发送回数据;
    isOver置零
  }
}

posted on 2026-10-30 23:07  周周黑  阅读(5)  评论(0)    收藏  举报

导航