描述:

串口轮询接收/发送数据函数
HAL_UART_Transmit(*huart, *pData, Size, Timeout); //串口发送

  • *huart: UART号指针,程序中用到了&huart1和&huart2
  • *pData: 数据指针,程序中用到了MyRxData1和MyTxData2
  • Size:数据长度
  • Timeout:超时时间

HAL_UART_Receive(*huart, *pData, Size, Timeout); //串口接收

  • *huart: UART号指针,程序中用到了&huart1和&huart2
  • *pData: 数据指针,程序中用到了MyRxData1和MyTxData2
  • Size:数据长度
  • Timeout:超时时间
示例:

根据使用的外设,关闭未使用外设的初始化

 /* Initialize all configured peripherals */
 MX_GPIO_Init(); //开启GPIO初始化
// MX_I2C1_Init();
 MX_USART2_UART_Init(); //开启串口2初始化
// MX_USB_DEVICE_Init();
// MX_ADC_Init();
// MX_TIM2_Init();
// MX_SPI1_Init();
// MX_WWDG_Init();
// MX_IWDG_Init();
// MX_RTC_Init();
 MX_USART1_UART_Init(); //开启串口1初始化

编辑主程序,示例中所有波特率都为115200,串口UART1接收数据,接收到数据后UART1再将数据传回,串口UART2发一次数据“I love eefrog!”,并翻转一次LED灯提示。

/* Infinite loop */
/* USER CODE BEGIN WHILE */
uint8_t MyRxData1[15] = ""; //定义数据数组
uint8_t MyTxData2[15] = "I love eefrog!\n"; //定义数据数组
while (1)
{
 while(HAL_UART_Receive(&huart1, MyRxData1, 15, 100)); //等待接收串口数据
 while(HAL_UART_Transmit(&huart1, MyRxData1, 15, 100)); //发送串口1数据
 while(HAL_UART_Transmit(&huart2, MyTxData2, 15, 100)); //发送串口2数据
 HAL_Delay(10); //延时等待传输完成
 for(int x = 0; x < 15; x++) //清除接收数据缓存
 {
   MyRxData1[x] = 0x00;
 }
 HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin); //翻转LED状态提示
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */

以上示例针对eefrog的STM32F042G模块,根据STM32cubeMX综合配置基础上设计,不保证在其它模块上有同样效果。