stm32中ADC初始化程序

2019-10-09来源: eefocus关键字:stm32  ADC  初始化程序

void  Adc_Init(void)

uint32_t tmpreg1 = 0;

ADC_InitTypeDef ADC_InitStructure; 

GPIO_InitTypeDef GPIO_InitStructure;


RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC |RCC_APB2Periph_ADC1 , ENABLE );  //使能ADC1通道时钟



RCC_ADCCLKConfig(RCC_PCLK2_Div6);   //设置ADC分频因子6 72M/6=12,ADC最大时钟不能超过14M


/* PC0 作为模拟通道输入引脚 ->ADC_IN10 */                       

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; //模拟输入引脚

GPIO_Init(GPIOC, &GPIO_InitStructure); 


/* ADC初始化*/ 

//CR1寄存器设置

tmpreg1 = ADC1->CR1;

tmpreg1 &= 0xfff0feff; //adc的DUALMOD和SCAN位清零

tmpreg1 |= ((uint32_t)0x00000000); //位19:16 0000:独立模式

tmpreg1 |= ((uint32_t)0x00000000); //扫描模式设置 

ADC1->CR1 = tmpreg1; 


//CR2寄存器设置

tmpreg1 = ADC1->CR2;

tmpreg1 &= 0xfff1f7fd; //CONT、EXTSEL[2:0]清零

tmpreg1 |= (1<<20); //使用外部事件启动转换

tmpreg1 |= ((uint32_t)0x000E0000); //外部事件设置为软件触发

tmpreg1 |= ((uint32_t)0x00000000); //数据右对齐

tmpreg1 &= ~(1<<1);     //单次转换模式

ADC1->CR2 = tmpreg1;


//规则通道数量设置 1个

tmpreg1 = ADC1->SQR1;

tmpreg1 &= 0xff0fffff; 

tmpreg1 |= 0x00000000; //位19~位23 0000 代表规则转换组中只有一个通道

ADC1->SQR1 = tmpreg1;


//规则通道转换顺序   转换AD通道10

tmpreg1 = ADC1->SQR3;

tmpreg1 &= 0xffffffe0;  

tmpreg1 |= 0x0000000a;

ADC1->SQR3 = tmpreg1;


//采样时间设置

ADC1->SMPR1 &= ~(7<<0); //通道10采样时间设置,239.5周期,提高采样时间可以提高精确度  

  ADC1->SMPR1 |= 7<<0;     


//开启AD


ADC1->CR2 |= (1<<0); //开AD转换器


//AD校准


    ADC1->CR2 |= (1<<3); //复位校准

while( ADC1->CR2 & (1<<3) );

ADC1->CR2 |= (1<<2); //AD校准

while( ADC1->CR2 & (1<<2) );


}




自己以前都是库函数操作,没有独立对着参考手册在寄存器层面上编写代码。所以自己写的很艰难,中间还是参考了封装的库函数的定义。现在还只能写的代码还只是一个通道可以转换,多开了几个通道设置还是有问题。明日再继续。


自己独立写代码和做代码搬运工区别真的很大,虽然过程艰难,但是只要能做好,还是能学到很多东西。对概念的理解也会更深。




比如自己对  ! 和 ~的理解不到位。就想当然的写出了下面的程序




//等待AD转换结束


while( !(ADC1->SR) & (1<<1) );


而这种显然更合理 while(!(ADC1->SR&1<<1));


若自己只是做代码搬运工,不独立写,就不会发现概念上的误区,看书的时候也不会有那么深的体会。


所以我希望自己能够在学习的时候能够更独立。

关键字:stm32  ADC  初始化程序 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic476491.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:STM32F0 ADC学习
下一篇:4*4键盘程序代码 基于STM32

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

STM32单片机用FSMC接口控制SRAM
环境:主机:WIN7开发环境:MDK4.72MCU:STM32F103ZE说明:sram型号:IS62WV51216BLL连接方式:FSMC大小:1M字节.512K * 16源代码:inf_sram.h/**********************************************************************   sram接口层头文件* (c)copyright 2013,jdh*   All Right Reserved*文件名:inf_sram.h*程序员:jdh*修改日期:2013/10/10*   2013/10/11
发表于 2020-09-30
STM32输入捕获模式设置并用DMA接收数据
环境:主机:WIN7开发环境:MDK4.72MCU:STM32F103说明:项目中需要进行红外学习,于是采用输入捕获取得电平变化时间.并将数据放在DMA中.这样可以避免频繁中断消耗CPU资源.采用的是PB1脚,对应TIM3的通道4.源代码:/********************************************************************** 接口函数:初始化红外学习模块**********************************************************************/ void inf_infrared_study_init
发表于 2020-09-24
STM32的PWM输入模式设置并用DMA接收数据
环境:主机:WIN7开发环境:MDK4.72MCU:STM32F103说明:项目中需要进行红外学习,如果采用输入捕获的方式,因为定时器只能捕获上升沿或者下降沿,所以只能获得周期,而不能得到具体的红外波的高低电平的时间.所以采用PWM输入的方式进行捕获.采用的是PA8脚,对应TIM1的通道1.源代码:/********************************************************************** 函数**********************************************************************/ 
发表于 2020-09-24
STM32 常用GPIO操作函数记录
STM32读具体GPIOx的某一位是1还是0 1 /** 2   * @brief  Reads the specified input port pin. 3   * @param  GPIOx: where x can be (A..G) to select the GPIO peripheral. 4   * @param  GPIO_Pin:  specifies the port bit to read. 5   *   This
发表于 2020-09-23
STM32中的位带(bit-band)操作
//位带操作,实现51类似的GPIO控制功能//具体实现思想,参考<<CM3权威指南>>第五章(87页~92页).//IO口操作宏定义#define BITBAND(addr, bitnum) ((addr & 0xF0000000)+0x2000000+((addr &0xFFFFF)<<5)+(bitnum<<2)) #define MEM_ADDR(addr)  *((volatile unsigned long  *)(addr)) #define BIT_ADDR(addr, bitnum)   ME
发表于 2020-09-22
stm32时钟设置函数
这里涉及到一个很重要的寄存器,时钟配置寄存器:RCC_CFGR 1 #if defined (STM32F10X_LD_VL) || (defined STM32F10X_MD_VL) || (defined STM32F10X_HD_VL) 2 /* #define SYSCLK_FREQ_HSE    HSE_VALUE */ 3  #define SYSCLK_FREQ_24MHz  24000000 4 #else 5 /* #define SYSCLK_FREQ_HSE    HSE_VALUE */ 
发表于 2020-09-22
小广播
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2020 EEWORLD.com.cn, Inc. All rights reserved