adc 使用教程3-dma方式采集数据+dma中断通知

adc 的扫描模式就是把配置了规则或注入通道按照配置的顺序采集一轮

adc 的连续转换模式就是把配置了规则或注入通道按照配置的顺序采集N轮

1.时钟配置

/*使能各种时钟和adc时钟分频输入*/
void rcu_config_adc(void)
{/*使能GPIO时钟 */rcu_periph_clock_enable(RCU_GPIOA);/* 使能DMA时钟*/rcu_periph_clock_enable(RCU_ADC0);/* enable DMA0 clock ADC 对应的DMA 就是DMA0*/rcu_periph_clock_enable(RCU_DMA0);/* 配置ADC时钟 ,ADC最大14MHz*/rcu_adc_clock_config(RCU_CKADC_CKAPB2_DIV8);
}

2.gpio配置

/*配置gpio
*/
void gpio_config_adc(void)
{/*配置gpio为模拟输入模式 */gpio_init(GPIOA, GPIO_MODE_AIN, GPIO_OSPEED_50MHZ, GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4);
}

2.dma配置

/*dma配置*/
void dma_config(void)
{/* ADC_DMA_channel configuration */dma_parameter_struct dma_data_parameter;/* 复位dma 通道0 */dma_deinit(DMA0, DMA_CH0);/* initialize DMA single data mode */dma_data_parameter.periph_addr  = (uint32_t)(&ADC_RDATA(ADC0));//配置外设寄存器为adc的规则数据寄存器dma_data_parameter.periph_inc   = DMA_PERIPH_INCREASE_DISABLE;//外设寄存器地址不增加dma_data_parameter.memory_addr  = (uint32_t)(&adc_value);//存放数据的内存地址dma_data_parameter.memory_inc   = DMA_MEMORY_INCREASE_ENABLE;//存放数据的内存地址自增dma_data_parameter.periph_width = DMA_PERIPHERAL_WIDTH_16BIT;//外设数据宽度16位dma_data_parameter.memory_width = DMA_MEMORY_WIDTH_16BIT;//内存数据宽度16位dma_data_parameter.direction    = DMA_PERIPHERAL_TO_MEMORY;//数据传输方式是外设到内存dma_data_parameter.number       = 4U;//dma传输数量dma_data_parameter.priority     = DMA_PRIORITY_HIGH;//dma优先级高dma_init(DMA0, DMA_CH0, &dma_data_parameter);dma_circulation_enable(DMA0, DMA_CH0);//循环模式开启//中断管理器开启通道4中断nvic_irq_enable(DMA0_Channel0_IRQn, 0, 1);  /* dam 转换结束产生中断*/dma_interrupt_enable(DMA0, DMA_CH0, DMA_INT_FTF);/* 使能dma通道0 */dma_channel_enable(DMA0, DMA_CH0);//使能dma通道0
}

4.ADC配置

/*!配置ADC外设*/
void adc_config_continue_scan_dma(void)
{/* 设置adc工作在独立模式*/adc_mode_config(ADC_MODE_FREE);/* 连续转换模式使能 */adc_special_function_config(ADC0, ADC_CONTINUOUS_MODE, ENABLE);/* 扫描模式使能*/adc_special_function_config(ADC0, ADC_SCAN_MODE, ENABLE);/* ADC 数据右对齐模式*/adc_data_alignment_config(ADC0, ADC_DATAALIGN_RIGHT);/* ADC 设置规则通道数量*/adc_channel_length_config(ADC0, ADC_REGULAR_CHANNEL, 4U);//配置4个规则通道的采集参数adc_regular_channel_config(ADC0, 0, ADC_CHANNEL_0, ADC_SAMPLETIME_55POINT5);adc_regular_channel_config(ADC0, 1, ADC_CHANNEL_1, ADC_SAMPLETIME_55POINT5);adc_regular_channel_config(ADC0, 2, ADC_CHANNEL_2, ADC_SAMPLETIME_55POINT5);adc_regular_channel_config(ADC0, 3, ADC_CHANNEL_3, ADC_SAMPLETIME_55POINT5);/* ADC 规则通道触发源选择 */adc_external_trigger_source_config(ADC0, ADC_REGULAR_CHANNEL, ADC0_1_2_EXTTRIG_REGULAR_NONE); /* ADC 规则组使能*/adc_external_trigger_config(ADC0, ADC_REGULAR_CHANNEL, ENABLE);/* 使能定时器*/adc_enable(ADC0);delay_1ms(1U);/* 标定复位ADC */adc_calibration_enable(ADC0);/* ADC DMA 使能 */adc_dma_mode_enable(ADC0);/* ADC 软件触发使能 */adc_software_trigger_enable(ADC0, ADC_REGULAR_CHANNEL);
}

5.中断处理函数

