当前位置: 首页 > news >正文

串口空闲中断使能到串口空闲中断建立需要多长时间

最近在用DMA+串口空闲中断时,发现第一次发送有问题。见下图:

问了很多人,搜索网上,很少有人知道。为什么延时90us,DAM+串口发送就没有问题,原来是空闲中断使用了“HAL_UART_DMAStop(&g_uart1_handle);//停止串口DMA”导致的。

解决办法,就是再使能串口中断前,等待串口空闲中断标志建立,然后清除它。

void usart_init(uint32_t baudrate) { g_uart1_handle.Instance = USART_UX; /* USART1 */ g_uart1_handle.Init.BaudRate = baudrate; /* 波特率 */ g_uart1_handle.Init.WordLength = UART_WORDLENGTH_8B; /* 字长为8位数据格式 */ g_uart1_handle.Init.StopBits = UART_STOPBITS_1; /* 一个停止位 */ g_uart1_handle.Init.Parity = UART_PARITY_NONE; /* 无奇偶校验位 */ g_uart1_handle.Init.HwFlowCtl = UART_HWCONTROL_NONE; /* 无硬件流控 */ g_uart1_handle.Init.Mode = UART_MODE_TX_RX; /* 收发模式 */ g_uart1_handle.Init.OverSampling = UART_OVERSAMPLING_16; g_uart1_handle.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE; g_uart1_handle.Init.ClockPrescaler = UART_PRESCALER_DIV1; g_uart1_handle.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT; HAL_UART_Init(&g_uart1_handle);/* HAL_UART_Init()会使能UART1 */ HAL_UARTEx_SetTxFifoThreshold(&g_uart1_handle, UART_TXFIFO_THRESHOLD_1_8); HAL_UARTEx_SetRxFifoThreshold(&g_uart1_handle, UART_RXFIFO_THRESHOLD_1_8); HAL_UARTEx_DisableFifoMode(&g_uart1_handle); __HAL_UART_DISABLE_IT(&g_uart1_handle, UART_IT_RXNE); //必须关闭RXNE中断,否则会与IDLE冲突 // __HAL_UART_DISABLE_IT(&g_uart1_handle, UART_IT_IDLE); //不使能空闲中断 __HAL_UART_ENABLE_IT(&g_uart1_handle, UART_IT_IDLE); //使能空闲中断 delay_us(10000000/baudrate); //在使能串口中断前,需要延时,目的是等待串口空闲中断标志建立 //串口一帧数据:起始位1位+8位+停止位1位,8+1+1=10 //串口空闲中断的判定是: //当串口开始接收数据后,检测到1字节数据的时间内没有数据发送,则认为串口空闲了。 __HAL_UART_GET_FLAG(&g_uart1_handle, UART_FLAG_IDLE); //通过读"串口空闲中断标志位",就可以清除这个中断标志位; __HAL_UART_DISABLE_IT(&g_uart1_handle, UART_IT_TXE); //不使能发送缓存为空而产生的中断 __HAL_UART_DISABLE_IT(&g_uart1_handle, UART_IT_TC); //不使能发送完成中断 __HAL_UART_CLEAR_FLAG(&g_uart1_handle, UART_CLEAR_TCF);// 清除发送完成标志 __HAL_UART_ENABLE_IT(&g_uart1_handle, UART_IT_TC); //使能发送完成中断 SCB_CleanInvalidateDCache();// 清理缓存 /* 在使用 DMA(直接内存访问)传输数据时,可能会出现缓存与存储器数据不一致的情况。 调用此函数可以在 DMA 操作前后清理和无效化缓存,确保数据一致性。 */ dma_init_RX(DMA2_Stream1);//初始化DMA串口接收 dma_init_TX(DMA2_Stream7);//初始化DMA串口发送 HAL_UART_DMAStop(&g_uart1_handle);//关闭串口DMA __HAL_DMA_CLEAR_FLAG(&hdma_uart1_tx_handle, DMA_FLAG_TCIF3_7); //清除DMA2_Stream7传输完成标志 HAL_UART_Receive_DMA(&g_uart1_handle, g_rx_buffer, USART_REC_LEN); //数据处理完成后,再调用DMA接收 memset(g_rx_buffer, 0,USART_REC_LEN); //清0 g_usart_rx_sta=0; g_usart_Receive_Complete_Flag=0; g_usart_deal_rx_buf_len=0; g_usart_Send_Complete_Flag=0; HAL_NVIC_EnableIRQ(USART_UX_IRQn); /* 使能USART1中断通道 */ HAL_NVIC_SetPriority(USART_UX_IRQn, 3, 3); /* 抢占优先级3,子优先级3 */ }

通过上面修改,调用usart_init(115200);就可以直接发送数据了,第一次发送就正常了。

10000000/115200=86.80555555555556us
这就是延时90us的原因,80us就不行
串口一帧数据:起始位1位+8位+停止位1位,8+1+1=10
这个问题,网上很少有人知道。

http://www.zskr.cn/news/1488986.html

相关文章:

  • 2026年 IGBT模块、功率模块、可控硅、二极管、整流桥、晶闸管厂家推荐排行榜:高性能与稳定品质之选 - 品牌发掘
  • 革命性微信聊天记录永久保存与智能分析工具:掌握你的数字记忆主权
  • Bilibili 视频合集时长计算最新脚本
  • 思维链 ,Anthropic Mythos模型的 Looped Transformer架构解析,claud为什么厉害性能优越的研究
  • C语言容器中数据的高效串行化和解串--下位机的C语言处理(1)
  • AI Agent 学习指南
  • AMHS自动物料搬运系统实战
  • 2026 泉州防水补漏服务商口碑测评榜单|全屋渗漏维修机构优选指南 - 宅安选房屋修缮
  • 深度测评 | 怎么判断一家竹笋干供应商是否专业?只看产品种类多不多吗?
  • 汽车以太网PHY芯片TJA1102A硬件配置、寄存器驱动与睡眠唤醒实战指南
  • 如何配置WarcraftHelper解决魔兽争霸III现代系统兼容性问题
  • 2026年杭州企业家必读:GEO优化公司选型实战指南与五大厂商深度横评 - 品牌报告
  • JoyAI-Echo:长音视频生成的真正难点,不是把视频做长,而是让世界不断线
  • uni-app扫码工具包:前后置摄像头自由切换,一套代码跑通H5、小程序和App
  • 2026 惠州市外墙渗水维修|屋顶漏水|地下室防水本地 7 家公司推荐|惠州漏水维修附近上门,卫生间 / 外墙 / 屋顶 / 阳台 / 飘窗防水补漏权威测评(全惠州同城服务) - 吉林同城获客
  • 2026年 HC420/780DP高强钢厂家推荐榜:汽车结构件与轻量化选材的精准之选 - 品牌发掘
  • 期末论文扎堆不用慌,百考通AI帮你高效搞定课业写作难题
  • 2026年 2,4-二甲基苯酚厂家推荐排行榜:工业级/医药级中间体,高纯度与稳定供货实力品牌深度解析 - 品牌发掘
  • 2026年卡板厂家推荐榜单:实木/熏蒸/出口/免检/胶合/欧标/美标/IPPC卡板,多场景坚固承重之选 - 品牌发掘
  • LGTV Companion终极指南:5步实现智能电视与电脑的完美同步
  • 把 PyTorch 的 Autograd 压进 280 行 C++:从 Dual Number 到一台 Kahn 拓扑排序引擎
  • ArduPilot自动驾驶系统核心技术架构深度解析
  • 通达信ChanlunX缠论插件:3分钟实现股票走势智能识别,告别手动画线烦恼
  • 开源LCA软件openLCA:3小时从零搭建专业级生命周期评估平台
  • 在职读EMBA哪家机构靠谱?十大优质在职EMBA机构推荐 - 品牌测评鉴赏家
  • OpenClaw + Ollama + 火山引擎:本地化 AI Agent 完整部署指南
  • 阅见微光,手造自然——清净禅林AI雅集圆满举行 - GrowthUME
  • 2026年 苏州西服定制推荐榜单:婚礼西服/商务西服/意式西服/全麻衬西服,资深匠人刘建平绅装会纯手工量体,进口面料与专业口碑之选 - 品牌发掘
  • 蓝牙官方协议PDF合集:安全架构、简易配对、HID/SIM/AVRCP等核心规范与航空射频合规文档
  • 2026年探秘成都双子塔:那些让人回味无穷的美味餐厅