描述:
串口轮询接收/发送数据函数
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综合配置基础上设计,不保证在其它模块上有同样效果。