
附件是 末学做STM32 UART的例程: 主要想法是: 从A 串口收到 命令,根据需要传到 B或C串口 的设备。 B/C 串口收到的 数据反应回 A串口 打印出来。 参考论坛, 用cubeMX 工具设置 三个 串口LPUART1,USART2,UART4,比特率 及硬件; 打印参口了论坛的文章,由于该芯片 L476有浮点功能,浮点打印 加 %f 即可。 主要定义了 结构体 #define BUFFER_SIZE 60 typedef struct { uint8_t EndFlag:1; //空闲接收 uint16_t length; //接收长度 uint8_t dmaBuf[BUFFER_SIZE]; //串口DMA接收缓冲 }UART_ReceiverDef; 中断处理稍加处理 void USART2_IRQHandler(void) { /* USER CODE BEGIN USART2_IRQn 0 */ uint32_t tmp_flag = 0; uint32_t temp; /* USER CODE END USART2_IRQn 0 */ HAL_UART_IRQHandler(&huart2); /* USER CODE BEGIN USART2_IRQn 1 */ tmp_flag = __HAL_UART_GET_FLAG(&huart2,UART_FLAG_IDLE); if((tmp_flag != RESET)) { __HAL_UART_CLEAR_IDLEFLAG(&huart2); /* 读取串口状态寄存器(芯片型号不同,寄存器名称可能需要修改) */ temp = huart2.Instance->ISR; /* 读取串口数据寄存器(芯片型号不同,寄存器名称可能需要修改) */ temp = huart2.Instance->RDR; HAL_UART_DMAStop(&huart2); /* 读取DMA剩余传输数量(芯片型号不同,寄存器名称可能需要修改) */ temp = hdma_usart2_rx.Instance->CNDTR; huart2_rx.EndFlag = 1; huart2_rx.length = BUFFER_SIZE - temp; } /* USER CODE END USART2_IRQn 1 */ } main 函数 的 初始化: MX_USART2_UART_Init(); MX_UART4_Init(); MX_LPUART1_UART_Init(); 启动 uart口: __HAL_UART_ENABLE_IT(&hlpuart1, UART_IT_IDLE); /*启动串口DMA接收*/ HAL_UART_Receive_DMA(&hlpuart1,&huart2_rx.dmaBuf[0],BUFFER_SIZE); __HAL_UART_ENABLE_IT(&huart2, UART_IT_IDLE); /*启动串口DMA接收*/ HAL_UART_Receive_DMA(&huart2,&huart2_rx.dmaBuf[0],BUFFER_SIZE); __HAL_UART_ENABLE_IT(&huart4, UART_IT_IDLE); //UART_IT_IDLE /*启动串口DMA接收*/ HAL_UART_Receive_DMA(&huart4,&huart4_rx.dmaBuf[0],BUFFER_SIZE); main 函数的while loop: if (1 == hlpuart1_rx.EndFlag) { HAL_UART_Transmit(&hlpuart1,&hlpuart1_rx.dmaBuf[0],hlpuart1_rx.length,250); //送回验证 hlpuart1 是否 OK,若改hlpuart1为huart2,就发给另个串口 hlpuart1_rx.length = 0; hlpuart1_rx.EndFlag = 0; memset(&hlpuart1_rx.dmaBuf[0],0,BUFFER_SIZE); HAL_UART_Receive_DMA(&hlpuart1,&hlpuart1_rx.dmaBuf[0],BUFFER_SIZE); //其实不必每个 Loop用这个函数 接收DMA ,若是环型的话 } if (1 == huart2_rx.EndFlag) { HAL_UART_Transmit(&huart2,&huart2_rx.dmaBuf[0],huart2_rx.length,250); //修改 huart2 为 hlpuart1,就可发给打印口 huart2_rx.length = 0; huart2_rx.EndFlag = 0; memset(&huart2_rx.dmaBuf[0],0,BUFFER_SIZE); HAL_UART_Receive_DMA(&huart2,&huart2_rx.dmaBuf[0],BUFFER_SIZE); //其实不必每个 Loop用这个函数 接收DMA ,若是环型的话。 } |
NUCLEO-H723ZG开发板试用 ——串口点灯测试
OpenBLT移植到STM32F103战舰开发板上适用于所有STM32F103系列的Bootloader
MultiButton移植到STM32F103战舰开发板
汇编浮点库qfplib移植STM32F769I-DISCO开发板与硬件浮点运算性能测试对比
【STM32MP157】从ST官方例程中分析RPMsg-TTY/SDB核间通信的使用方法
S2LP 的 sniff 模式如何同时满足通讯和低功耗要求
双证齐发!移远通信通过ISO 26262功能安全流程认证及产品认证
意法半导体 STHV200超声波 IC单片简化设计
了解NFC技术优势与应用场景
基于STM32软件实现底层函数经验分享—IIC通信
3UartOk_org.rar
2019-7-26 11:29 上传
点击文件名下载附件
726.55 KB, 下载次数: 49