adc 使用教程2-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);//循环模式开启/* enable DMA channel */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.测试示例

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]);}}

6.测试结果

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

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

    adc 使用教程3-dma方式采集数据+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方式采集方法

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

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

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

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

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

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

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

  8. 26. GD32F103C8T6入门教程-CAN外设回环测试

    1.基础知识 相关stm32CAN外设 外设特征: 3个发送邮箱 2个深度为3个邮箱的接收FIFO 自动重传 自动唤醒 发送.接收时间戳 最大速率1Mbps 3种工作模式 睡眠模式:可以检车总线状态自 ...

  9. C#游戏开发快速入门教程Unity5.5教程

    C#游戏开发快速入门教程Unity5.5教程 试读文档下载地址:http://pan.baidu.com/s/1slwBHoD C#是微软发布的高级程序设计语言,这门语言和C语言一样,已经成为了大学计 ...

最新文章

  1. 【转】工厂模式面向接口编程
  2. 获取可视区域高度赋值给div(解决document.body.clientHeight的返回值为0的问题)
  3. ftp的主动模式(port)与被动模式(PASV)
  4. 20、Flask实战第20天:Flask上下文
  5. Linux系统网络基础知识及配置
  6. python在不同层级目录import模块的方法
  7. 撸表情开发过程中使用腾讯云存储的接入实例分享
  8. Xcode怎样调整模拟器大小
  9. Peoplesoft取Translate Value标签值的方法
  10. 50. 第一个只出现一次的字符
  11. Windows 7 / Windows 10 安装 IPX/SPX
  12. 信道容量受哪三个要素_好的餐饮店门头招牌应该怎么设计呢?需要具备哪些要素?...
  13. ButterKnife被弃用,ViewBinding才是findView的未来?
  14. RT5350订制WIFI转串口
  15. 同一片天空共眠,同一个梦想奋斗《大抠车始歌》(1)
  16. DB2 Merge 语句的使用
  17. linux 后台运行jar包 报错no main manifest attribute, in xxx.jar
  18. 人像摆姿参考--西野七瀬(1)
  19. 防汛智能新尖兵,野外监测测报新技术
  20. netty之Protostuff序列化协议

热门文章

  1. 数据可视化之MATPLOTLIB实战:PLT.POLAR()函数 绘制极线图 (转载)
  2. 标准工业关系型数据库和对象关系数据库
  3. php中图片怎么加样式,html5实现各种图片样式实例用法汇总
  4. java基本命令_java基础篇 快捷键 常见Dos命令等等
  5. Java 算法数字黑洞
  6. java 读写分离 mvc_spring MVC、mybatis配置读写分离
  7. pandas Series 判断每个元素是否包含某个子串
  8. 和doc的区别怎么转换手机_如何把doc文件转换成PDF格式?高手告诉你应该这么做...
  9. mysql的账户之间_MySQL用户管理
  10. 当包装类的要与基本类型进行比较时候 需要先将包装类降级为基本类型