STM32 DMA发送完成标志位的查询

发布者:悠然自在最新更新时间:2019-03-04 来源: eefocus关键字:STM32  DMA  标志位 手机看文章 扫描二维码
随时随地手机看文章


void HAL_DMA_IRQHandler(DMA_HandleTypeDef *hdma)

{

uint32_t flag_it = hdma->DmaBaseAddress->ISR;

  uint32_t source_it = hdma->Instance->CCR;

 

  /* Half Transfer Complete Interrupt management ******************************/

  if ((RESET != (flag_it & (DMA_FLAG_HT1 << hdma->ChannelIndex))) && (RESET != (source_it & DMA_IT_HT)))

  {

  /* Disable the half transfer interrupt if the DMA mode is not CIRCULAR */

  if((hdma->Instance->CCR & DMA_CCR_CIRC) == 0U)

  {

  /* Disable the half transfer interrupt */

  hdma->Instance->CCR &= ~DMA_IT_HT;

  }

 

  /* Clear the half transfer complete flag */

  hdma->DmaBaseAddress->IFCR = DMA_FLAG_HT1 << hdma->ChannelIndex;

 

  /* DMA peripheral state is not updated in Half Transfer */

  /* State is updated only in Transfer Complete case */

 

  if(hdma->XferHalfCpltCallback != NULL)

  {

  /* Half transfer callback */

  hdma->XferHalfCpltCallback(hdma);

  }

  }

 

  /* Transfer Complete Interrupt management ***********************************/

  else if ((RESET != (flag_it & (DMA_FLAG_TC1 << hdma->ChannelIndex))) && (RESET != (source_it & DMA_IT_TC)))

  {

  if((hdma->Instance->CCR & DMA_CCR_CIRC) == 0U)

  {

  /* Disable the transfer complete  & transfer error interrupts */

  /* if the DMA mode is not CIRCULAR */

  hdma->Instance->CCR &= ~(DMA_IT_TC | DMA_IT_TE);

 

  /* Change the DMA state */

  hdma->State = HAL_DMA_STATE_READY;

  }

 

  /* Clear the transfer complete flag */

  hdma->DmaBaseAddress->IFCR = DMA_FLAG_TC1 << hdma->ChannelIndex;

 

  /* Process Unlocked */

  __HAL_UNLOCK(hdma);

 

  if(hdma->XferCpltCallback != NULL)

  {

  /* Transfer complete callback */

  hdma->XferCpltCallback(hdma);

  if (hdma == huart2.hdmatx)

      {

            dma_finish_flag = 1;

  }

  }

  }

 

  /* Transfer Error Interrupt management ***************************************/

  else if (( RESET != (flag_it & (DMA_FLAG_TE1 << hdma->ChannelIndex))) && (RESET != (source_it & DMA_IT_TE)))

  {

  /* When a DMA transfer error occurs */

    /* A hardware clear of its EN bits is performed */

    /* Then, disable all DMA interrupts */

    hdma->Instance->CCR &= ~(DMA_IT_TC | DMA_IT_HT | DMA_IT_TE);

 

    /* Clear all flags */

    hdma->DmaBaseAddress->IFCR = DMA_FLAG_GL1 << hdma->ChannelIndex;

 

    /* Update error code */

    hdma->ErrorCode = HAL_DMA_ERROR_TE;

 

    /* Change the DMA state */

    hdma->State = HAL_DMA_STATE_READY;

 

    /* Process Unlocked */

    __HAL_UNLOCK(hdma);

 

    if(hdma->XferErrorCallback != NULL)

    {

    /* Transfer error callback */

    hdma->XferErrorCallback(hdma);

    }

   }

}

关键字:STM32  DMA  标志位 引用地址:STM32 DMA发送完成标志位的查询

上一篇:STM32 三路AD的使用方法
下一篇:MCU的I2S为slave时出现噪音的解决方案

推荐阅读最新更新时间:2024-03-16 16:24

stm32超声波测距程序
闲来传一些电设的时候写的一些小的功能程序,与大家分享交流。 单片机用的是STM32F103VC系列,超声波是淘宝买的一个模块,只有5个引脚,用起来很方便。 用的时候只需要其中4个脚,VCC,GND,TRIG,ECHO。 TRIG接PA8,OUT_PP模式;ECHO接PA9,IN_FLOATING模式。 #include stm32f10x_heads.h #include HelloRobot.h #include display.h void Tim2_Init(void); void TIM2_IRQHandler(void) { if(GPIO_ReadInputDataBit(GPIOE,
[单片机]
mbedtls | 09 - 数字签名算法的配置与使用
一、数字签名算法 1. 什么是数字签名 数字签名类似于盖章和签字,数字签名可以检查消息是否被篡改、并验证消息的可靠性,因为私钥只有签名者持有,所以还可以防止否认。 2. 数字签名算法 ① RSA数字签名 RSA数字签名算法基于RSA非对称加密算法,在用于数字签名时公钥和私钥的用法刚好相反: 发送方使用私钥对消息执行加密操作 = 对消息进行签名; 接收方使用公钥对签名进行解密 = 对签名进行认证; RSA签名算法还需要包括填充方法,有两种:PKCS1-V1.5和PSS(使用随机数填充,推荐使用)。 ② DSA算法 ③ ECDSA算法 在相同的安全等级下,ECDSA算法具有秘钥短、执行效率高的特点,更适合物联网应用。 二、R
[单片机]
mbedtls | 09 - 数字签名算法的配置与使用
STM32 关于ADC采交直流问题探讨
前沿 关于STM32采样问题,相信很多人曾遇到过这样的问题,无论是关于ADC底层相关的配置还是ADC采样方案的抉择,或者是ADC软硬件滤波算法,这里博主就自己曾做过的训练题为引申,探讨ADC采样过程中的问题。 1.ADC的认识 1.1 ADC初始化参数 /* Exported types ------------------------------------------------------------*/ /** * @brief ADC Init structure definition */ typedef struct { uint32_t ADC_Resolution;
[单片机]
<font color='red'>STM32</font> 关于ADC采交直流问题探讨
关于STM32GPIO口配置命令
以下代码摘自原子的stm32开发指南 //初始化 PB5 和 PE5 为输出口.并使能这两个口的时钟 void LED_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOE, ENABLE); //使能 PB,PE 端口时钟 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; //PB.5 推挽输出 GPIO_InitStructure.GPIO_M
[单片机]
STM32各个系列时钟调高时出现异常案例
STM32用户反馈,使用STM32F103内部时钟,把系统时钟配置成64MHz单片机就不跑了,配置成36MHz程序就正常妥妥的,频率稍高点就容易导致死机。他贴出的代码如下:void RCC_Configuration(void) { RCC_DeInit();//将外设 RCC寄存器重设为缺省值 RCC_HSICmd(ENABLE);//使能HSI while(RCC_GetFlagStatus(RCC_FLAG_HSIRDY) == RESET);//等待HSI使能成功 //FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); //FLASH_SetLatency(FLASH
[单片机]
<font color='red'>STM32</font>各个系列时钟调高时出现异常案例
STM32 输入捕获
PWM 输入捕获模式 xmlnamespace prefix = o ns = urn:schemas-microsoft-com:office:office / 一、概念理解 PWM输入捕获模式时输入捕获模式的特例 1、每个定时器有四个输入通道IC1、IC2、IC3、IC4,且IC1 IC2一组,IC3 IC4一组,并可是设置管脚和寄存器的对应关系 2、两个TI输出映射了两个ICx信号 3、这两个ICx信号分别在相反的极性边沿有效 4、两个边沿信号中的一个被选为触发信号,并且从模式控制器被设置成复位模式 5、当触发信号来临时,被设置成触发输入信号的捕获寄存器,捕获 一个PWM周期(即连续的两个上升沿或下降沿) ,他
[单片机]
STM32 USB学习笔记8
主机环境:Windows 7 SP1 开发环境:MDK5.14 目标板:STM32F103C8T6 开发库:STM32F1Cube库和STM32_USB_Device_Library 现在分析USB器件库核心文件的最后一个文件usbd_ctlreq,该文件提供了标准请求的处理,跟USB2.0协议的第九章节紧密关联。在Setup阶段根据bmRequest字段的内容分为:设备请求、接口请求、端点请求。并根据不同的请求调用不同的函数体,USB2.0协议中定义的标清请求有以下几种 通过第一个竖栏可以看出同一个请求代码可以对应多个接收者,例如CLEAR_FEATURE请求可以是设备请求也可以是接口请求,同样也可以是端点请求。对应的各个请
[单片机]
PCI9054芯片接口设计中若干问题的深入研究
  随着ISA总线逐步被淘汰,基于PCI总线的扩展板越来越被广泛地应用于各种高速、大数据量的处理系统中。尽管有许多供就商提供了各种通用的PCI总线扩展板,但在较多应用场合,用户还必须自行设计满足自己特殊需求的PCI扩展板,这就不可避免地会遇到PCI总线接口问题。对于绝大多数用户而言,选择专用PCI接口芯片进行PCI接口设计是必然的选择。   PIC9054是PLX公司推出的一种32位33MHz的PCI总线主控I/O加速器。它采用多种先进技术,使复杂的PCI接口应用设计变得相对简单。该芯片是目前主流的PCI接口芯片之一,其功能和性能如下: ·符合PCI V2.2规范,包含PCI电源管理特性; ·支持PCI双地址周期,地址空间高达4GB
[嵌入式]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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