|
附件是 末学做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 ,若是环型的话。 } |
STM32
超强工具——STM32CubeMX 你会用吗?
集结出发! STM32全国研讨会系列之一:ST智能门铃中国首秀
关于STM32启动文件的几个小问题
【银杏科技ARM+FPGA双核心应用】STM32H7系列35——USB_VCP_FS
【银杏科技ARM+FPGA双核心应用】STM32H7系列28——USB_HID
粉丝分享 | 图说CRC原理应用及STM32硬件CRC外设
STM32L151进入低功耗,并由RTC唤醒的故事
[转]stm32控制NFC模块(PN532)源码(P2P,模拟卡,读写卡等
STM32G070RB+LVGL移植
微信公众号
手机版
3UartOk_org.rar
2019-7-26 11:29 上传
点击文件名下载附件
726.55 KB, 下载次数: 39