OpenEdv-开源电子网

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

求助ADC1和ADC3初始化代码有些区别

[复制链接]

2

主题

3

帖子

0

精华

新手上路

积分
45
金钱
45
注册时间
2019-6-19
在线时间
12 小时
发表于 2019-12-30 11:06:29 | 显示全部楼层 |阅读模式
1金钱
看光敏传感器实验时发现ADC1和ADC3初始化代码有一点不一样,不知为何要这样。用的战舰V3。
void T_Adc_Init(void)  //ADC通道初始化
{
        ADC_InitTypeDef ADC_InitStructure;
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA |RCC_APB2Periph_ADC1        , ENABLE );          //使能GPIOA,ADC1通道时钟

        RCC_ADCCLKConfig(RCC_PCLK2_Div6);   //分频因子6时钟为72M/6=12MHz

        ADC_DeInit(ADC1);  //将外设 ADC1 的全部寄存器重设为缺省值

        ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;        //ADC工作模式:ADC1和ADC2工作在独立模式
        ADC_InitStructure.ADC_ScanConvMode = DISABLE;        //模数转换工作在单通道模式
        ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;        //模数转换工作在单次转换模式
        ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;        //转换由软件而不是外部触发启动
        ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;        //ADC数据右对齐
        ADC_InitStructure.ADC_NbrOfChannel = 1;        //顺序进行规则转换的ADC通道的数目
        ADC_Init(ADC1, &ADC_InitStructure);        //根据ADC_InitStruct中指定的参数初始化外设ADCx的寄存器

        ADC_TempSensorVrefintCmd(ENABLE); //开启内部温度传感器
       

        ADC_Cmd(ADC1, ENABLE);        //使能指定的ADC1

        ADC_ResetCalibration(ADC1);        //重置指定的ADC1的复位寄存器

    while(ADC_GetResetCalibrationStatus(ADC1));        //获取ADC1重置校准寄存器的状态,设置状态则等待

        ADC_StartCalibration(ADC1);         //

        while(ADC_GetCalibrationStatus(ADC1));                //获取指定ADC1的校准程序,设置状态则等待
}

上面是ADC1的初始化代码
void  Adc3_Init(void)
{
ADC_InitTypeDef ADC_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC3        , ENABLE );          //使能ADC3通道时钟
RCC_APB2PeriphResetCmd(RCC_APB2Periph_ADC3,ENABLE);//ADC复位
RCC_APB2PeriphResetCmd(RCC_APB2Periph_ADC3,DISABLE);//复位结束       
ADC_DeInit(ADC3);  //复位ADC3,将外设 ADC3的全部寄存器重设为缺省值
ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;        //ADC工作模式: 独立模式
ADC_InitStructure.ADC_ScanConvMode = DISABLE;        //模数转换工作在单通道模式
ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;        //模数转换工作在单次转换模式
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;        //转换由软件而不是外部触发启动
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;        //ADC数据右对齐
ADC_InitStructure.ADC_NbrOfChannel = 1;        //顺序进行规则转换的ADC通道的数目
ADC_Init(ADC3, &ADC_InitStructure);        //根据ADC_InitStruct中指定的参数初始化外设ADCx的寄存器
ADC_Cmd(ADC3, ENABLE);        //使能指定的ADC3
ADC_ResetCalibration(ADC3);        //使能复位校准
while(ADC_GetResetCalibrationStatus(ADC3));        //等待复位校准结束
ADC_StartCalibration(ADC3);         //开启AD校准
while(ADC_GetCalibrationStatus(ADC3));         //等待校准结束
}       
ADC3初始化与ADC1初始化相比多了红色标记这两行,有什么作用呢,不加可不可以。
                          

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

6

主题

412

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
2718
金钱
2718
注册时间
2019-8-14
在线时间
415 小时
发表于 2019-12-30 12:47:48 | 显示全部楼层
实践得珍珠,自己动手注释看看有什么变化不就知道了吗
回复

使用道具 举报

0

主题

4

帖子

0

精华

初级会员

Rank: 2

积分
77
金钱
77
注册时间
2020-6-17
在线时间
12 小时
发表于 2021-3-3 11:34:23 | 显示全部楼层
EVahl 发表于 2019-12-30 12:47
实践得珍珠,自己动手注释看看有什么变化不就知道了吗

这段代码里ADC3初始化时为什么没有预分频啊,如F1系列ADC最高采样是14MHz,最少也要6分频,但这段代码为什么没有分频,虽然实验了分不分频对实验结果都没啥影响,所以问问大佬为什么不需要分频:)
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-9 13:47

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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