历史上的今天

今天是:2024年10月09日(星期三)

正在发生

2019年10月09日 | stm32中ADC初始化程序

发布者:脑力激荡 来源: 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  初始化程序 引用地址:stm32中ADC初始化程序

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

推荐阅读

自动驾驶技术的发展是当下这个时代最具影响的交通议题之一。ADAS(高级驾驶辅助系统)如自动巡航、碰撞预警、车道保持等技术已被广泛应用于汽车上。以此为起点,自动驾驶系统开发商有望兑现一系列更广泛的功能:从强大的驾驶辅助技术到无须人类干预地执行所有驾驶任务的无人驾驶汽车。各路势力已经纷纷展开自动驾驶研发及应用的布局,到底是循序渐进的发展...
(文章来源:EEToday) 近日研究人员发明了一种由液驱动的机器鱼,这种液体被研发人员称为“机器血”。这个大约40厘米长的软体机器人并没有安装固体电池,而是由一种具有双重功能的液体所驱动,这种液体既可以储存能量还能够移动机器鱼的鳍。这种方法可以让机器在一个更小的空间里储存更多的能量,且运行时间更长,同时还不需要笨重、复杂的电池组。 ...
日本东芝周二宣布,为了提高集团的利润率,该公司将退出从3年前开始就一直处于亏损的LSI芯片业务,同时仅保留电源管理芯片业务。这一决定还将影响LSI芯片部门770名职员... 29日晚间,据NHK报道,为提高集团的利润率,日本东芝宣布,该公司将退出处于亏损的LSI芯片业务,同时仅保留电源管理芯片业务。 不过该公司仍表示,将继续为现有客户提供销售和支持业...
关于时钟安全系统:1. 问题:执行下面的程序后,程序为什么会进入时钟中断服务函数?程序复位后,开始执行下面程序。CLK_HSECmd(ENABLE); flag= CLK_GetFlagStatus(CLK_FLAG_HSERDY);while(!CLK_ClockSwitchConfig(CLK_SWITCHMODE_MANUAL, CLK_SOURCE_HSE, DISABLE, DISABLE)); //HSI切换到HSE。 CLK->CSSR |= CLK_CSSR_CSSEN; //时钟安全系统...

史海拾趣

问答坊 | AI 解惑

电源系统中多个子系统之间的电磁兼容问题

摘要:通过一个实例分析了在一个电源系统中多个子系统之间出现的电磁兼容问题,并且给出了解决方案。同时也提供了布局中应注意的细节问题。 关键词:电源;子系统;电磁兼容 …

查看全部问答∨

硬件开发的基本准则

1    充分了解各方的设计需求,确定合适的解决方案         启动一个硬件开发项目,原始的推动力会来自于很多方面,比如市场的需要,基于整个系统架构的需要,应用软件部门的功能实现需要,提 ...…

查看全部问答∨

中国已成世界第一光伏生产国

高交会开展以来,以光伏太阳能为代表的新能源参展项目受到不少追捧。记者在国家高新技术成果展区看到,力诺太阳 、天威保变等新能源公司展台十分热闹,昨日举行的中国太阳能光伏产学研合作联盟启动大会暨发展论坛也人满为患。   记者在现场看到 ...…

查看全部问答∨

15075040

怎样学好单片机?…

查看全部问答∨

反激式变压器开关电源电路参数计算 开关电源原理与设计(连载22)

1-7-3.反激式变压器开关电源电路参数计算 反激式变压器开关电源电路参数计算基本上与正激式变压器开关电源电路参数计算一样,主要对储能滤波电感、储能滤波电容,以及开关电源变压器的参数进行计算。 1-7-3-1.反激式变压器开关电源储能滤波电容 ...…

查看全部问答∨

ISD1760语音芯片SPI不能播放,独立模式可以播放

程序如下:(硬件应该没问题) SPI.H #ifndef _SPI_H_   #define _SPI_H_   #include<reg51.h>   //#include "typedef.h"   #define uchar unsigned char #define uint unsigned int #def ...…

查看全部问答∨

力科公司发布高低温条件下的示波器探测解决方案

力科公司发布高低温条件下的示波器探测解决方案…

查看全部问答∨

万利的STM3210E,请问用哪个版本的iar?

                                 我买了万利的STM3210E,请问用哪个版本的iar来测试和调试比较好?…

查看全部问答∨

【求助】已经是第6块了,我该怎么办?

这两天在拿430的F449与FG439的开发板做通讯实验。可是突然两块都烧不进程序了。 具体情况是Downloading aplication提示框消失后就弹出个红色错误提示框,说FATAL ERROR failed to write memory at 0x1100 session aborted 然后确定三个 ...…

查看全部问答∨

TinyOS移植的问题

各位朋友,我今年的毕业设计中要用到TinyOS的移植问题,TinyOS是否能够移植到C8051F340单片机上呢?有人移植成功过吗?希望得到大家的帮助,谢谢啦!…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved