OpenEdv-开源电子网

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

ADC连续采集模式

[复制链接]

8

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
81
金钱
81
注册时间
2017-7-17
在线时间
22 小时
发表于 2018-10-18 09:20:14 | 显示全部楼层 |阅读模式
10金钱
本帖最后由 济颠进京 于 2018-10-18 09:55 编辑

本人在用正点原子探索者开发板采集一个电压波形,连续采集模式,但是通过串口助手返回来的数据只有两次的转换数据,哪位大神能帮忙出个主意,谢谢。附上源码
[mw_shl_code=c,true]#include "sys.h"
#include "delay.h"  
#include "usart.h"   
#include "adc.h"

   
int main(void)
{      
         u16 adcx;
        float voltage_show;
         
        Stm32_Clock_Init(336,8,2,7);    //设置时钟,168Mhz
        delay_init(168);                  //延时初始化  
        uart_init(84,115200);          //初始化串口波特率为115200   
        Adc2_Init();                   //初始化ADC2
         
         
        while(1)
        {
               
                    adcx=Get_Adc2();
                    voltage_show=(float)adcx*(3.3/4096);
                    printf("the voltage is %f\r\n",voltage_show);                    
                    
        }
}
[/mw_shl_code]
下面是ADC部分
[mw_shl_code=c,true]#include "adc.h"         

//初始化ADC
//ADC1 以连续采样模式工作  单一CH5                                                                                                                                    
void  Adc2_Init(void)
{   
        //先初始化IO口
         RCC->APB2ENR|=1<<9;            //使能ADC2时钟
        RCC->AHB1ENR|=1<<0;            //使能PORTA时钟         
        GPIO_Set(GPIOA,PIN5,GPIO_MODE_AIN,0,0,GPIO_PUPD_NONE);        //   PA5模拟输入,不带上下拉电阻   
         
        RCC->APB2RSTR|=1<<8;           //ADCs复位
        RCC->APB2RSTR&=~(1<<8);        //复位结束         
        ADC->CCR|=1<<16;                //ADCPRE: ADC时钟 ADCCLK=PCLK2/4=84/4=21Mhz
                                        //ADC挂载到APB2总线上,ADC时钟最好不要超过36Mhz
        
          ADC2->CR1=0;                   //CR1设置清零
        ADC2->CR2=0;                   //CR2设置清零
        
          ADC2->CR1&=~(3<<24);          //RES:12位分辨率模式,(15个时钟周期总转换时间)         
         ADC2->CR2&=~(1<<11);           //ALIGN:右对齐        
                                       
          ADC2->CR2|=1<<10;             //EOCS:设置规则通道 每单次转换完成EoC标志 置位;
          ADC2->CR2|=1<<1;                   //CONT: 连续转换                           
                                       
         
        ADC2->SQR1&=~(15<<20);        //L:设置规则通道序列总数为1
        ADC2->SQR3|=5<<0;             //SQ1:设置规则序列第一次转换为通道5                           
                 
         
         
          //设置通道5 的采样时间
        ADC2->SMPR2=0;                //所有通道采样时间清空         
         ADC2->SMPR2&=~(7<<(3*5));         //SMP5:通道5采样时间:3个周期                  
         
          ADC2->CR2|=1<<0;                   //ADON: 开启AD转换器
          ADC2->CR2|=1<<30;                   //SWSTART: 开启规则通道转换
         
}                                 
//获得ADC值
//返回值:转换结果
u16 Get_Adc2(void)   
{        
         
        while(!(ADC2->SR&(1<<1)));      //等待转换结束
          return ADC2->DR;                  //返回adc值同时硬件自动清除EoC标志位
         
                  
}[/mw_shl_code]

1591200198.jpg
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2018-10-19 02:41:43 | 显示全部楼层
可以参考下论坛其他网友发的参考代码
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-8 10:17

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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