完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
各位安安
想请教一个有关于AD问题 目前我使用MM32F031V8T这个MCU 我目前我会用到两组AD通道 AD0以及AD1动作 我发现在切换过程中疑似有问题 于是我就分开独立进行 发现设定AD0通道动作读出来的数值不变维持在某值 可是设定AD1却是可以行得通 是我设定上哪里有问题吗? 以下附程式码(初始化及读值) 不好意思 要请教大家多多帮忙了>< void ADC_Init(void){ RCC->AHBENR |= 1<<17; //使能GPIOA时钟 RCC->APB2ENR |= RCC_APB2ENR_ADC1EN; //使能ADC1时钟 GPIOA->CRL &= 0XFFFFFF00; //PA0 anolog输入 RCC->APB2RSTR |= RCC_APB2RSTR_ADC1RST; //ADC interface reset RCC->APB2RSTR &= ~(RCC_APB2RSTR_ADC1RST); //ADC interface reset close ADC1->ADCFG |= ADCFG_ADCPRE_8|ADCFG_ADCPRE_10;//osc 8M*2/1 = 16M,16MHz/(7+1)/2 = 1Mhz =>period = 2us ADC1->ADCR &= ~(ADCR_ADMD_PERIOD|ADCR_ADMD_CONtiNUE|ADCR_ALIGN_LEFT);//单次非周期模式,数据右对齐 ADC1->ADCR |= ADCR_ADMD_SINGLE; ADC1->ADCFG |= ADCFG_ADEN; //ADC使能 ADC1->ADCR |= ADCR_ADST; //开始转换 } uint16_t Func_GetADValue(void){ usADSTA = ADC1->ADSTA; ADC1->ADCFG &= ~ADCFG_ADEN; //ADC Disable ADC1->ADSTA = 0x00; ADC1->ADCHS = ADCHS_CHEN0; //CH0=>ADCHS_CHEN0 ;CH0 =>ADCHS_CHEN1 (只改变这通道设定) ADC1->ADCR |= ADCR_ADST; //开始转换 ADC1->ADCFG |= ADCFG_ADEN; //ADC enable ADC1->ADCR |= ADCR_ADST; do{ usADSTA = ADC1->ADCR; usADSTA &= ADCR_ADST; }while(usADSTA != 0); usCH0Value = ADC1->ADDATA&0xfff; return usCH0Value; } |
|
相关推荐
5个回答
|
|
我使用1K和2K电阻进行分压接3.3V和GND,AD0通道和1通道,电压表测量和用串口打印的数据是没有问题的,测试代码如下:extern uint32_t usADSTA;
extern uint32_t usCH0Value; void ADC_Init(void) { RCC->AHBENR |= 1<<17; //使能GPIOA时钟 RCC->APB2ENR |= RCC_APB2ENR_ADC1EN; //使能ADC1时钟 GPIOA->CRL &= 0XFFFFFF00; //PA0 anolog输入 RCC->APB2RSTR |= RCC_APB2RSTR_ADC1RST; //ADC interface reset RCC->APB2RSTR &= ~(RCC_APB2RSTR_ADC1RST); //ADC interface reset close ADC1->ADCFG |= ADCFG_ADCPRE_8|ADCFG_ADCPRE_10;//osc 8M*2/1 = 16M,16MHz/(7+1)/2 = 1Mhz =>period = 2us ADC1->ADCR &= ~(ADCR_ADMD_PERIOD|ADCR_ADMD_CONTINUE|ADCR_ALIGN_LEFT);//单次非周期模式,数据右对齐 ADC1->ADCR |= ADCR_ADMD_SINGLE; ADC1->ADCFG |= ADCFG_ADEN; //ADC使能 ADC1->ADCR |= ADCR_ADST; //开始转换 } uint16_t Func_GetADValue(void) { usADSTA = ADC1->ADSTA; ADC1->ADCFG &= ~ADCFG_ADEN; //ADC Disable ADC1->ADSTA = 0x00; ADC1->ADCHS = ADCHS_CHEN1; //CH0=>ADCHS_CHEN0 ;CH0 =>ADCHS_CHEN1 (只改变这通道设定) ADC1->ADCR |= ADCR_ADST; //开始转换 ADC1->ADCFG |= ADCFG_ADEN; //ADC enable ADC1->ADCR |= ADCR_ADST; do{ usADSTA = ADC1->ADCR; usADSTA &= ADCR_ADST; }while(usADSTA != 0); usCH0Value = ADC1->ADDATA&0xfff; return usCH0Value; } int main() { u16 ADCVAL; float fValue; delay_init(); uart_initwBaudRate(115200); //串口初始化为115200 ADC_Init(); while(1) { ADCVAL = Func_GetADValue(); fValue = ((float)ADCVAL/4095)*3.3; printf("ADC1_CH_1=%fVrn",fValue); delay_ms(500); } } 您可以把问题再详细说下吗,还有使用环境, |
|
|
|
Hi memory__2474,
感谢您拨空回覆我的问题, 目前环境下 我是用两颗电阻分压 通道0是分压 1/14(输入14V =>分压=>1V判断) 通道1是分压1/2(输入3.3V =>分压=>1.65判断) 目前通道1是ok的 但通道0数值一直很不正常这样... 都是共地 这点是确认过的 |
|
|
|
memory__24746 发表于 2018-7-30 11:49 Hi memory__2474, 感谢您拨空回覆我的问题, 目前环境下 我是用两颗电阻分压 通道0是分压 1/14(输入14V =>分压=>1V判断) 通道1是分压1/2(输入3.3V =>分压=>1.65判断) 目前通道1是ok的 但通道0数值一直很不正常这样... 都是共地 这点是确认过的 |
|
|
|
您用用万用表测下通道0的实际电压,或者通道0使用3.3V分压1.65V看下ADC采集是否正确,
|
|
|
|
Hi memory__24746, 不好意思 晚回覆 这边有用电表测试过分压部分 分压数值是OK... 但神奇的事情发生了 我将通道0的分压接至通道8上 通道8 读出AD的数值竟然正常了 接者我分时去读通道1及通道8的数值并不会受到任何干扰状况 以上我这几天测试结果 觉得很神奇 是不是通道0有任何设定上的疑虑这样 PWR我确实已经关闭这样... |
|
|
|
只有小组成员才能发言,加入小组>>
2247个成员聚集在这个小组
加入小组灵动微电子MM32全系列MCU产品应用手册,库函数和例程和选型表
11646 浏览 3 评论
【MM32 eMiniBoard试用连载】+基于OLED12864的GUI---U8G2
5917 浏览 1 评论
【MM32 eMiniBoard试用连载】移植RT-Thread至MM32L373PS
10927 浏览 0 评论
【MM32 eMiniBoard测评报告】+ 开箱 + 初探
4566 浏览 1 评论
灵动微课堂(第106讲) | MM32 USB功能学习笔记 —— WinUSB设备
4294 浏览 1 评论
[MM32软件] MM32F002使用内部flash存储数据怎么操作?
955浏览 1评论
786浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-19 20:39 , Processed in 0.759286 second(s), Total 106, Slave 90 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号