近期使用STM32驱动MAX3485进行485通信,发现STM32F103C8并不自带硬件485首发功能,需要软件上控制IO高低来驱动MAX3485进行485接收、485发送。

根据MAX3485手册可得,进行485发送时给相应引脚高电平。其余时间为低电平进行485接收。因此需要找到串口DMA发送完成的回调函数,在发送完成后将引脚拉低。

在stm32f1xx_hal_uart.c中


/** @defgroup UART_Exported_Functions_Group2 IO operation functions 

  *  @brief UART Transmit and Receive functions 

  *

@verbatim

  ==============================================================================

                      ##### IO operation functions #####

  ==============================================================================

  [..]

    This subsection provides a set of functions allowing to manage the UART asynchronous

    and Half duplex data transfers.


    (#) There are two modes of transfer:

       (++) Blocking mode: The communication is performed in polling mode. 

            The HAL status of all data processing is returned by the same function 

            after finishing transfer.  

       (++) Non blocking mode: The communication is performed using Interrupts 

            or DMA, these APIs return the HAL status.

            The end of the data processing will be indicated through the 

            dedicated UART IRQ when using Interrupt mode or the DMA IRQ when 

            using DMA mode.

            The HAL_UART_TxCpltCallback(), HAL_UART_RxCpltCallback() user callbacks 

            will be executed respectively at the end of the transmit or receive process.

            The HAL_UART_ErrorCallback() user callback will be executed when 

            a communication error is detected.


    (#) Blocking mode APIs are:

        (++) HAL_UART_Transmit()

        (++) HAL_UART_Receive() 


    (#) Non Blocking mode APIs with Interrupt are:

        (++) HAL_UART_Transmit_IT()

        (++) HAL_UART_Receive_IT()

        (++) HAL_UART_IRQHandler()


    (#) Non Blocking mode functions with DMA are:

        (++) HAL_UART_Transmit_DMA()

        (++) HAL_UART_Receive_DMA()

        (++) HAL_UART_DMAPause()

        (++) HAL_UART_DMAResume()

        (++) HAL_UART_DMAStop()


    (#) A set of Transfer Complete Callbacks are provided in non blocking mode:

        (++) HAL_UART_TxHalfCpltCallback()

        (++) HAL_UART_TxCpltCallback()

        (++) HAL_UART_RxHalfCpltCallback()

        (++) HAL_UART_RxCpltCallback()

        (++) HAL_UART_ErrorCallback()


    [..]

      (@) In the Half duplex communication, it is forbidden to run the transmit 

          and receive process in parallel, the UART state HAL_UART_STATE_BUSY_TX_RX

          can't be useful.


可以看到 HAL_UART_TxCpltCallback() 的相关解释,发现其位发送完成的回调函数。

因此定义该函数后自行添加相关的代码即可完成。

关键字:STM32  HAL库  串口DMA  中断 引用地址:STM32 HAL库 串口DMA发送完成中断

上一篇:基于HAL库处理UART中断并接收串口传入的数据
下一篇:关于烈火四轴遥控器串口上传分析

推荐阅读

   Android One原本是谷歌与中国台湾的联发科共同开发的一个项目,旨在让手机制造商打造低成本的智能手机,这些手机主要是销售给新兴市场上的近10亿潜在用户。随着诸多手机厂商的加入,采用的芯片扩展到了高通。在今年小米推出了搭载骁龙660处理器的A2,搭配4GB RAM+64GB ROM,配备了一块5.99英寸18:9显示屏,分辨率为2160×1080,后置2000万像素+12...
CMSIS的DSP库提供了一类高级数学处理功能,包括:Basic math functionsFast math functionsComplex math functionsFiltersMatrix functionsTransformsMotor control functionsStatistical functionsSupport functionsInterpolation functions该库使用不同的函数来处理8位、16位和32位整型以及32位浮点型数据。STM32F429具有浮点处理器(FPU)...
8月28日,长川科技发布2020上半年报告显示,报告期内,其中主营业务收入31,828.90万元,同比增长211.76%;归属于上市公司股东的净利润2,638.06万元,同比增长2,351.61%。长川科技表示,报告期内,受到疫情及中美关系的影响,公司及时调整研发及销售策略,实现主营业务收入及净利润的双增长。在研发方面,报告期内,长川科技研发费用投入8,922.45万元,占营...
导读:欧洲电池制造商InoBat公司宣布与美国电池材料供应商Group14 Technologies公司进行合作,将使用Group14的专利硅基负极材料为汽车生产高能量密度的电池。InoBat公司表示,高能量密度电池市场需求飙升,相比传统锂离子电池,硅基负极材料的单位体积能量密度更高。Group14表示,能源部已经认可其“新颖的、可投入使用的纳米材料和可靠的工业规模工艺”...

史海拾趣

问答坊 | AI 解惑

单片机中最小二乘方滤波器的向量测量和功率计算

提供了一种每周波四点采样的最小二乘方滤波器,通过整型变换和查表求根等优化算法,可在单片机中实现相量的快速测量。分析了滤波器中相量的相位关系,并提供了两线制功率的计算方法。…

查看全部问答∨

那位大哥大姐有产生 白噪声信号,正弦波信号,脉冲信号,三角波,锯齿波的C/C++程序

本帖最后由 paulhyde 于 2014-9-15 09:14 编辑 内容同上,最好是完整的源代码程序,因为我是新手,小弟在次不胜感激啊!  …

查看全部问答∨

ADS J-TAG 串口驱动 安装视频

ADS  J-TAG  串口驱动  安装视频   无声.…

查看全部问答∨

讨厌的VAV (ZT)

我们大厦被投诉最多的是空调,几乎都是VAV。反应慢,可控性差,该出风时不出风,不该出风时狂出...... 最后害得技工不得不在电脑上控制几乎每个VAV,快把人累死。 其实最好的方式是在温控器上能直接控制风阀大小,不要什么VAV,什么PID.....其实 ...…

查看全部问答∨

求助NandFlash写驱动的问题

能读进去,写却怎么也写不进去 使用的芯片是S3c2440+k9f1208 哪位帮我好好看看吧! 代码如下 /* NAND Flash registers 2440*/ #define NFCONF    (*(volatile unsigned int *)0x4e000000) #define NFCONT    (*(volatile u ...…

