OpenEdv-开源电子网

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

学习STM32 玩一下AD转换 只且只有一季

[复制链接]

71

主题

467

帖子

0

精华

高级会员

Rank: 4

积分
800
金钱
800
注册时间
2011-11-18
在线时间
5 小时
发表于 2012-7-19 03:01:28 | 显示全部楼层 |阅读模式
 
#include <stm32f10x_lib.h>

//初始化ADC
//这里我们仅以规则通道为例
//我们默认将开启通道0~3    
void  Adc_Init(void)
{    
//先初始化IO口
  RCC->APB2ENR|=1<<2;    //使能PORTA口时钟 
GPIOA->CRL&=0XFFF00000;//PA0 1 2 3 4 anolog输入
//通道10/11设置  
RCC->APB2ENR|=1<<9;    //ADC1时钟使能   
RCC->APB2RSTR|=1<<9;   //ADC1复位
RCC->APB2RSTR&=~(1<<9);//复位结束
    
RCC->CFGR&=~(3<<14);   //分频因子清零
//SYSCLK/DIV2=12M ADC时钟设置为12M,ADC最大时钟不能超过14M!
//否则将导致ADC准确度下降! 
RCC->CFGR|=2<<14;        

ADC1->CR1&=0XF0FFFF;   //工作模式清零
ADC1->CR1|=0<<16;      //独立工作模式  
ADC1->CR1&=~(1<<8);    //非扫描模式   
ADC1->CR2&=~(1<<1);    //单次转换模式
ADC1->CR2&=~(7<<17);   //清掉控制位   
ADC1->CR2|=7<<17;    //软件控制转换  
ADC1->CR2|=1<<20;      //使用用外部触发(SWSTART)!!! 必须使用一个事件来触发
ADC1->CR2&=~(1<<11);   //右对齐
 
ADC1->SQR1&=~(0XF<<20); // 因为全是0,所下下边的一行可以不要,但为了可读可维护的方便,下边的这行是必要的
ADC1->SQR1&=0<<20;     //1个转换在规则序列中 也就是只转换规则序列1     
//设置通道0~3的采样时间
ADC1->SMPR2&=0XFFFF0000;//通道0,1,2,3采样时间清空   
range;display:inline-block;">ADC1->SMPR2|=7<<12;     //通道4  239.5周期,提高采样时间可以提高精确度  
range;display:inline-block;">ADC1->SMPR2|=7<<9;      //通道3  239.5周期,提高采样时间可以提高精确度  
range;display:inline-block;">ADC1->SMPR2|=7<<6;      //通道2  239.5周期,提高采样时间可以提高精确度  
range;display:inline-block;">ADC1->SMPR2|=7<<3;      //通道1  239.5周期,提高采样时间可以提高精确度  
range;display:inline-block;">ADC1->SMPR2|=7<<0;      //通道0  239.5周期,提高采样时间可以提高精确度  

ADC1->CR2|=1<<0;     //开启AD转换器  
ADC1->CR2|=1<<3;        //使能复位校准  
while(ADC1->CR2&1<<3);  //等待校准结束   
    //该位由软件设置并由硬件清除。在校准寄存器被初始化后该位将被清除。   
ADC1->CR2|=1<<2;        //开启AD校准    
while(ADC1->CR2&1<<2);  //等待校准结束
//该位由软件设置以开始校准,并在校准结束时由硬件清除  
}   
//获得ADC值
//ch:通道值 0~3
u16 Get_Adc(u8 ch)   
{
//设置转换序列     
ADC1->SQR3&=0XFFFFFFE0;//规则序列1 通道ch
ADC1->SQR3|=ch;        
ADC1->CR2|=1<<22;       //启动规则转换通道 
while(!(ADC1->SR&1<<1));//等待转换结束      
return ADC1->DR; //返回adc值
}

原子老大以经写得很清楚了,从头到尾,按步就班,非常好读,也没什么问题了,这样,我们可以通过设置ADC1->SQR3,读出16个IO脚的ADC数值了.
我这里比原子老大的多了一个脚的PA4, 大家有空可以直接16个IO都玩一次.

我是用NRF24L01的原程式直接改的.这样有个人机介面好点,直接在第五行显示出 5个AD转换的数值.丢上来大家可以自己打开玩玩.

复件 (2) TEXT.rar

720.88 KB, 下载次数: 896

我的工作就是天天在玩
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

71

主题

467

帖子

0

精华

高级会员

Rank: 4

积分
800
金钱
800
注册时间
2011-11-18
在线时间
5 小时
 楼主| 发表于 2012-7-19 03:11:10 | 显示全部楼层
注意噢,玩其它脚的时候IO设好模似输入,要不老是最高数值呀,因为有的脚可能设的是上拉.
我的工作就是天天在玩
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-7-19 09:17:42 | 显示全部楼层
楼主又出教程了,呵呵.支持.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

3

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
61
金钱
61
注册时间
2012-11-16
在线时间
3 小时
发表于 2012-11-28 00:22:34 | 显示全部楼层
绝对支持楼主,让我等菜鸟少走弯路。
回复 支持 反对

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
31
金钱
31
注册时间
2012-12-12
在线时间
1 小时
发表于 2012-12-21 09:20:22 | 显示全部楼层
注释狠详细的说
回复 支持 反对

使用道具 举报

1

主题

7

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2012-12-31
在线时间
3 小时
发表于 2013-8-16 20:40:43 | 显示全部楼层
顶一个
回复 支持 反对

使用道具 举报

8

主题

34

帖子

0

精华

初级会员

Rank: 2

积分
86
金钱
86
注册时间
2013-8-11
在线时间
0 小时
发表于 2013-8-17 00:23:11 | 显示全部楼层
楼主大赞啊,以后一定要继续分享哦
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-14 22:56

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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