• 大小: 3KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-06-16
  • 语言: 其他
  • 标签: STM32  ADC  DMA  TIMER  

资源简介

使用定时器控制ADC的采样速率 使用DMA传输,速度快。亲测通过。

资源截图

代码片段和文件信息

#include “adc.h“
#include “bsp_matrix.h“



void ADC_GPIO_Configuration(void)        //ADC配置函数  
{  
  GPIO_InitTypeDef GPIO_InitStructure;  
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1|RCC_APB2Periph_GPIOA ENABLE);   //使能ADC和GPIOA时钟                        
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;        //管脚2  
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;    //模拟输入模式  
  GPIO_Init(GPIOA &GPIO_InitStructure);     //GPIO组  
}  


//定时器初始化  
void TIM2_Configuration(void)  
{   
 TIM_TimebaseInitTypeDef TIM_TimebaseStructure;   
 TIM_OCInitTypeDef TIM_OCInitStructure;   
 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2  ENABLE);   
 TIM_TimebaseStructure.TIM_Period = 24;//设置25us一次TIM2比较的周期  40KHz
 TIM_TimebaseStructure.TIM_Prescaler = 71;//系统主频72M,这里分频71,相当于1000K的定时器2时钟   
 TIM_TimebaseStructure.TIM_ClockDivision = 0x0;   
 TIM_TimebaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  
 TIM_TimebaseInit(TIM2 & TIM_TimebaseStructure);  
      
 TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;//下面详细说明   
 TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;//TIM_OutputState_Disable;   
 TIM_OCInitStructure.TIM_Pulse = 12;   
 TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;//如果是PWM1要为Low,PWM2则为High   
 TIM_OC2Init(TIM2 & TIM_OCInitStructure);     
// TIM_InternalClockConfig(TIM2);  
// TIM_OC2PreloadConfig(TIM2 TIM_OCPreload_Enable);   
// TIM_UpdateDisableConfig(TIM2 DISABLE);  
}  
//ADC_DMA初始化配置  
void ADC_DMA_Config(void)  
{  
  DMA_InitTypeDef DMA_InitStructure; // 注:ADC为12位模数转换器,只有ADCConvertedValue的低12位有效  
NVIC_InitTypeDef NVIC_InitStructure; 

  RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1 ENABLE);//使能DMA时钟  
  DMA_DeInit(DMA1_Channel1);//开启DMA1的第一通道   
  DMA_InitStructure.DMA_PeripheralbaseAddr = (unsigned long)(&ADC1->DR);//DMA对应的外设基地址  
  DMA_InitStructure.DMA_MemorybaseAddr = (uint32_t)bufferB; //内存存储基地址  
  DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC; //DMA的转换模式为SRC模式,由外设搬移到内存  
  DMA_InitStructure.DMA_BufferSize = 256; //DMA缓存大小,256个  
  DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; //接收一次数据后,设备地址禁止后移  
  DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; //接收一次数据后,目标内存地址后移  
  DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;//定义外设数据宽度为16位  
  DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord; //DMA搬移数据尺寸,HalfWord就是为16位  
  DMA_InitStructure.DMA_Mode =DMA_Mode_Circular;//循环转换模式  
  DMA_InitStructure.DMA_Priority = DMA_Priority_High;//DMA优先级高  
  DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;//M2M模式禁用  

//中断配置    
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);  
NVIC_InitStructure.NVIC_IRQChannel =DMA1_Channel1_IRQn;    
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;  
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;   
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;  
NVIC_Init(&NVIC_InitStructure);  


  DMA_Init(DMA1_Channel1 &DMA_InitStructure

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       5791  2018-03-15 14:24  ADC\adc.c

     文件        134  2018-03-15 17:02  ADC\adc.h

     目录          0  2018-03-15 17:02  ADC

----------- ---------  ---------- -----  ----

                 5925                    3


评论

共有 条评论