OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 13239|回复: 14

ADC单次转换ADC复位是干什么用的?

[复制链接]

22

主题

114

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
222
金钱
222
注册时间
2013-12-29
在线时间
0 小时
发表于 2015-8-10 20:48:48 | 显示全部楼层 |阅读模式
5金钱
ADC单次转换ADC复位是干什么用的,先使能复位,后失能复位,不太懂,为什么要这样,我这边移植的原子例程,加上复位的函数,ADC不能正常使用,不加可以正常使用。为什么?还有个问题是,每次单次转换,我用的是通道4,5,分别转换之后用串口输出,正好通道4是通道5的结果,通道5是通道4的结果,好奇怪??

好记性不如烂笔头
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

22

主题

114

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
222
金钱
222
注册时间
2013-12-29
在线时间
0 小时
 楼主| 发表于 2015-8-10 20:50:31 | 显示全部楼层
void ADC_Configuration(void)
{
GPIO_InitTypeDef   GPIO_InitStructure;
ADC_CommonInitTypeDef ADC_CommonInitStructure;
ADC_InitTypeDef        ADC_InitStructure;
//①开启 ADC 和 GPIO 相关时钟和初始化 GPIO
//RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);//使能 GPIOA 时钟
//RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE); //使能 ADC1 时钟
//先初始化 ADC1 通道 5 IO 口
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4| GPIO_Pin_5;//PA5  通道 5
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;//模拟输入
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;//不带上下拉
GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化
// RCC_APB2PeriphResetCmd(RCC_APB2Periph_ADC1,ENABLE);    //ADC1 复位    复位操作使能加上不能用,上下屏蔽这句话可以用
// RCC_APB2PeriphResetCmd(RCC_APB2Periph_ADC1,DISABLE);  //复位结束
//②初始化通用配置
ADC_CommonInitStructure.ADC_Mode = ADC_Mode_Independent;//独立模式
ADC_CommonInitStructure.ADC_TwoSamplingDelay =ADC_TwoSamplingDelay_5Cycles;//两个采样阶段之间的延迟 5 个时钟
ADC_CommonInitStructure.ADC_DMAAccessMode = ADC_DMAAccessMode_Disabled; //DMA 失能
ADC_CommonInitStructure.ADC_Prescaler = ADC_Prescaler_Div4;//预分频 4 分频。
//ADCCLK=PCLK2/4=84/4=21Mhz,ADC 时钟最好不要超过 36Mhz 
ADC_CommonInit(&ADC_CommonInitStructure);//初始化
//③初始化 ADC1 相关参数 
ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;//12 位模式
ADC_InitStructure.ADC_ScanConvMode = DISABLE;//非扫描模式
ADC_InitStructure.ADC_ContinuousConvMode =DISABLE;//关闭连续转换
ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;
//禁止触发检测,使用软件触发
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;//右对齐
ADC_InitStructure.ADC_NbrOfConversion = 1;//1 个转换在规则序列中
ADC_Init(ADC1, &ADC_InitStructure);//ADC 初始化
//④开启 ADC 转换
ADC_Cmd(ADC1, ENABLE);//开启 AD 转换器 

}
 u16 Get_Adc(u8 ch)   
{
//设置指定 ADC 的规则组通道,一个序列,采样时间
ADC_RegularChannelConfig(ADC1,ch, 1, ADC_SampleTime_480Cycles );     
ADC_SoftwareStartConv(ADC1);    //使能指定的 ADC1 的软件转换启动功能
while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ));//等待转换结束
return ADC_GetConversionValue(ADC1);  //返回最近一次 ADC1 规则组的转换结果
}

int main(void)
{
u16 ad_4,ad_5;
BSP_Init();
delay_init();
while(1)
{
ad_4=Get_Adc(4);
delay_ms(10);
ad_5=Get_Adc(5);
USART_OUT(USART1,"ad_4=%d\n",ad_4);
  USART_OUT(USART1,"ad_5=%d\n",ad_5);
USART_OUT(USART1,"\n");
GPIO_ToggleBits(GPIOB, GPIO_Pin_12);
delay_ms(500);
// GPIO_ResetBits(GPIOB,GPIO_Pin_12);
// delay_ms(500);  //系统滴答时钟    nms<=798   stm32f407
// GPIO_SetBits(GPIOB,GPIO_Pin_12);
}
}
好记性不如烂笔头
回复

使用道具 举报

22

主题

