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
    +关注

    关注

    2240

    文章

    10674

    浏览量

    348790
  • 串口通信
    +关注

    关注

    32

    文章

    1577

    浏览量

    54865
  • HAL库
    +关注

    关注

    1

    文章

    112

    浏览量

    5878
收藏 人收藏

    评论

    相关推荐

    HALSTM32串口2发送数组给串口1异常的原因?

    刚结束STM32,所以想请教一下。就是我想用串口2接收数据然后发送给串口1,串口1接收后再发送出
    发表于 04-25 06:01

    STM32L476RG UART_IT_IDLE一打开就卡死的原因?

    最近再调试STM32L476RG 串口,使用串口2,在验证DMA空闲中断的时候, 发现初始化的时候 __HAL_UART_ENABLE_IT( huart2, UART_IT_IDLE
    发表于 04-15 07:05

    STM32L051串口接收卡死的原因?

    如题:实验现象是用CUBE配置好的代码,HAL,修改中断函数,增加空闲中断处理不定长数据接收,在使用串口助手进行调试时发现,连续快速点击发送按钮,
    发表于 04-12 07:11

    求助,关于HALHAL_UART_Receive使用问题求解

    使用HAL_UART_Receive()接收数据的时候就接收不到数据了,但是程序还是一直在运行,只是无法接收到数据了。我查了挺久都没找到是为什么。求大佬解释!!!!!下面是我写的
    发表于 04-10 07:25

    STM32L051使用HAL串口中断的疑问求解

    使用STM32CUB生成原始代码,然后采用串口中断接收 L051有两个串口串口1,串口2,以
    发表于 04-08 07:17

    STM32 HAL串口接收中断突然失效的原因?

    STM32 HAL 串口接收中断突然失效
    发表于 04-08 06:40

    HAL_UART_Receive_IT,HAL_UART_Transmit不能正常接收数据的原因?

    _UART_Receive_IT 失败后不能再开中断。 stm32f103 HAL 串口中断方式接收数据的函数
    发表于 04-03 07:22

    用cubeMX + STM32L0HAL1.12.1生成的自定义HID设备,接收后发送数据第三次开始会失败卡死的原因?

    用cubeMX + STM32L0HAL1.12.1生成的自定义HID设备,在接收后发送数据,第三次开始会失败卡死,单独接收和发送没问题,
    发表于 03-21 08:05

    STM32G070串口卡死怎么解决?

    mcu:STM32G070RB,驱动hal版本1.6.1 目前会遇到串口2与外部芯片的通讯异常,异常表现为串口2不能
    发表于 03-21 07:46

    STM32G491使用串口DMA收发数据,一直进中断卡死其他任务是为什么?

    STM32G491使用串口DMA收发数据,一直进中断卡死其他任务,具体原因是出现在哪里?
    发表于 03-18 07:49

    STM32F407串口DMA发送卡死HAL_DMA_GetState怎么解决?

    使用五路串口DMA收发数据,但是在发送的时候,到了while(HAL_DMA_GetState( hdma_usart3_tx) != HAL_DMA_STATE_READY);的时候
    发表于 03-06 08:29

    stm32 HAL库spi接收同时为什么有数据发送出去?

    stm32 HAL库spi接收同时为什么有数据发送出去? 在STM32 HAL库中,SPI接口
    的头像 发表于 10-26 17:42 916次阅读

    STM32 HAL串口收发是如何使用的?

    STM32 HAL串口收发是如何使用的? STM32是一款高性能的微控制器,它拥有广泛的应用领域,其中包括了各种通讯应用,如UART
    的头像 发表于 10-26 17:42 728次阅读

    STM32G491使用串口DMA收发数据一直进中断卡死其他任务的原因

    STM32G491使用串口DMA收发数据,一直进中断卡死其他任务,具体原因是出现在哪里?
    发表于 08-07 07:05

    STM32 HAL串口收发如何使用

    前言 一、 HAL串口收发 1.1 串口发送 1.2 串口接收 二、
    的头像 发表于 06-22 10:38 4064次阅读
    <b class='flag-5'>STM32</b> <b class='flag-5'>HAL</b>库<b class='flag-5'>串口</b><b class='flag-5'>收发</b>如何使用