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学习
下一篇:4*4键盘程序代码 基于STM32
推荐阅读
史海拾趣
在20世纪90年代初,Frequency Sources公司(或类似名称的公司)凭借其在频率源技术领域的深厚积累,成功研发出了一种新型高精度晶体振荡器。这种振荡器在稳定性、相位噪声和温度特性等方面均达到了当时业界的顶尖水平,为无线通信、卫星导航等领域提供了关键的技术支持。这一技术创新不仅巩固了公司在频率源技术领域的领先地位,还为公司赢得了广泛的市场认可和大量订单。
面对未来电子行业的快速发展和变革,Aristo-Craft/L M P Inc制定了明确的战略规划。他们将继续加大在研发和创新方面的投入,推出更多具有创新性和竞争力的产品。同时,公司还将积极拓展新的应用领域和市场,寻求更多的合作机会,以实现更加广泛的发展。
请注意,这些故事仅为概述性的框架,并非具体的事实描述。如果您需要更详细、具体的故事内容,建议查阅Aristo-Craft/L M P Inc公司的官方资料、新闻报道或行业分析报告等,以获取更准确的信息。
随着全球电子市场的快速发展,ELNA开始实施国际化战略。公司积极拓展海外市场,通过建立销售网络和生产基地,提升品牌影响力和市场竞争力。
在国际化过程中,ELNA注重本地化经营和文化融合。公司根据不同地区的市场需求和文化特点,制定相应的产品和市场策略。同时,ELNA还加强了对海外员工的培训和管理,提升团队的国际化水平和协作能力。
(以下故事四和故事五的内容,由于篇幅限制,我将不再详细展开,但您可以根据类似的结构和思路进行补充和完善。)
为了满足全球客户的需求,EECO Switch公司积极实施全球化战略。公司在墨西哥、台湾和中国等地设立了制造工厂,并在英国剑桥设立了销售办事处。这些海外机构不仅为公司提供了更广阔的市场空间,还帮助公司更好地了解当地市场的需求和趋势。展望未来,EECO Switch将继续秉承创新、质量、服务的核心价值观,致力于成为全球领先的人机界面产品提供商。
在XX世纪XX年代,DZUS公司的创始人John Doe看到了航空工业对高质量紧固件的迫切需求。他凭借自己在机械工程领域的深厚造诣,设计并制造了第一款DZUS快拆紧固件。这款产品在航空工业中迅速获得了认可,为DZUS公司的发展奠定了坚实的基础。John Doe的创业精神和对品质的坚持,成为了DZUS公司的核心价值观。
随着全球环保意识的提高,BROTHER公司也积极践行环保理念,推动绿色生产。公司注重节能减排和资源循环利用,采用环保材料和生产工艺,减少对环境的影响。同时,BROTHER还开展了一系列环保公益活动,宣传环保理念,提高公众环保意识。通过践行环保理念,BROTHER不仅赢得了社会的认可和尊重,还为公司的可持续发展奠定了坚实基础。
以上五个故事只是BROTHER公司在电子行业发展历程中的一部分缩影。实际上,BROTHER的发展还涉及更多的细节和方面。但无论如何,BROTHER始终坚持创新、质量、服务和环保的理念,不断追求卓越和完美,为电子行业的发展做出了重要贡献。
摘要:通过一个实例分析了在一个电源系统中多个子系统之间出现的电磁兼容问题,并且给出了解决方案。同时也提供了布局中应注意的细节问题。 关键词:电源;子系统;电磁兼容 … 查看全部问答∨ |
|
高交会开展以来,以光伏太阳能为代表的新能源参展项目受到不少追捧。记者在国家高新技术成果展区看到,力诺太阳 、天威保变等新能源公司展台十分热闹,昨日举行的中国太阳能光伏产学研合作联盟启动大会暨发展论坛也人满为患。 记者在现场看到 ...… 查看全部问答∨ |
|
反激式变压器开关电源电路参数计算 开关电源原理与设计(连载22) 1-7-3.反激式变压器开关电源电路参数计算 反激式变压器开关电源电路参数计算基本上与正激式变压器开关电源电路参数计算一样,主要对储能滤波电感、储能滤波电容,以及开关电源变压器的参数进行计算。 1-7-3-1.反激式变压器开关电源储能滤波电容 ...… 查看全部问答∨ |
程序如下:(硬件应该没问题) SPI.H #ifndef _SPI_H_ #define _SPI_H_ #include<reg51.h> //#include "typedef.h" #define uchar unsigned char #define uint unsigned int #def ...… 查看全部问答∨ |
这两天在拿430的F449与FG439的开发板做通讯实验。可是突然两块都烧不进程序了。 具体情况是Downloading aplication提示框消失后就弹出个红色错误提示框,说FATAL ERROR failed to write memory at 0x1100 session aborted 然后确定三个 ...… 查看全部问答∨ |
各位朋友,我今年的毕业设计中要用到TinyOS的移植问题,TinyOS是否能够移植到C8051F340单片机上呢?有人移植成功过吗?希望得到大家的帮助,谢谢啦!… 查看全部问答∨ |