你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32H750的AD采样问题

[复制链接]
神奇号-372277 提问时间:2020-12-3 15:25 /
悬赏1ST金币未解决
芯片是STM32H750VB,100脚LQFP,查看官方资料,ADC1快速通道最快19MHZ,采样率16位最快1.9M。
我设置ADC为连续采样模式,DMA循环,频率16MHZ,1.5个采样周期(总共就是1.5加8.5=10个)
DMA设置为双缓存。
使用定时器3,计数CNT,测试ADC采样率。
计数4万个查看一次,结果发现ADC采样率位0.8M,按照数值计算,不是应该1.6M吗?
继续修改采样率,ADC频率32MHZ,最后ADC采样率1.6M
ADC频率64M,ADC采样率3.2M
为什么差了1倍?
  1. //初始化ADC
  2. //这里我们仅以规则通道为例
  3. //我们默认仅开启ADC1_CH3P
  4. //16位转换时间位:采样周期+8.5个ADC周期
  5. void  Adc_Init(void)
  6. {   
  7.         //先初始化IO口
  8.         RCC->AHB1ENR|=1<<5;                    //使能ADC1/2时钟
  9.         RCC->AHB4ENR|=1<<0;                    //使能PORTA时钟          
  10.         GPIO_Set(GPIOA,PIN6,GPIO_MODE_AIN,0,0,GPIO_PUPD_NONE);//PA6,模拟输入,不带上下拉   

  11.         RCC->AHB1RSTR|=1<<5;                   //ADC1/2复位
  12.         RCC->AHB1RSTR&=~(1<<5);                //复位结束       
  13.         RCC->D3CCIPR&=~(3<<16);                //ADCSEL[1:0]清零
  14.         RCC->D3CCIPR|=2<<16;                //ADCSEL[1:0]=2,per_ck作为ADC时钟源,默认选择hsi_ker_ck作为per_ck,频率:64Mhz
  15.         ADC12_COMMON->CCR|=1<<18;        //PRESC[3:0]=1,输入时钟2分频,即adc_ker_ck=per_ck/2=64/2=32Mhz(不能超过36Mhz)
  16.        
  17.         ADC1->CR=0;                                   //CR寄存器清零,DEEPPWD清零,从深度睡眠唤醒.
  18.         ADC1->CR|=1<<28;                          //ADVREGEN=1,使能ADC稳压器
  19.         delay_ms(10);                                //等待稳压器启动完成,约10us,这里延时大一点,没关系.
  20.         ADC1->CR|=1<<8;                          //BOOST=0,ADC禁止工作在boost模式(ADC频率小于20M的时候,不能设置boost位)       
  21.         ADC1->CFGR |=(0<<17);                //
  22.         ADC1->CFGR &=~(1<<16);                //DISCEN=0,禁止常规通道的不连续模式
  23.         ADC1->CFGR |=(1<<13);                //CONT=1,连续转换模式
  24.         ADC1->CFGR|=1<<12;                        //OVRMOD=1,复写模式(DR寄存器可被复写)       
  25.         ADC1->CFGR&=~(3<<10);                //EXTEN[1:0]=0,软件触发
  26.         ADC1->CFGR&=~(7<<2);                //RES[2:0]位清零
  27.         ADC1->CFGR|=0<<2;                        //RES[2:0]=0,16位分辨率(0,16位;1,14位;2,12位;3,10位;4,8位.)
  28.         ADC1->CFGR|=3<<0;                        //选择 DMA 循环模式

  29.         ADC1->CFGR2&=~((u32)15<<28);//LSHIFT[3:0]=0,不左移,数据右对齐.
  30.         ADC1->CFGR2&=~((u32)0X3FF<<16);//OSR[9:0]=0,不使用过采样
  31.        
  32.        
  33.         ADC1->CR&=~((u32)1<<30);        //ADCALDIF=0,校准单端转换通道
  34.         ADC1->CR|=1<<16;                        //ADCALLIN=1,线性校准
  35.         ADC1->CR|=(u32)1<<31;                //开启校准
  36.         while(ADC1->CR&((u32)1<<31));//等待校准完成
  37.          
  38.         ADC1->SQR1&=~(0XF<<0);                //L[3:0]清零
  39.         ADC1->SQR1|=0<<0;                     //L[3:0]=0,1个转换在规则序列中 也就是只转换规则序列1
  40.        
  41.         //设置通道19的采样时间
  42. //        ADC1->SMPR2&=~(7<<(3*9));        //通道3采样时间清空          
  43. //         ADC1->SMPR2|=0<<(3*9);                 //通道3 1.5个周期,       
  44.         ADC1->CR|=1<<0;                                   //开启AD转换器          
  45. }
复制代码

adc设置.png
adc设置2.png
收藏 评论1 发布时间:2020-12-3 15:25

举报

1个回答
hyggg 回答时间:5 天前

这个不知道是不是Y版本和V版本的问题 可以看看这一篇文章

STM32H743/H750的Y版和V版芯片ADC的主频区别 - STM32H7 - 硬汉嵌入式论坛 - Powered by Discuz! (armbbs.cn)

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版