完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
规则组最多包含16个转换通道,也就是说ADC_NbrOfChannel可以设置上限为16
在每个组的每个通道上执行单次转换。在每个转换结束时,同一组的下一个通道被自动转换。如果设置了ADC_CR2寄存器CONT位为1(从实践结果来看,调用库函数的时候该位会置1),转换不会在选择组的后一个通道上停止,而是再次从选择组的第一个通道继续转换。 如 #include"STM32f10x.h"#include"mq135.h"#include"delay.h"u16 channel1;u16 channel2;u8 flag=0;void mq135adc_init(void){ ADC_InitTypeDef ADC_1;GPIO_InitTypeDef PA1; //ADC1通道1RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1|RCC_APB2Periph_GPIOA,ENABLE); //使能GPIOA、ADC1时钟RCC_ADCCLKConfig(RCC_PCLK2_Div6); //设置ADC时钟分频因子为6,72/6=12MHz ADC时钟频率PA1.GPIO_Pin=GPIO_Pin_1;PA1.GPIO_Mode=GPIO_Mode_AIN;PA1.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOA,&PA1);PA1.GPIO_Pin=GPIO_Pin_2;PA1.GPIO_Mode=GPIO_Mode_AIN;PA1.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOA,&PA1);ADC_1.ADC_ScanConvMode=ENABLE; //两个通道PA1,PA2,开启连续扫描模式ADC_1.ADC_ContinuousConvMode=ENABLE; //连续转换,一个规则组,两个规则通道PA1,PA2,两个转换完了,又从同一组的第一个通道开始转ADC_1.ADC_ExternalTrigConv=ADC_ExternalTrigConv_None; //启动规则通道转换的事件(启动ADC转换的外围事件),这里SWSTART软件触发ADC_1.ADC_DataAlign=ADC_DataAlign_Right; //ADC转换出来的数据(12位)存于ADC_DR(16位)右侧ADC_1.ADC_NbrOfChannel=2; //比如,设置规则通道(规则通道由1~16个小通道组成)中有多少个通道,也就是设置规则通道长度ADC_Init(ADC1,&ADC_1); ADC_Cmd(ADC1,ENABLE); //开启ADC1ADC_ResetCalibration(ADC1); //执行复位校准while(ADC_GetResetCalibrationStatus(ADC1)); //等待复位校准结束ADC_StartCalibration(ADC1); //执行ADC校准while(ADC_GetCalibrationStatus(ADC1)); //等待ADC校准完毕ADC_RegularChannelConfig(ADC1,ADC_Channel_1,1,ADC_SampleTime_239Cycles5); //规则组,通道1为1级,优先转换ADC_RegularChannelConfig(ADC1,ADC_Channel_2,2,ADC_SampleTime_239Cycles5); //规则组,通道2为2级,次先转换}void Get_Adc(void) //设置两个等待是为了验证连续扫描,扫完了通道1,接着扫通道2{ADC_SoftwareStartConvCmd(ADC1,ENABLE); //软件触发ADC转换while(!ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC)); //规则组,等待通道1转换完成channel1=ADC_GetConversionValue(ADC1); while(!ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC)); //规则组,等待通道2转换完成channel2=ADC_GetConversionValue(ADC1); } #include "stm32f10x.h"#include "mq135.h"#include "delay.h"#include "lcd.h"void mq135adc_init(void);extern u16 channel1;extern u16 channel2;u16 Get_Adc_Average(u8 times);void Get_Adc(void); int main(void) {u16 temp_adc_value;delay_init();LCD_Init(); mq135adc_init();POINT_COLOR=BLACK;LCD_ShowString(60,130,200,16,16,"ADC_CH1_VAL:"); LCD_ShowString(60,150,200,16,16,"ADC_CH2_VAL:"); while(1){ Get_Adc(); LCD_ShowxNum(156,130,channel1,4,16,0);//显示 ADC 的值 LCD_ShowxNum(156,150,channel2,4,16,0);//显示 ADC 的值 delay_ms(1000);} } #include"stm32f10x.h"void mq135adc_init(void);extern u8 i;void Get_Adc(void);u16 Get_Adc_Average(u8 times);ADC_CH1_VAL(通道1)采集板子3.3V电压 ADC_CH2_VAL(通道2)采集气体传感器MQ135的电压
|
|
相关推荐
|
|
只有小组成员才能发言,加入小组>>
1290 浏览 0 评论
2050 浏览 0 评论
7822 浏览 0 评论
写了一个用DMA读取ADC数据的程序,记录下整个过程和一点心得
3192 浏览 0 评论
3456 浏览 0 评论
1239浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-10-1 05:45 , Processed in 0.497645 second(s), Total 74, Slave 55 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号