资源简介
使用定时器控制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
- 上一篇:现代信号处理练习-古典功率谱、现代功率谱、ARMA
- 下一篇:数据结构课程设计B树
相关资源
- 读取stm32全球唯一ID
- STM32+w5500+FTP client
- stm32f103-sim800cTCP透传
- stm32控制步进电机,实现xy水平移动
- STM32F103C8T6 V1_2原理图
- stm32 syn6288语音模块程序
- 通用红外遥控设备.zip
- grbl1.1f20170801-stm32f103c8t6
- STM32F103ZET6原理图引脚封装
- STM32f103的DS18B20温度读取
- dsp2812 ADC程序
- 51单片机ADC0809测电压12864显示程序
- stm32-tm1650驱动程序带pdf文件
- 海思ADC驱动源码
- stm32移植modbus,亲测可用
- stm32F103通过IIC读取MPU9250用DMP融合得到
- 鸥鹏stm32教程配套
- STM32F103ZET6最小系统板原理图
- STM32 串口 Modbus RTU 协议 代码
- msp430g2553 AD采集 单通道多次采集
- MSP430G2553 DAC+ADC 简单应用,用nokia 51
- 声源定位程序
- STM32-无刷直流电机控制器程序
- Altium designer STM32元件库
- SPWM波产生STM32F103 DMA
- STM32F103测频率
- STM32F103+DAC8552
- STM32 4*4按键
- STM32全系列芯片封装库,最齐全封装库
- STM32F407最小系统板(SWD口)
评论
共有 条评论