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

    关注

    2313

    文章

    11189

    浏览量

    374569
  • 串口通信
    +关注

    关注

    34

    文章

    1662

    浏览量

    58176
  • HAL库
    +关注

    关注

    1

    文章

    121

    浏览量

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    《机智云Gokit3开发篇》4 RGB灯的介绍与驱动移植(HAL

    的色彩控制能力。本文聚焦Gokit3开发板(MCU模式,主控STM32F103C8T6),以HAL为开发基础,从P9813驱动芯片的工作原理入手,系统讲解RGB灯的
    的头像 发表于 01-28 19:11 5312次阅读
    《机智云Gokit3开发篇》4 RGB灯的介绍与驱动移植(<b class='flag-5'>HAL</b><b class='flag-5'>库</b>)

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

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

    在标准下配置的stm32f103x的spi在引入rtthread后收发的消息就错了,为什么?

    我在标准下配置的stm32f103x的spi在引入rtthread后收发的消息就错了,引入之前没问题,请问这是啥情况
    发表于 10-13 08:07

    GD32F103RCT6移植qboot,烧录之后系统卡死怎么解决?

    如题,我使用的是stm32halSTM32F103RCT6芯片进行配置的代码烧录到GD32F103RCT6中,串口和PWM都调试成功,
    发表于 09-19 06:41

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

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

    制作STM32H743VIT6的BSP包烧录后板子没反应,进行debug时会卡死的原因?怎么解决?

    制作STM32H743VIT6的BSP包烧录后板子没反应,进行debug时会卡死在rt_hw_hard_fault_exception,并且调试串口也没输出(用的串口1); 可以确认
    发表于 09-15 06:43

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

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

    关于stm32f4zgt6和mspm0g3507串口通信问题

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

    STM32H7使用HAL如何控制外置USB HS PHY进入低功耗?

    项目使用STM32H7的HAL控制外置USB HS PHY(如USB3300或CH132)的。不知如何让MCU通过ULPI接口写寄存器让USB HS PHY进入低功耗,且USB保持链接状态让PC可以重新唤醒。
    发表于 08-14 07:21

    SPI+DMA一直发会进入HAL_BUSY无法跳出是怎么回事?

    在while中一直使用HAL_SPI_TransmitReceive_DMA发送接收数据,循环几次后就会一直为HAL_BUSY状态,查看SPI状态结构体可看到State始终为
    发表于 07-18 06:38

    cyw20719B2 SPI接口slave模式下,在执行wiced_hal_pspi_slave_rx_data()函数的同时,SPI的FIFO还能正确接收数据吗?

    请问,cyw20719B2 SPI接口slave模式下,在执行wiced_hal_pspi_slave_rx_data()函数的同时,SPI的FIFO还能正确接收数据吗? wiced_hal
    发表于 07-08 07:39

    STM32G473 flash擦除时程序卡死,为什么?

    ,也有更新4次、6次卡死的。我尝试在进行擦除之前关中断 __disable_irq();发现测试连续30次升级都没卡死,但没有找到根本原因。注:调用擦除bank的函数执行在CAN接收中断里的一个自定义
    发表于 06-12 08:05

    STM32G473 flash擦除时程序卡死的原因?

    ,也有更新4次、6次卡死的。我尝试在进行擦除之前关中断 __disable_irq();发现测试连续30次升级都没卡死,但没有找到根本原因。注:调用擦除bank的函数执行在CAN接收中断里的一个自定义
    发表于 06-09 07:23

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

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