历史上的今天
今天是:2025年04月20日(星期日)
2021年04月20日 | STM32 AD交替触发模式程序
2021-04-20 来源:eefocus
简介:今天配置了STM32 AD的交替触发模式,采样基本做到1us一个样本了。通道10 1.5周期,使用交替模式,采样时间小于7.5 ADCclock 。
void Adc_Init(u16 period)
{
GPIO_InitTypeDef GPIO_InitStruct;
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
GPIO_InitStruct.GPIO_Pin=GPIO_Pin_0;
GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_InitStruct.GPIO_Mode=GPIO_Mode_AIN;
GPIO_Init(GPIOC,&GPIO_InitStruct);
RCC->APB2ENR|=1<<9; //ADC1时钟使能
RCC->APB2ENR|=1<<10; //ADC2时钟使能
RCC->APB2RSTR|=1<<9; //ADC1复位
RCC->APB2RSTR&=~(1<<9);//复位结束
RCC->APB2RSTR|=1<<10; //ADC2复位
RCC->APB2RSTR&=~(1<<10);//复位结束
RCC->CFGR&=~(3<<14); //分频因子清零
RCC->CFGR|=2<<14; //SYSCLK/DIV2=12M ADC时钟设置为12M,ADC最大时钟不能超过14M!
ADC1->CR1=0x00070000;
ADC1->CR2=0x00180100;
ADC1->SQR3=0x0000000A;
ADC1->SMPR1=0x00000000;
ADC1->SMPR2=0x00000000;
ADC2->CR1=0x00000000;
ADC2->CR2=0x00180100;
ADC2->SQR3=0x0000000A;
ADC2->SMPR1=0x00000000; //通道10 1.5周期,使用交替模式,采样时间小于7.5 ADCclock
ADC2->SMPR2=0x00000000;
ADC1_DMA_Config((u32)&(ADC_conver),320);
ADC1->CR2|=1<<0; //开启AD转换器
ADC1->CR2|=1<<3; //使能复位校准
while(ADC1->CR2&1<<3); //等待校准结束
ADC1->CR2|=1<<2; //开启AD校准
while(ADC1->CR2&1<<2); //等待校准结束
ADC2->CR2|=1<<0; //开启AD转换器
ADC2->CR2|=1<<3; //使能复位校准
while(ADC2->CR2&1<<3); //等待校准结束
ADC2->CR2|=1<<2; //开启AD校准
while(ADC2->CR2&1<<2); //等待校准结束
TIM_TimeBaseStructInit(&TIM_TimeBaseStructure);
TIM_TimeBaseStructure.TIM_Period =period-1; //计数器值
TIM_TimeBaseStructure.TIM_Prescaler =0;//预分频值,1分频
TIM_TimeBaseStructure.TIM_ClockDivision =0x0; //采样分频72mhz
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //向上计数
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);//初始化定时器结构体
TIM_SelectOutputTrigger(TIM3, TIM_TRGOSource_Update);
TIM_Cmd(TIM3,ENABLE);
}
void ADC1_DMA_Config(u32 MemoryAddress,u16 num)
{
DMA_InitTypeDef DMA_InitStructure;
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1,ENABLE);
DMA_DeInit(DMA1_Channel1);
DMA_InitStructure.DMA_PeripheralBaseAddr=0x40012400+0x4c;
DMA_InitStructure.DMA_MemoryBaseAddr=MemoryAddress;
DMA_InitStructure.DMA_DIR=DMA_DIR_PeripheralSRC;
DMA_InitStructure.DMA_BufferSize=num;
DMA_InitStructure.DMA_M2M=DMA_M2M_Disable;
DMA_InitStructure.DMA_Priority=DMA_Priority_VeryHigh;
DMA_InitStructure.DMA_PeripheralDataSize=DMA_PeripheralDataSize_Word;
DMA_InitStructure.DMA_MemoryDataSize=DMA_MemoryDataSize_Word;
DMA_InitStructure.DMA_PeripheralInc=DMA_PeripheralInc_Disable;
DMA_InitStructure.DMA_MemoryInc=DMA_MemoryInc_Enable;
DMA_InitStructure.DMA_Mode=DMA_Mode_Circular;
DMA_Init(DMA1_Channel1,&DMA_InitStructure);
DMA_Cmd(DMA1_Channel1 ,ENABLE);
}
50k时的波形

100k时

10k时

上一篇:什么是STM32以及怎样学习?
史海拾趣
|
把从网上下载的T264源码移植到dm642上,过程是这样的 1、直接编译T264 的源码(包括了T264.Pjt和 T264lib.pjt)可以通过,说明程序没有问题 2.加入了DM642的视频硬件文件之后出现了很多问题,有 offset too large   ...… 查看全部问答> |
|
微软对于Wince中TCP/IP协议的定义范围~急!急!急! 我刚刚接手开发的手机邮件工作,很多东西都不明白-_-! 微软在Wince5.0 的内核发布中提到,支持TCP/IP协议,没有详细的说明,我想问一下是否包括SMTP和POP3呢?… 查看全部问答> |
|
用kei for arm 3.8a生成hex文件时358k,而开发板上的机子ROM容量是128k,怎么烧的进去? 即使是hex文件容量是120k,还是会有在烧写的时候会出现address not allowed?… 查看全部问答> |
|
不知道怎样初始化xx2799,从而可以用g2553读取键值,实现相应功能,求大神帮忙 不知道怎么弄基于msp430g2553来检测xx2799按键的程序,知道x2799有按键按下,key引脚拉低,键值存到寄存器reg_keyvaluey里,但不知道怎样初始化xx2799,从而可以用g2553读取键值,实现相应功能… 查看全部问答> |
|
CCS5编译错误,求解! 各位高手: 我才开始用TMS320F28020,使用CCS5.1;新建项目,选取型号,选取调试器,完毕后自动生成main.c,没做任何编辑直接编译;出现错误提示: program:c:\\ti\\ccsv5\\tools\\compiler\\c2000\\bin\\cl2 ...… 查看全部问答> |




