Nuru_Banmian
Nuru_Banmian
Published on 2025-03-27 / 63 Visits
0
0

USART-串口通讯协议案例-轮询方式hal库实现

STM32CubeMX方面设置

进去时默认都要先配置RCC和SYS的设置,接口方面的设置由于使用到了USART,因此无需在图形化界面进行接口设置,直接在左边的connectivity标签中直接对USART1进行设置设置,把运行模式调成异步模式即可,其他没有特别需求不需要调整

随后调整好文件生成位置生成项目即可

main.c

 /* Private user code ---------------------------------------------------------*/
 /* USER CODE BEGIN 0 */
 uint8_t buffer[100];
 uint16_t size = 0;
 /* USER CODE END 0 */
   /* USER CODE BEGIN 2 */
 ​
   // 发送一个字符串
   HAL_UART_Transmit(&huart1, "hello, world!\n", 14, 1000);
 ​
   /* USER CODE END 2 */
 while (1)
   {
     // // 接收一个定长字符串,再原样发回去
     // if (HAL_UART_Receive(&huart1, buffer, 10, 1000) == HAL_OK)
     // {
     //   HAL_UART_Transmit(&huart1, buffer, 10, 1000);
     // }
 ​
     // 接收一个不定长字符串,再原样发回去
     if (HAL_UARTEx_ReceiveToIdle(&huart1, buffer, 100, &size, HAL_MAX_DELAY) == HAL_OK)
     {
       HAL_UART_Transmit(&huart1, buffer, size, HAL_MAX_DELAY)
     }
     /* USER CODE END WHILE */
 ​
     /* USER CODE BEGIN 3 */
   }

HAL_UART_Receive :接收一个(UART_HandleTypeDef huart, uint8_t pData, uint8_t Size, uint8_t Timeout)类型的数据

HAL_UART_Transmit :接收一个(UART_HandleTypeDef huart, const uint8_t pData, uint8_t Size, uint8_t Timeout)类型的数据

HAL_UARTEx_ReceiveToIdle :接收一个(UART_HandleTypeDef huart, uint8_t pData, uint16_t Size, uint8_t *RxLen, uint8_t Timeout)类型的数据

pData:是要传输的文本数据/接收数据储存的位置

transmit和receive的size是接收和发送数据的长度,固定,也就是说只能发送和接收那么长的数据

receivetoidle的size是接收数据的最大长度

*RxLen:是接收的数据的长度接收完数据会将数据返回到给的值中

delay:最长相应时间,超时则直接跳出


Comment