STM32 HAL库的HAL_UART_Transmit_IT使用方法

这篇具有很好参考价值的文章主要介绍了STM32 HAL库的HAL_UART_Transmit_IT使用方法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

HAL_StatusTypeDef HAL_UART_Transmit_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)

是STM32 HAL库中非阻塞的串口发送函数。

用法:1. 调用HAL_UART_Transmit_IT()发送数据

           2. 在HAL_UART_TxCpltCallback()里写上发送完成后的处理

注意: HAL_UART_Transmit_IT()要等待上次发送完成后再发送,否则返回HAL_BUSY。用huart->gState == HAL_UART_STATE_READY判断上次是否发送完成。

官方的解释

       (+) Send an amount of data in non blocking mode using HAL_UART_Transmit_IT()
       (+) At transmission end of transfer HAL_UART_TxCpltCallback is executed and user can add his own code by customization of function pointer HAL_UART_TxCpltCallback

翻译一下:

        (+) 使用HAL_UART_Transmit_IT()在非阻塞模式下发送一定量的数据。

        (+)在传输结束时,HAL_UART_TxCpltCallback被执行,用户可以通过自定义函数指针HAL_UART_TxCpltCallback添加自己的代码。

相较于HAL_UART_Transmit()一直阻塞在while循环(函数内部)里等待直到所有数据发送完毕,HAL_UART_Transmit_IT()以中断模式发送,函数内容仅仅为把数据信息传递给串口句柄结构体变量,然后就可以去执行别的内容了。

    huart->pTxBuffPtr = pData;
    huart->TxXferSize = Size;
    huart->TxXferCount = Size;

什么?传递一下就完了?对,剩下的工作由老大哥串口总中断调用的void HAL_UART_IRQHandler(UART_HandleTypeDef *huart)来完成,最后两个判断内容就是为它服务的。

  /* USART in mode Transmitter -----------------------------------------------*/
  if (((isrflags & USART_SR_TXE) != RESET) && ((cr1its & USART_CR1_TXEIE) != RESET))
  {
    if (husart->State == HAL_USART_STATE_BUSY_TX)
    {
      USART_Transmit_IT(husart);
    }
    else
    {
      USART_TransmitReceive_IT(husart);
    }
    return;
  }

  /* USART in mode Transmitter (transmission end) ----------------------------*/
  if (((isrflags & USART_SR_TC) != RESET) && ((cr1its & USART_CR1_TCIE) != RESET))
  {
    USART_EndTransmit_IT(husart);
    return;
  }

可以看到,发送完成会调用UART_EndTransmit_IT(huart),这哥们儿会调用HAL_UART_TxCpltCallback(huart),没错你去定义它,然后写上发送完要干什么事情就行了。

hal_uart_transmit,stm32,单片机,嵌入式硬件

 文章来源地址https://www.toymoban.com/news/detail-579368.html

