0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

STM32 HAL库串口同时收发,接收卡死?

工程师邓生 来源:未知 作者:刘芹 2023-10-26 17:42 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

STM32 HAL库串口同时收发,接收卡死?

为什么STM32 HAL库串口会出现同时收发导致接收卡死的问题?如何解决这个问题?

首先,我们来了解一下STM32 HAL库的串口通信机制。

STM32 HAL库是针对STM32系列单片机的一套常用的高级抽象层库。在HAL库中,串口通信是通过针对USART外设的封装实现的。HAL库中提供了一些函数,可以方便地配置USART外设的各种参数,如波特率、数据位、停止位、奇偶校验等,还提供了发送和接收数据的函数。

串口通信是一种异步通信方式,发送和接收是独立的。在使用HAL库编写串口通信代码时,如果在发送数据的同时也接收数据,就可能会出现接收卡死的问题。这是由于串口通信中数据的传输需要遵循一定的协议,同时发送和接收可能会导致这种协议破坏,从而导致接收卡死的问题。

那么,如何解决这个问题呢?

解决方法一:使用DMA模式的串口通信

DMA模式的串口通信可以解决同时收发导致接收卡死的问题。DMA(Direct Memory Access)即直接存储器访问,是一种无CPU干预的数据传输方式,通过DMA可以实现高效、可靠的数据传输。

在HAL库中,使用DMA模式的串口通信需要使用HAL_UART_Receive_DMA函数和HAL_UART_Transmit_DMA函数来发送和接收数据。使用DMA模式的串口通信可以将数据的传输和处理分开,避免同时发送和接收导致的协议破坏,从而避免接收卡死的问题。

解决方法二:使用中断

如果不能使用DMA模式的串口通信,也可以使用中断来解决同时收发导致接收卡死的问题。在HAL库中,可以使用HAL_UART_Receive_IT函数和HAL_UART_Transmit_IT函数来发送和接收数据。

当接收到数据时,会触发UART的中断,从而在中断函数中对数据进行处理。使用中断可以将数据的传输和处理分开,避免同时发送和接收导致的协议破坏,从而避免接收卡死的问题。