查看全部问答∨

好机会!赴加拿大软件技术工程师4~10万加元年薪

1、高级动画特效编辑 2、嵌入式软件设计 3、MIS软件设计 4、2D与3D多媒体软件应用 5、软件产品开发 6、通信软件设计 以上职位要求: 1、本科学历或2年以上计算机专业学习证书 2、达到英语或法语工作水平 3、两年以上连续相关工作经历 签 ...…

查看全部问答∨

USB HID minidriver的问题

  我在做一个HID USB设备的minidriver,USB设备总是循环的发送相同的数据,在以中断传输方式读取数据的时候,我不知道该采用怎么样的方式:    1. 根据Walter Oney,HID USB设备的hidMinidriverRegistration.DevicesArePolled ...…

查看全部问答∨

用wavecom模块开发时出现模块收不到数据现实怎么回事?

用wavecom模块开发时出现模块收不到数据现实怎么回事?我用PPP建六连接后,用UDP发数据,发到服务中心软件上,数据能收到可是服务中心软件回的数据,我的串口收不到,不知是模块收到没转到串口还是就没收到?? 用TCP也是这样,在TCP建立连接时,用抓包工具 ...…

查看全部问答∨

STM32-Oneday技术讲座

  大家可以通过各种渠道拿到工具了,不知道有没有必要搞一个全国范围的技术讲座,围绕着软件,还有芯片的外围功能和调试技术,做一个入门级的培训。可以送一些书,,,  上海,深圳,北京  拿到工具的人希望讲 ...…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved