APM32F030多通道ADC采样
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采样相关推荐
- STM32的ADC采样与多通道ADC采样
一 单通道采样 参考资料: <STM32库开发实战指南> 刘火良,杨森著 原理性质的东西还是少讲,因为上面那本书里面讲解的很详细了,直接来看硬件电路图 这里使用的是3362电位器(10K ...
- STM32多通道ADC采样获取GY-25A倾角传感器模拟输出数据
STM32多通道ADC采样获取GY-25A倾角传感器模拟输出数据 GY-25A模块是新型的倾角传感器模块,具有X和Y两轴模拟角度输出和串口角度输出的功能.这里介绍STM32获取GY-25A模拟输出的角 ...
- STM32多通道ADC采样获取MCP9701模拟温度传感器温度输出数据
STM32多通道ADC采样获取MCP9701模拟温度传感器温度输出数据 市面上常见的模拟温度传感器有TI的LM35系列,然后使用中并不简便.MCP9701是Microchip公司推出的相似的模拟温度传 ...
- ATMEL SAMC20J多通道ADC问题
## ATMEL SAMC20J多通道ADC问题##最近,在学习使用ATMEL单片机,用到的是SAMC20J18A,当调试多通道ADC时,遇到了一些问题,其中有关多通道ADC采样问题整了比较久.记录一 ...
- cubemx 配置多通道ADC进行ADC采样
cubemx 配置多通道ADC进行ADC采样 AD的基础知识 AD很复杂,其实也不复杂,因为我们用的不多. AD:模拟量转换数字量(模拟信号转换数字信号). ADC:模拟量转数字量的转换器. 为什么需 ...
- 瑞萨e2studio(7)----ADC通过单次扫描多通道方式采样
瑞萨e2studio.7--ADC通过单次扫描多通道方式采样 概述 视频教学 csdn课程 样品申请 硬件准备 开发板 新建工程 工程模板 保存工程路径 芯片配置 工程模板选择 时钟设置 UART配置 ...
- 多通道ADC一致性的高精度测量方法
在散射计数字处理系统中,需要多通道ADC电路来对数据进行采样.在该系统中,需要对ADC采集后的数据进行数字下变频.脉冲压缩和波束合成等处理.然而,由于采样电路的路数很多,各个ADC通道由于布线差异.时 ...
- stm32f429之多通道ADC通过DMA数据采集
stm32f429之多通道ADC通过DMA数据采集 原来的程序使用时stm32f103的芯片,现在给为stm32f429的芯片,查看一下几家开发板例程,发现没有使用adc+dma的,在网上也搜索了一下 ...
- 基于STM32F4:多通道ADC采集,采用DMA的形式,亲测有效
基于STM32F4的多通道ADC采集 单片机源程序如下: #include "sys.h" #include "delay.h" #include " ...
最新文章
- .net自定义控件Control、WebControl、CompositeControl
- Windows 10 开启有线无线802.1x脚本
- 百度地图——判断用户是否在配送范围内解决方案
- python如何判断为空_python中怎么判断是否为空
- 线段树(单点更新,区间查询) HDU 1754 I Hate It
- android fragment传递参数_fragment之间传值的两种方法
- Python 中的 None 与真假
- 浅析pc机上如何将vmlinuz-2.6.31-14-generic解压出vmlinux
- 2021年系统集成项目管理工程师资料下载
- 湍流公式推导系列——(一) 不可压湍动能方程的推导与含义
- pix4d无人机影像处理_PhotoScan和Pix4Dmapper的无人机影像快速处理模式对比实验
- MATLAB绘图(一)
- android使图片变为圆形
- 2005年5月23日星期一
- 什么是业务流程管理BPM
- 深度学习之3D卷积神经网络
- 20211220使用Hiburn给小熊派刷机
- 电脑端“一键“获得一个手机端截屏
- Android支付接入(四):联通支付
- 使用ResNet18网络实现对Cifar-100数据集分类