到了这里,关于STM32 HAL库的HAL_UART_Transmit_IT使用方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • STM32 串口接收不定长数据 HAL_UART_Receive_IT (帧头帧尾)

    最近使用sw4stm32调试串口时发现串口接收不定长数据很不方便,这里是帧头帧尾的接收方式,欢迎大佬指导。 这里要用串口中断接收的数据帧帧头为0xEB,帧尾为0XBE 这里是其中定义的变量  主函数里打开串口接收中断 然后串口接收处理部分全都写在的回调函数中。

    2024年01月19日
    浏览(36)
  • 【STM32】HAL库的STOP低功耗模式UART串口唤醒,第一个接收字节出错的问题(已解决)

    【STM32】HAL库的STOP低功耗模式UART串口唤醒,第一个接收字节出错的问题(已解决) 最近做项目时 用到了STOP1停止模式的串口唤醒 唤醒配置如下: 【STM32】HAL库低功耗STOP停止模式的串口唤醒(解决进入以后立马唤醒、串口唤醒和回调无法一起使用、接收数据不全的问题) 我

    2024年01月15日
    浏览(41)
  • 【STM32】HAL库的STOP低功耗模式UART串口唤醒,解决首字节出错的问题(全网第一解决方案)

    【STM32】HAL库的STOP低功耗模式UART串口唤醒,解决首字节出错的问题(全网第一解决方案) 前文: 【STM32】HAL库的STOP低功耗模式UART串口唤醒,第一个接收字节出错的问题(疑难杂症) 目前已解决 并更新了我的gitee库: 基于HAL库建立自己的低功耗模式配置库(STM32L4系列低功耗

    2024年01月18日
    浏览(37)
  • 完美解决HAL库HAL_UART_Transmit_DMA()不延时就发不了下一条的问题

    问题原因 在连续用HAL_UART_Transmit_DMA()函数的时候,会遇到只能发出第一条的问题,原因是DMA传输数据到串口这个外设太快了,传输完后程序并不会在该处停留,但是串口发送需要时间,运行到下一条HAL_UART_Transmit_DMA()函数的时候,上一条数据还没来得及发完,导致串处于

    2024年02月11日
    浏览(27)
  • 通过修改HAL_UART_Transmit_DMA()函数,解决串口发送DMA只能发送一次的问题

    废话不多说,先上代码: 在 stm32f1xx_hal_uart.c 文件中找到HAL_UART_Transmit_DMA()函数实现,在 解锁操作__HAL_UNLOCK;后添加代码:huart - gState = HAL_UART_STATE_READY;  编译以后运行完美解决。而且在低延迟的高速while循环中反复调用串口DMA请求,都可以运行。 HAL_UART_Transmit_DMA()函数

    2024年02月13日
    浏览(40)
  • STM32 HAL库函数——HAL_UART_RxCpltCallback()详解

    HAL_UART_RxCpltCallback 是一个回调函数,用于在使用 HAL 库进行串口接收时处理接收完成事件。当使用 HAL_UART_Receive_IT 函数启动串口接收并且接收到指定数量的数据后,HAL 库会自动调用 HAL_UART_RxCpltCallback 函数。 回调函数是一种特殊的函数,它在特定事件发生时由系统或库调用,

    2024年02月13日
    浏览(28)
  • STM32 HAL库 STM32CubeMx -- 串口的使用(USART/UART)

    在上一篇博客里面写了串口通信的理论知识,在这一篇中将讲述串口通信在STM32CubeMx里面的配置,以及在函数里面怎么使用。 对于串口发送信息,分为三种方法: 串口阻塞方式收发 、 串口中断方式收发 、 串口DMA方式收发 。(DMA方式在之后的DMA章节讲解) 关于STM32CubeMx的基

    2024年02月06日
    浏览(60)
  • stm32 笔记 UART读取及HAL库应用

     由此图可知: 采用HAL库,中断方式接收串口,只有当RxXferCount == 0 时,也就是调用这个函数,接收指定量的数据大小完成时,才会调用回调函数HAL_UART_RxCpltCallback()。 而且,RxXferCount == 0 后,也会使得中断退出,此时需要从新设置 HAL_UART_Receive_IT() 开启中断。 这里还需要注意

    2024年02月15日
    浏览(38)
  • STM32-UART-DMA HAL库缓冲收发

    1.1、注意事项: HAL库的DMA底层基本都会默认开启中断使能,如果在STM32CubeMx禁用了中断相关的功能,程序可能会进入空中断回调出不来。 切记使用STM32-HAL库的DMA发送时需要开启USART中断和DMA中断。 在一般时间要求不是很高很高的场合,使用HAL库自带的函数就可以,并不会很频

    2024年01月18日
    浏览(33)
  • STM32学习笔记-SMT32使用HAL库UART中断方式使用

    目录 1、引言 2、配置 3、流程 近来需要使用蓝牙模块,再了解到蓝牙模块等无线模块许多使用串口透传,便决定在研究一下串口UART 的使用方法。 由于用的板子种类每次都不一样,有F103 有G0 有G4 还有公司的8位自研芯片,所以每次用起来都需要重头开始复习 每次使用UART的目

    2023年04月12日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包