// ADC采集时最开始用液晶显示观察时发现,DMA输出的数据变化很不规则(高于中间值有一段极不正常),
// 另外还有一个问题是,所加信号的偏置电压还需要比正常的高一些,否则会出现有一段时间显示的数据一直为零。
// TIM_Period和TIM_Prescaler 取值要合理,可根据需要采集波的频率来选取。选取不正确时会造成波形不正常。
//Project Name : ADC转换功能(定时器触发方式----T1-CC1)
//Project Function:现在是对波形进行采集,采集波形一个周期的40个点
//Author:Qiyuan Cao
//Time:2021,6,6
//Intro:此模块涉及到定时器1PWM,ADC1,DMA Channle11,ADC_GPIOC_11,PWM_GPIOA_8;
// 暂时没有用中断
#include "adc+dma.h"
#include "5110.h"
#include "delay.h"
#include "dac.h"
#include "flash.h"
#include "tim3_f.h"
extern u32 LastFrequency;
#define ADC1_DR_Address ((u32)0x4001244c) // 分配寄存器空间
u32 tab[40],rate_a,rate1_a; //目前用时先都统一,设置为32位数,到今后内存空间不足时,在设置为其他的。
u32 feng_max=0,feng_min=0;
u8 k,i=0;
/*******************************************************************************
* 函数名称 :void DMA_adc_Configuration(void)
* 函数描述:DMA_adc配置
* 输入参数:
* 输出参数:无
* 返回值:无
*******************************************************************************/
void DMA_adc_Configuration(void)//DMA_adc配置
{
DMA_InitTypeDef DMA_InitStructure;
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);
DMA_DeInit(DMA1_Channel1);//将DMA的通道x寄存器重设为缺省值
DMA_InitStructure. DMA_PeripheralBaseAddr = ADC1_DR_Address;//存入的目的地址
DMA_InitStructure. DMA_MemoryBaseAddr = (u32)&tab;// ADC的读出寄存器
DMA_InitStructure. DMA_DIR = DMA_DIR_PeripheralSRC;//外设为数据来源地址
DMA_InitStructure. DMA_BufferSize = 40 ;
//用以定义指定DMA通道的DMA缓存的大小,单位为数据单位。根据传输方向,
//数据单位等于结构中参数DMA_PeripheralDataSize或者参数DMA_MemoryDataSize的值。
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;//内部基地址设为递加地址
DMA_InitStructure.DMA_PeripheralDataSize = DMA_Peri
数据的采集模块遇到的问题,DMA的配置
这篇博客详细介绍了如何在STM32平台上使用ADC、DMA和定时器配置来实现波形的采集。作者通过示例代码展示了如何配置DMA和ADC,以确保数据的稳定传输,并通过液晶显示屏显示采集结果。此外,还讨论了信号偏置电压的重要性以及TIM_Period和TIM_Prescaler的合理选取。
摘要由CSDN通过智能技术生成