综上所述,STM32 HAL库串口同时收发导致接收卡死的问题可以通过使用DMA模式的串口通信或使用中断来解决。这样可以将数据的传输和处理分开,从而避免同时发送和接收导致的协议破坏,从而避免接收卡死的问题。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • STM32
    +关注

    关注

    2305

    文章

    11120

    浏览量

    371137
  • 串口通信
    +关注

    关注

    34

    文章

    1657

    浏览量

    57632
  • HAL库
    +关注

    关注

    1

    文章

    121

    浏览量

    7478
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    立即在GitHub上抢先体验面向STM32U5的最新STM32Cube HAL更新

    其满足您的需求。 如何获取预览版本 面向STM32U5系列的STM32Cube HAL2预览版已在GitHub代码STM32CubeU5-
    的头像 发表于 10-20 17:12 636次阅读

    GD32的串口DMA收发数据失败怎么解决?

    gd32_hw_usart_init()函数中并未注册DMA收发的方式, GD32该函数如下: 而STM32的该函数如下: 查找GD32的串口操作中相关的一些DMA操作也缺失,不
    发表于 09-17 06:04

    rtt vision board openmv串口收发数据,接收到的是乱码,为什么?

    利用ttl转Usb ,利用电脑上的串口调试助手发送或者接收数据,接收到的是乱码,将板子上的rx,tx短接,可以正常收发
    发表于 09-15 06:09

    关于stm32f4zgt6和mspm0g3507串口通信问题

    中段进行数据接收,使用Hal的transmit函数进行数据发送。 当使用m0与电脑(ch340)进行通信时,两者可以正常通信,stm32也是如此。 但是,当m0与
    发表于 09-01 11:11

    基于STM32 HAL与标准的esp8266接入机智云方案(二)

    在《基于STM32HAL与标准的esp8266接入机智云方案(一)》中,我们详细介绍了硬件连接和机智云客户端的创建。本篇将重点讲解如何下载代码、分析下载的代码,并直接使用这些代码连接机智云。
    的头像 发表于 05-28 18:02 1112次阅读
    基于<b class='flag-5'>STM32</b> <b class='flag-5'>HAL</b><b class='flag-5'>库</b>与标准<b class='flag-5'>库</b>的esp8266接入机智云方案(二)

    HAL1.8.4在做破坏性测试的时候出现g_state永远为busy的情况导致串口通信发送卡死,为什么?

    串口主机的那块板子就发不出数据了(DMA发送),我们用的HAL1.8.4,软件排查下来是huart结构体有个gstate处于busy状态了,而理论上发送完成后进入串口中断就会置为re
    发表于 04-23 06:35

    STM32开发入门进阶必备!《STM32嵌入式系统开发—基于STM32CubeMX和HAL》新书发布!

    近日,由华清远见教育科技集团精心编撰的教育部高等学校电子信息类专业教学指导委员会规划教材、普通高等教育电子信息类专业系列教材——《STM32嵌入式系统开发—基于STM32CubeMX和HAL
    的头像 发表于 04-03 14:54 1364次阅读
    <b class='flag-5'>STM32</b>开发入门进阶必备!《<b class='flag-5'>STM32</b>嵌入式系统开发—基于<b class='flag-5'>STM32</b>CubeMX和<b class='flag-5'>HAL</b><b class='flag-5'>库</b>》新书发布!

    STM32F107的USART2为什么进不了中断?

    g_usart_rx_sta = 0; uint8_t g_rx_buffer[RXBUFFERSIZE];/* HAL使用的串口接收缓冲 */ UART_HandleType
    发表于 03-14 16:57

    stm32f105串口数据丢失的原因?

    hal通过dma空闲中断接收数据,收到的数据直接通过串口打印出去,每隔一段时间出现接收到数据丢失是为啥呢
    发表于 03-14 13:38

    使用Hal的SPI读取磁边传感器导致STM32G4无法运行怎么解决?

    使用 HAL STM32G431 + SPI ,读取磁边传感器系统运行一会直接卡死,使用调试功能最后发现卡死在if ((__
    发表于 03-14 08:24

    stm32g0b1中的usart5进不去HAL_UARTEx_RxEventCallback,为什么?

    请教一下关于stm32g系列的问题,stm32g0b1中的usart5进不去HAL_UARTEx_RxEventCallback,cudemx上配置跟其他串口也是一样的,都打开中断了,
    发表于 03-13 06:51

    STM32F427串口接收和发送中断同时使能,为什么会出现接收中断丢数的情况?

    STM32F427芯片,针对UART7开启串口接收缓存区非空中断RXNE和串口传输完成中断TC. 1.单测试收发都没有任何问题。 2.将
    发表于 03-11 07:05

    STM32F103在使用HAL1.8.5版本使用串口中断发送数据的时候,出现huart2-&gt;TxXferCount为0了,为什么?

    STM32F103在使用HAL1.8.5版本使用串口中断发送数据的时候,会出现huart2->TxXferCount为0了,但是并没有清除掉TXEIE中断也没有使能TCIE中断
    发表于 03-07 07:12

    STM32F1开发指南

    这本书详细讲述了STM32HAL开发的配置流程,非常详细
    发表于 01-21 15:33 3次下载

    STM32CubeMX生成的代码,是怎样的HAL架构?

    需要注意,CubeMX只是一个初始化工具,它只是帮你完成了HAL外设和时钟的初始化,具体程序的编写还需要查阅HAL的说明,使用相关函数实现你想实现的功能。CubeMX生成的代码包含
    的头像 发表于 01-01 21:01 1233次阅读
    <b class='flag-5'>STM32</b>CubeMX生成的代码,是怎样的<b class='flag-5'>HAL</b>架构?