资源简介
使用定时器控制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树
相关资源
- FreeRTOS采样ADC+KEY事件信号+DMA串口收发
- stm32做的红外遥控解码程序
- 《emwin实战指南(基于STM32-ISO开发板)
- ADC0809的采样控制电路的实现.doc
- Beginning STM32: Developing with FreeRTOS libo
- stm32f103c8t6_sch.Lib
- ALIENTEK战舰STM32F1 V3开发板原理图.rar
- STM32F103RC+ADC+DMA多通道采样LCD显示
- I2C读写AT24C02 基于STM32F103 cube116540
- 基于stm32f103ve的程序——跑马灯实验
- 基于STM32RCT6的步进电机驱动程序
- stm32f407上的两个can发送和接收例程
- STM32 led 时钟
- STM32 2.4G通信例程
- 直流无刷电机方波驱动 stm32 例程代码
- STM32中文资料
- STM32蓝牙和串口程序
- STM32f103超声波模块例程
- stm32f103c8t6 4 oled.rar
- stm32f030 IAP Demo(原创)
- 单片机和adc0809数字电压表
- 单片机、ADC0808809设计简易数字电压表
- STM32基于rt_thread操作系统的SDHC卡文件
- NRF24L01实现51与STM32双向通讯
- STM32F103 串口程序(完整版)
- stm32 ds18b20 温度传感器 测试通过
- stm32官方例程
- STM32F103定时器中断程序
- [免费]基于stm32f103ze 的OLED驱动代码
- STM32F103RBT6驱动UC1698控制芯片的160160黑
评论
共有 条评论