114

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
222
金钱
222
注册时间
2013-12-29
在线时间
0 小时
 楼主| 发表于 2015-8-10 20:51:33 | 显示全部楼层
哪位分析下为什么接受到的值和通道对应的值是相反的呢
好记性不如烂笔头
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165427
金钱
165427
注册时间
2010-12-1
在线时间
2113 小时
发表于 2015-8-10 22:03:58 | 显示全部楼层
帮顶....
回复

使用道具 举报

22

主题

114

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
222
金钱
222
注册时间
2013-12-29
在线时间
0 小时
 楼主| 发表于 2015-8-10 22:28:23 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------
原子个,ADC那块复位是什么意思
好记性不如烂笔头
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165427
金钱
165427
注册时间
2010-12-1
在线时间
2113 小时
发表于 2015-8-10 22:45:28 | 显示全部楼层
回复【5楼】冰果run:
---------------------------------
这个?
// RCC_APB2PeriphResetCmd(RCC_APB2Periph_ADC1,ENABLE);    //ADC1 复位    复位操作使能加上不能用,上下屏蔽这句话可以用 
// RCC_APB2PeriphResetCmd(RCC_APB2Periph_ADC1,DISABLE);  //复位结束
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

22

主题

114

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
222
金钱
222
注册时间
2013-12-29
在线时间
0 小时
 楼主| 发表于 2015-8-10 22:46:23 | 显示全部楼层
回复【6楼】正点原子:
---------------------------------
是的
好记性不如烂笔头
回复

使用道具 举报

1

主题

4

帖子

0

精华

新手入门

积分
28
金钱
28
注册时间
2015-8-1
在线时间
0 小时
发表于 2015-9-10 08:16:01 | 显示全部楼层
回复【6楼】正点原子:
---------------------------------
同问,这两句话我去掉也能正常工作,加上这两句话有什么作用?
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165427
金钱
165427
注册时间
2010-12-1
在线时间
2113 小时
发表于 2015-9-10 23:04:25 | 显示全部楼层
回复【8楼】a790439710:
---------------------------------
复位ADC
结束复位.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

6

主题

105

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
368
金钱
368
注册时间
2018-8-31
在线时间
115 小时
发表于 2018-9-8 10:59:40 | 显示全部楼层
正点原子 发表于 2015-9-10 23:04
回复【8楼】a790439710:
---------------------------------
复位ADC
结束复位.

请问为什么要先对使用的ADC时钟复位??
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165427
金钱
165427
注册时间
2010-12-1
在线时间
2113 小时
发表于 2018-9-10 02:10:50 | 显示全部楼层
长昵称不被占用 发表于 2018-9-8 10:59
请问为什么要先对使用的ADC时钟复位??

这是外设复位。。
就是复位ADC
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

0

主题

4

帖子

0

精华

新手入门

积分
17
金钱
17
注册时间
2019-8-22
在线时间
3 小时
发表于 2020-2-25 09:18:29 | 显示全部楼层
????
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
2
金钱
2
注册时间
2021-1-7
在线时间
0 小时
发表于 2021-1-7 22:17:05 | 显示全部楼层
乱七八糟的
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
5
金钱
5
注册时间
2023-6-28
在线时间
1 小时
发表于 2023-6-28 15:46:22 | 显示全部楼层
看里面的源代码 第一次使能用|进行计算 第二次失能用&~进行计算 可以知道寄存器里的值,当RCC->APB2RSTR里位的值是0时,经过这两部操作最终的值也是0,如果是1,那么当RCC_APB2Periph的值是1时,最终结果是0,反之是1。那么我猜测是对寄存器里对应RCC_APB2Periph使用的位进行一个复位
回复

使用道具 举报

1

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
168
金钱
168
注册时间
2021-6-28
在线时间
52 小时
发表于 2023-8-30 18:08:12 | 显示全部楼层
这两天也遇到了这个问题,已解决。
第一,是芯片电压不足,原因是因为在VREF+,VDDA上串了个1K的电阻,
第二,是晶振使用了10Mhz,正点原子ADC例程用的是8Mhz的晶振,超频也增加的功耗。
ADC复位函数,ADC初始化函数本身都没有问题,就是应该使能了ADC,增加了芯片功耗,电压不足以支出芯片工作,所以程序跑飞了。

不加ADC复位,能使用,是因为不加的话,ADC初始化不成功,就没增加芯片功耗
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-4-10 00:40

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表