历史上的今天
今天是:2024年10月09日(星期三)
2019年10月09日 | stm32中ADC初始化程序
2019-10-09 来源:eefocus
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));
若自己只是做代码搬运工,不独立写,就不会发现概念上的误区,看书的时候也不会有那么深的体会。
所以我希望自己能够在学习的时候能够更独立。
上一篇:STM32F0 ADC学习
史海拾趣
|
摘要: 在FPGA片内实现全数字锁相环用途极广。本文在集成数字锁相环74297的基础上进行改进,设计了锁相状态检测电路,配合CPU对环路滤波参数进行动态智能配置,从而使锁相环快速进入锁定状态,在最短时间内正常工作并且提高输出频率的质量。 关键词 ...… 查看全部问答> |
|
应届生不要做消费电子硬件。因为以后想转行人家都不给机会,工作涨不上去,以后要是离开沿海回家连工作都不好找。要做就做软件或者软硬件都做的产品吧。我想汽车电子和医疗电子还有机会吧。或者射频(不是消费电子的)。… 查看全部问答> |
|
随着监控系统在商用民用的日渐普及,监控摄像机(监控摄像头)被广泛应用在各个领域,为社会治安保驾护航。 监控摄像头的选型 监控摄像头是整个监控系统的核心设备,选型时应根据现场环境和用户需求,慎重选择。针对我公司监控摄像头产品, ...… 查看全部问答> |
|
本公司有一个涉及到485通讯和蓝牙模拟串口通讯的项目,想找一位能独立画板,独立开发的人来完成。 居住地要求在南京。 电话:1 3 9 5 1 0 3 8 6 8 3… 查看全部问答> |
|
我想利用IDE转SATA和SATA转IDE 2种卡实现并/串高速数据传输! 有2个地方都是并口,40M速度,想利用IDE转SATA卡先并--串行,然后用SATA转IDE卡再把串--并行,实现近距离数据传输。实验时距离不超过30cm, 但用示波器就是看不到数据传过来。此方案若 ...… 查看全部问答> |
|
各位,我正在做一个项目,需要有经验的您参与: (1)USB驱动开发。 (2)普通电话机硬件。 (3)地点:上海 需要有丰富经验,酬金面谈,您如果需要挣外快,请和我联系:13818802872。 … 查看全部问答> |
|
各位大哥,我在超级终端下用AT指令拨号,配置如下: AT+CGCLASS=\"B\" OK AT+CGDCONT=1,\"IP\",\"CMNET\" &nbs ...… 查看全部问答> |
|
几乎是最小系统,AD输入,DA输出。 AD用片带,DA打算用max507,12位的。您有现成类似的程序,请给传一份,小弟万分感谢。初学,描述不对地方请见谅。邮箱:JL7519970@163.com… 查看全部问答> |