/*dma中断处理函数
*/
void DMA0_Channel0_IRQHandler(void)
{if(dma_interrupt_flag_get(DMA0, DMA_CH0, DMA_INT_FLAG_FTF)){  //清除dma中断标记dma_interrupt_flag_clear(DMA0, DMA_CH0, DMA_INT_FLAG_G);dma_finish = SET;}
}

6.测试示例

void adc_test()
{rcu_config_adc();gpio_config_adc();dma_config();adc_config_continue_scan_dma();while(1){delay_1ms(100);printf("%d %d %d %d \r\n",adc_value[0],adc_value[1],adc_value[2],adc_value[3]);}}

7.测试结果

17. GD32F103C8T6入门教程-adc 使用教程2-dma+连续扫描方式采集数据++dma中断通知相关推荐

  1. 16. GD32F103C8T6入门教程-adc 使用教程2-dma+连续扫描方式采集数据

    adc 使用教程2-dma+连续扫描方式采集数据 adc 的扫描模式就是把配置了规则或注入通道按照配置的顺序采集一轮 adc 的连续转换模式就是把配置了规则或注入通道按照配置的顺序采集N轮 1.时钟配 ...

  2. 19. GD32F103C8T6入门教程-adc使用教程6-外部中断线11触发adc0

    adc 使用教程6-外部中断线11触发adc0 使用外部中断线11 触发ADC开始采集数据,PA11 gpio 1.初始化时钟和定义全局变量 /*保存ADC值*/ uint32_t adc_value ...

  3. 【大数据入门核心技术-Flume】(四)使用Flume采集数据到Hive

    [大数据入门核心技术-Kafka](七)Ka 录 一.准备工作 1.Hadoop环境安装 2.Flume安装部署 二.采集数据到HDFS 1.配置任务文件 2.启动传输 3.查看是否同步成功 三.常见 ...

  4. 基于STM32的ADC电压采集(DMA传输)

    我最近在写stm32的adc电压采集过程中遇到了一些问题,这些问题或许对stm32初学者入手adc有所帮助. 对adc采集到的数据进行均值滤波处理,新建一个数组ADC_ConvertedValue_1 ...

  5. STM32——多通道ADC的DMA方式采集方法

    前言: 最近在调试STM32F205芯片ADC多通道DMA方式采集数据,总结下STM32多通道ADC的DMA方式采集的使用方法. 硬件平台:STM32F205 软件平台:keil v5 函数库:标准库 ...

  6. 20. GD32F103C8T6入门教程-adc使用外部中断IT11触发启动adc规则通道,使用外中断IT15触发注入组

    adc 使用教程6-使用外部中断IT11触发启动adc规则通道,使用外中断IT15触发注入组 ADC支持18个多路通道,可以把转换组织成两组:一个规则组通道和一个注入组通道 规则组,可以按照特定的序列 ...

  7. 18. GD32F103C8T6入门教程-adc-使用教程5-定时器TIM2更新事件触发adc0

    adc 使用教程5-定时器TIM2更新事件触发adc0 但是本实验出现了一个异常,单片机大概路出现更新事件没有启动ADC转换,可是没有找到处理办法,但是定时器的是正常工作LED灯闪烁 1.使能各种时钟 ...

  8. 24. GD32F103C8T6入门教程-IAP升级教程

    GD32f103C8T6 IAP 升级教程 参考stm32的IAP升级原理 IAP测试源码 GD32和stm32的内核都是一样的,又因为IAP升级主要涉及升级的路径之和内核先关,所以gd32和stm3 ...

  9. ASP.NET Core 入门教程 8、ASP.NET Core + Entity Framework Core 数据访问入门

    ASP.NET Core 入门教程 8.ASP.NET Core + Entity Framework Core 数据访问入门 原文:ASP.NET Core 入门教程 8.ASP.NET Core ...

最新文章

  1. OpenCV-Python官方文档学习笔记(上)
  2. html刷新页面出现412,html5-video – 如何修复412(前置条件失败)错误HTML5视频标记
  3. python学习之路二
  4. jvisualvm远程监控Tomcat
  5. 【深入Cocos2d-x】探索Cocos2d-x中的内存管理-引用计数和自动释放池
  6. 解决mysql无法启动和重启:mysql.sock文件解锁
  7. Android Java和JavaScript互调
  8. oracle 获取系统年 月,Oracle 获取当前年、月、日
  9. 和我一起学WCF(6):宿主(Hosting)
  10. 使用JDK 13查看TLS配置
  11. Python数据挖掘与机器学习技术入门实战
  12. 不同的二叉搜索树 II
  13. Linux中的文件查找技巧
  14. InstallShield Crack,虚拟应用程序构建可靠
  15. 解决安装软件时出现的error1723,以安装破解版Endnote X9为例(附资源)
  16. 计算机kb和gb单位的在线换算器,KB/MB/GB。。单位换算
  17. 记录Android dnk 文档
  18. win7降低屏幕亮度_Win7电脑屏幕亮度怎么调?Win7调节屏幕亮度的步骤
  19. “逐日之弓”AI 光伏开发大赛培训开启 Imagination解读AI处理器创新应用
  20. div+css(一)

热门文章

  1. java质因数算法_Java实现的质因数分解操作示例【基于递归算法】
  2. 管家婆辉煌版软件的使用方法_管家婆软件进销存的使用方法,管家婆软件使用教程_双全科技...
  3. Java 算法 最大体积
  4. 企业千人千面管理模式_金山云助力新零售:如何让零售企业实现“千人千面”...
  5. Linux/Mac 配置安装scala
  6. iphone控制电脑_苹果远程控制电脑软件免费下载-超控Controlax(iPhone远程控制Windows)v1.1 最新版...
  7. mysql存储过程 等于_mysql存储过程字符串等于
  8. log4j 禁止类输出日志_springboot日志详解
  9. collapse用法
  10. 软件测试缺陷定义和管理