本帖最后由 dami 于 2021-3-29 09:46 编辑
【STM32G4评测+01+MDK+Stm32cube实现多串口】
1,打开Stm32cube,升级到最新的6.20(吃硬盘)。
2,配置板子为nucleo-STM32G491RE。
3,配置串口3,4,(因为是选的板子所以串口一默认打开的,ld2也是配置好了的)。
设置为接收中断,发送不中断。波特率115200.
4,生成代码。
5,用mdk打开。
6,工程中startup_stm32g491xx.s没加上所以编译有错。加上。
7,实验目标:串口3,4,定时发送数据,串口3,4收到数据都送到串口1 把串口3或者4的RX和TX连起来就可以通过串口1看到CPU发送的数据了。
8,增加接收处理语句。
- //main.c 前面加
- uint8_t uart3sv[4],uart4sv[4];
- uint8_t uart3buf[100],uart4buf[100];
- static uint8_t p_uart3=0,p_uart4=0;
- static uint16_t uart3_sent_tim=0,uart4_sent_tim=0;
- void delayms(uint32_t x)
- {
- for(uint32_t i=0;i<x;i++)
- {
- for(uint32_t j=0;j<50000;j++){};
- }
- }
- //加串口回调函数
- void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
- {
- if(huart->Instance == USART3)
- {
- uart3buf[0]=uart3sv[0];
- HAL_UART_Receive_IT(&huart3,&uart3sv[0],1);
- HAL_UART_Transmit(&hlpuart1,uart3buf,1,0xffff);
- }
- if(huart->Instance == UART4)
- {
- uart4buf[0]=uart4sv[0];
- HAL_UART_Receive_IT(&huart4,&uart4sv[0],1);
- HAL_UART_Transmit(&hlpuart1,uart4buf,1,0xffff);
- }
- }
- //main.c的main函数中加
- /* USER CODE BEGIN 2 */
- HAL_UART_Receive_IT(&huart3,&uart3sv[0],1);
- HAL_UART_Receive_IT(&huart4,&uart4sv[0],1);
- uint8_t buf_T[]={"uart3 uart3 :\n\r"};
- uint8_t buf_H[]={"uart4 uart4 :\n\r"};
- uint8_t buf1[200];
- /* USER CODE END 2 */
- /* Infinite loop */
- /* USER CODE BEGIN WHILE */
- while (1)
- {
- HAL_GPIO_WritePin(LD2_GPIO_Port, LD2_Pin, GPIO_PIN_RESET);
- delayms(300);
- HAL_GPIO_WritePin(LD2_GPIO_Port, LD2_Pin, GPIO_PIN_SET);
- delayms(300);
- HAL_UART_Transmit(&huart3,buf_T,sizeof(buf_T),0xffff);
- delayms(30);
- HAL_UART_Transmit(&huart4,buf_H,sizeof(buf_H),0xffff);
- delayms(30);
- /* USER CODE END WHILE */
- /* USER CODE BEGIN 3 */
- }
9,编译调试。
10,用putty观察串口1输出的数据。
如果连接了串口3的RX,TX 串口1就会打印出 uart3 uart3....
如果连接了串口4的RX,TX 串口1就会打印出 uart4 uart4....
不知道为啥贴不了图片。只好作罢。
STM32G491-uart.rar
(679.91 KB, 下载次数: 4)
------------------------完-----------------------------
|