STM32 HAL库 串口DMA发送完成中断

发布者:暮烟微雨最新更新时间:2019-08-28 来源: eefocus关键字:STM32  HAL库  串口DMA  中断 手机看文章 扫描二维码
随时随地手机看文章

近期使用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中断并接收串口传入的数据
下一篇:关于烈火四轴遥控器串口上传分析

推荐阅读最新更新时间:2024-10-28 23:14

汇编语言实现中断嵌套的典型程序
设计一个基于单片机的声光报警电路。要求:利用按键触发外部中断0,蜂鸣器发音,发光二极管点亮,声光报警延迟1S后停止(利用定时器TO延时)。蜂鸣器由P1.2控制,发光二极管由P2.0控制。设计硬件电路并给出其完整的程序。 /*典型错误一*/ /* ORG 0000H AJMP MAIN ORG 0003H AJMP INTE0 ORG 000BH AJMP INT120 ORG 0030H MAIN: MOV R0,#00H SETB IT0 SETB EX0 SETB EA MOV TMOD,#01H MOV TH0,#4CH MOV TL0,#00H SETB ET0 HERE: AJMP HERE
[单片机]
STM32学习记录14 ucosii中的串口中断
先看邵老师的书中怎么写 里面写到: C/OS中,中断服务子程序要用汇编语言来写。然而,如果用户使用的C语言编译器支持在线汇编语言的话,用户可以直接将中断服务子程序代码放在C语言的程序文件中。 再看《M3权威指南》2.11.2节与9.11节中讲到Cortex-M3在进入异常时自动压栈。。。。返回时自动出栈,再也不需要汇编语言编写了。也就是说我们可以使用C语言来编写中断服务程序。并且省去了上面程序清单的(1)(5)(6). 其实ucos中的终端和裸奔的中断写法基本一致,只是加了几条语句,如下为串口中断的写法: void USART1_IRQHandler(void) { uint8_t RxData; O
[单片机]
<font color='red'>STM32</font>学习记录14 ucosii中的<font color='red'>串口</font><font color='red'>中断</font>
stm32 高级定时器1配置注意
void TIM1_Int_Init(u16 arr,u16 psc) { TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; NVIC_InitTypeDef NVIC_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE); //①时钟 TIM1 使能 //定时器 TIM1 初始化 TIM_TimeBaseStructure.TIM_Period = arr; //设置自动重装载寄存器周期的值 TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置时钟频率除数的预分频值
[单片机]
存储器与寄存器
一、前言追溯 备份寄存器 BKP 通用输入输出端口 GPIO 模拟/数字转换 ADC 定时器 TIMx(x=1...8) 实时时钟 RTC 独立看门狗 IWDG 窗口看门狗 WWDG 静态存储器控制器FSMC SDIO接口 SDIO 通用穿行总线 USB 控制器局域网 bxCAN 串行外设总线 SPI 芯片间总线接口 I2C 通用串行总线 OTG(OTG_FS) 以太网 ETH 二、存储器映射 存储器本身不具备地址信息,它的地址是厂商或用户分配的。 厂商或用户给存储器分配地址的过程成为存储器映射。
[单片机]
存储器与寄存器
STM32休眠时关闭看门狗计数的简单解决方案
测试平台 本文采用STM32L476进行测试,休眠模式为STOP,看门狗为独立看门狗IWDG。 其余STM32芯片可参考本贴进行测试。 问题的提出 在此之前对这个问题的解决方法主要有三种: (1)采用调试模式关闭内核的功能来关闭看门狗计数; (2)休眠时采用时钟唤醒来喂狗后继续休眠; (3)用基于系统时钟的窗口看门狗WWDG 第一种方法对STM32L476无效;第二种方案太折腾了,影响RTC使用且费电;第三种方案喂狗间隔太短。 问题的解决 官方数据手册中说明了可以在STOP休眠状态关闭IDWG 因此,只需要修改FLASH_OPTR寄存器的对应位既可以实现休眠免喂狗的功能。 源代码 源代码参考了STM3
[单片机]
<font color='red'>STM32</font>休眠时关闭看门狗计数的简单解决方案
51内核的中断中断向量
51内核的最基础的中断源请求有外部中断、定时器中断和串口中断,这也是学习和开发者最长用的。当然还有其他的中断源,比如ADC、SPI、PWM等。以外部中断0为例,在编程中常使用的方式为: void INT0()interrupt 0 using 1 { …… } 在这里特别做上笔记:其中前面的void INT0() 只是代表一个普通没有形参的函数而已,函数名写成什么都是可以的,这个到不重要。那么后面的就一个一个词的扣把: 其中 interrupt n 组成一组,n用来指明中断号,在函数后使用了interrupt关键字后,就会自动的生成中断向量,51内核中断号如下图,这是我今天查的正在使用的MCU: 例如:12 interrupt
[单片机]
STM32单片机-低功耗设置
STM32F103R8和RC的停机模式的休眠电流还不一样,R8停机模式实测为11uA,RC停机模式实测为30uA,还以为又是我的程序哪里没做好呢,仔细看了PDF,这两个芯片PDF上标的值的确有区别,和我测的值差不多,那我就没有再深究的意义了! 结合下文的高手经验,反复摸索, standby模式1.9uA,PWR_EnterSTOPMode(PWR_Regulator_LowPower, PWR_STOPEntry_WFI); stop模式:11uA, PWR_EnterSTANDBYMode(); 实验证明,将IO端口设成IPU/IPD/AIN/PPOUT=1/PPOUT=0/ODOUT=0,电流是基本
[单片机]
<font color='red'>STM32</font>单片机-低功耗设置
Microchip推新型低成本数字信号控制器系列
  采用免费算法的dsPIC33FJ12MC及dsPIC33FJ12GP系列有助于实现低成本和封装小巧的先进电机控制和传感器处理   全球领先的单片机和模拟半导体供应商——Microchip Technology Inc.(美国微芯科技公司)近日宣布将为永磁同步电机(PMSM)的无传感器磁场定向控制(FOC)提供免费源代码,并推出了封装小巧、价格最低的dsPIC33FJ12MC及dsPIC33FJ12GP数字信号控制器(DSC)系列。   有关免费源代码可运行于任意一款Microchip电机控制dsPIC数字信号控制器,包括最新的dsPIC33FJ12MC系列。源代码可在 www.microchip.com/motor 下载,
[嵌入式]
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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