APM32F030是极海半导体对标stm32F030的M0内核的芯片,最近几年国外芯片价格飞涨,公司因成本考虑,采用了这款芯片。APM32F030中12 位精度的 ADC,共 18 个通道, 16 个外部通道和 2 个内部通道, 各通道 A/D转换模式有单次、连续和断续, ADC 转换结果可以左对齐或右对齐存储在 16 位数据寄存器中。stm32F030的程序可以用在APM32F030上。

  因需要要采集PC0和PC1两个引脚的AD值,对应于ADC_CHANNEL_10和ADC_CHANNEL_11,再调试过程中发现单独采集一个通道的值都是好的,然而采集两个通道时两个通道的值每次都差不多,将一个引脚直接拉低,采集到的两个通道值都为0,显然这是不对的,在网上查看一下资料后,发现要在获取值的时要加入ADC->CHSEL = (uint32_t)ch;  //这个非常重要,没有这句无法正常获取多通道的AD值。在此记录一下 

void ADCInit(void)
{
    GPIO_Config_T gpioConfig;
    ADC_Config_T  adcConfig;

/** RCM Enable*/
    RCM_EnableAHBPeriphClock(RCM_AHB_PERIPH_GPIOC);
    RCM_EnableAPB2PeriphClock(RCM_APB2_PERIPH_ADC1);
    RCM_EnableAPB2PeriphClock(RCM_APB2_PERIPH_SYSCFG);
    /** GPIO Configuration */
    gpioConfig.pin = GPIO_PIN_0;
    gpioConfig.mode = GPIO_MODE_AN;
    gpioConfig.pupd = GPIO_PUPD_NO;
    GPIO_Config(GPIOC, &gpioConfig);
 
    gpioConfig.pin = GPIO_PIN_1;
    gpioConfig.mode = GPIO_MODE_AN;
    gpioConfig.pupd = GPIO_PUPD_NO;
    GPIO_Config(GPIOC, &gpioConfig); 
    /** ADC Configuration */
    ADC_Reset();
    ADC_ConfigStructInit(&adcConfig);
    /** Set resolution*/
    adcConfig.resolution = ADC_RESOLUTION_12B;
    /** Set dataAlign*/
    adcConfig.dataAlign = ADC_DATA_ALIGN_RIGHT;
    /** Set scanDir*/
    adcConfig.scanDir = ADC_SCAN_DIR_UPWARD;
    /** Set convMode continous*/
    adcConfig.convMode   = ADC_CONVERSION_SINGLE;
    /** Set extTrigConv*/
//    adcConfig.extTrigConv  = ADC_EXT_TRIG_CONV_TRG0;
    /** Set TrigEdge*/
    adcConfig.extTrigEdge = ADC_EXT_TRIG_EDGE_NONE;

ADC_Config(&adcConfig);
  
//    ADC_ConfigChannel(ADC_CHANNEL_10, ADC_SAMPLE_TIME_239_5);
//        ADC_ConfigChannel(ADC_CHANNEL_11, ADC_SAMPLE_TIME_239_5);
    /** Calibration*/
    ADC_ReadCalibrationFactor();
    /** Enable ADC*/
    ADC_Enable();

}

//获取ADC通道的值
//ch 通道值0-16
//获取转换结果
uint32_t Get_Adc(uint32_t ch)   
{

uint32_t adc_index = 0;
    unsigned char retry=0;
  ADC_ConfigChannel(ch, ADC_SAMPLE_TIME_239_5); 
    ADC->CHSEL = (uint32_t)ch;  //这个非常重要,没有这句无法正常获取多通道的AD值
  while (!ADC_ReadStatusFlag(ADC_FLAG_ADRDY)){
        retry++;
        if(retry>200)return 0;
    };
   ADC_StartConversion();
   retry = 0;
   while(ADC_ReadStatusFlag(ADC_FLAG_CC) == RESET){
         retry++;
        if(retry>200)return 0;
     };
        /** Read ADC Conversion value*/
    
   adc_index = ADC_ReadConversionValue();
     ADC_StopConversion();
   return adc_index;
}

再次提醒ADC->CHSEL = (uint32_t)ch;  //这个非常重要,没有这句无法正常获取多通道的AD值

APM32F030多通道ADC采样相关推荐

  1. STM32的ADC采样与多通道ADC采样

    一 单通道采样  参考资料: <STM32库开发实战指南> 刘火良,杨森著 原理性质的东西还是少讲,因为上面那本书里面讲解的很详细了,直接来看硬件电路图 这里使用的是3362电位器(10K ...

  2. STM32多通道ADC采样获取GY-25A倾角传感器模拟输出数据

    STM32多通道ADC采样获取GY-25A倾角传感器模拟输出数据 GY-25A模块是新型的倾角传感器模块,具有X和Y两轴模拟角度输出和串口角度输出的功能.这里介绍STM32获取GY-25A模拟输出的角 ...

  3. STM32多通道ADC采样获取MCP9701模拟温度传感器温度输出数据

    STM32多通道ADC采样获取MCP9701模拟温度传感器温度输出数据 市面上常见的模拟温度传感器有TI的LM35系列,然后使用中并不简便.MCP9701是Microchip公司推出的相似的模拟温度传 ...

  4. ATMEL SAMC20J多通道ADC问题

    ## ATMEL SAMC20J多通道ADC问题##最近,在学习使用ATMEL单片机,用到的是SAMC20J18A,当调试多通道ADC时,遇到了一些问题,其中有关多通道ADC采样问题整了比较久.记录一 ...

  5. cubemx 配置多通道ADC进行ADC采样

    cubemx 配置多通道ADC进行ADC采样 AD的基础知识 AD很复杂,其实也不复杂,因为我们用的不多. AD:模拟量转换数字量(模拟信号转换数字信号). ADC:模拟量转数字量的转换器. 为什么需 ...

  6. 瑞萨e2studio(7)----ADC通过单次扫描多通道方式采样

    瑞萨e2studio.7--ADC通过单次扫描多通道方式采样 概述 视频教学 csdn课程 样品申请 硬件准备 开发板 新建工程 工程模板 保存工程路径 芯片配置 工程模板选择 时钟设置 UART配置 ...

  7. 多通道ADC一致性的高精度测量方法

    在散射计数字处理系统中,需要多通道ADC电路来对数据进行采样.在该系统中,需要对ADC采集后的数据进行数字下变频.脉冲压缩和波束合成等处理.然而,由于采样电路的路数很多,各个ADC通道由于布线差异.时 ...

  8. stm32f429之多通道ADC通过DMA数据采集

    stm32f429之多通道ADC通过DMA数据采集 原来的程序使用时stm32f103的芯片,现在给为stm32f429的芯片,查看一下几家开发板例程,发现没有使用adc+dma的,在网上也搜索了一下 ...

  9. 基于STM32F4:多通道ADC采集,采用DMA的形式,亲测有效

    基于STM32F4的多通道ADC采集 单片机源程序如下: #include "sys.h" #include "delay.h" #include " ...

最新文章

  1. .net自定义控件Control、WebControl、CompositeControl
  2. Windows 10 开启有线无线802.1x脚本
  3. 百度地图——判断用户是否在配送范围内解决方案
  4. python如何判断为空_python中怎么判断是否为空
  5. 线段树(单点更新,区间查询) HDU 1754 I Hate It
  6. android fragment传递参数_fragment之间传值的两种方法
  7. Python 中的 None 与真假
  8. 浅析pc机上如何将vmlinuz-2.6.31-14-generic解压出vmlinux
  9. 2021年系统集成项目管理工程师资料下载
  10. 湍流公式推导系列——(一) 不可压湍动能方程的推导与含义
  11. pix4d无人机影像处理_PhotoScan和Pix4Dmapper的无人机影像快速处理模式对比实验
  12. MATLAB绘图(一)
  13. android使图片变为圆形
  14. 2005年5月23日星期一
  15. 什么是业务流程管理BPM
  16. 深度学习之3D卷积神经网络
  17. 20211220使用Hiburn给小熊派刷机
  18. 电脑端“一键“获得一个手机端截屏
  19. Android支付接入(四):联通支付
  20. 使用ResNet18网络实现对Cifar-100数据集分类

热门文章

  1. 计算机图形学--实时光线追踪
  2. 设定是否使用IOB中的寄存器
  3. 快速游戏开发工具GameMaker Action Game Maker使用体验
  4. 【中学】求解一元二次方程
  5. 通信工程/电子信息工程 保研夏令营/预推免流程分析
  6. ios ipad里面调用系统相册图片不完整解决方法
  7. 正则验证邮箱,手机号
  8. ADO.Net 之手机通讯录
  9. java生成 *.crt和*.key文件与*.keystore *.jks文件的转换
  10. 电力行业三次谐波计算