当前位置:首页 > 单片机 > 单片机
[导读] 最近在倒腾LD驱动的时候遇到不少问题,下面就一一的记录一下啦,不然五百年以后谁还记得谁是吧。一、多通道ADC和DMA的配置问题: 刚开始不知道怎么去配置,到处找资料发现很多不是很适用。很盲目的找

 

最近在倒腾LD驱动的时候遇到不少问题,下面就一一的记录一下啦,不然五百年以后谁还记得谁是吧。

一、多通道ADC和DMA的配置问题:

刚开始不知道怎么去配置,到处找资料发现很多不是很适用。很盲目的找了很久的资料,后来发现官方的固件库里面有很详细的资料。稍微改了一下官方的demo一下就编译成功了。这个例子的启示是:别忙着去网上找现成的例子,启示固件库里面的例程很给力了。

程序需求是开通三个ADC通道分别采集3V 的基准电压、控制反馈温度和环境温度。

因为用示波器测试时发现TED控制PWM的开关的高频噪声耦合到控制地中来了,所以会有一些高频尖刺。我的解决办法是每组数据通过DMA采集100个点,除去最大的10个数和最小的10数然后取平均值。

配置代码如下:

uint16_t Rec_buff[100][3];
void DMA_Configuration(void)
{


DMA_InitTypeDef DMA_InitStructure;

/* DMA1 channel1 configuration ----------------------------------------------*/
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);
DMA_DeInit(DMA1_Channel1); //DMA重新设置为缺省值
DMA_InitStructure.DMA_PeripheralBaseAddr = ADC1_DR_Address;//DMA??ADC???
DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)&Rec_buff; //DMA数据填充的地址
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;//SRC模式,外设向内存中搬运
DMA_InitStructure.DMA_BufferSize = 300; //接收容量
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搬运数字的大小
DMA_InitStructure.DMA_Mode = DMA_Mode_Circular; //转换模式,循环缓存模式
DMA_InitStructure.DMA_Priority = DMA_Priority_High; //DMA优先级高
DMA_InitStructure.DMA_M2M = DMA_M2M_Disable; //M2M禁止
DMA_Init(DMA1_Channel1, &DMA_InitStructure);
DMA_ITConfig(DMA1_Channel1, DMA_IT_TC , ENABLE);

/* Enable DMA1 channel1 */
DMA_Cmd(DMA1_Channel1, ENABLE);
}

void ADC_Configuration(void)
{
ADC_InitTypeDef ADC_InitStructure;


RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1 | RCC_APB2Periph_AFIO, ENABLE);


/* ADC1 configuration ------------------------------------------------------*/
ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;
ADC_InitStructure.ADC_ScanConvMode = ENABLE;
ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
ADC_InitStructure.ADC_NbrOfChannel = 3;
ADC_Init(ADC1, &ADC_InitStructure);

ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 1, ADC_SampleTime_55Cycles5);

ADC_RegularChannelConfig(ADC1, ADC_Channel_2, 2, ADC_SampleTime_55Cycles5);
ADC_RegularChannelConfig(ADC1, ADC_Channel_4, 3, ADC_SampleTime_55Cycles5);

/* Enable ADC1 DMA */
ADC_DMACmd(ADC1, ENABLE); //打开ADC和DMA的关联

/* Enable ADC1 */
ADC_Cmd(ADC1, ENABLE); //打开ADC,可以通过“ADC_Cmd(ADC1, DISABLE); ”语句来关闭

/* Enable ADC1 reset calibration register */
ADC_ResetCalibration(ADC1);
/* Check the end of ADC1 reset calibration register */
while(ADC_GetResetCalibrationStatus(ADC1));

/* Start ADC1 calibration */
ADC_StartCalibration(ADC1);
/* Check the end of ADC1 calibration */
while(ADC_GetCalibrationStatus(ADC1));

/* Start ADC1 Software Conversion */
ADC_SoftwareStartConvCmd(ADC1, ENABLE);

}

在调试的时候发现每个通道的数据经常会出现乱的现象:本来是通道一的数据出现到通道二之类的。后来一想可能是DMA接收数据完后需要清零,所以在每次数据接收完毕后都会重新配置一下DMA。

 

 

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

PCI Express总线是较旧的PCI/ PCI-X总线的高速串行替换。PCI Express总线与旧PCI之间的主要区别之一是总线拓扑。

关键字: PCIE 通道 串行总线

摘 要:消防自动报警系统与门禁系统是现代楼宇中两套广泛应用的系统,但两套系统由于各种原因又处于各自独立、互无联系的状态。在楼宇中绝大部分通道受控于门禁系统,即使在火灾发生的情况下也无法自动打开,延缓了逃生时间。通过消防报...

关键字: 消防 门禁 智能联动 通道

摘要:针对中小学校的校园安全需求,给出了由一对射频读卡器和枝级服务器组成射频识别单元,然后根据专门设计的规则实现对学生进出校门的行为进行自动识别,并通过短信接口自动把学生进出校门的信息发送给家长,进而采用VPN技术和业务...

关键字: 射频识别 读卡器 通道 平安校园

系统设计师通常侧重于为应用选择最合适的数据转换器,在向数据转换器提供输入的时钟发生器件的选择上往往少有考虑。然而,如果不慎重考虑时钟发生器、相位噪声和抖动性能,数据转换器、动态范围和线性度性能可能受到严重的影响。

关键字: 时钟发生器 adc

专注于引入新品并提供海量库存的电子元器件分销商贸泽电子 (Mouser Electronics) 即日起开始备货TI TLV915x运算放大器和ADS7128 12位模数转换器 (ADC)。

关键字: 贸泽 adc 模数转换器

自然界产生的信号,都是模拟信号,比如我们说话的声音,看到的景色,感受到的温度、湿度、压力、流速、光、电、风及个人的呼吸、血压、体温、心跳、体重、血糖,体脂等等。这些模拟信号都得最终放在电脑,手机等数字领域进行处理,存储或...

关键字: adc 模拟信号

为增进大家对ADC的认识和了解,本文将基于两方面对ADC予以介绍:1.什么是并行ADC,并行ADC的基本原理是什么?2.流水线ADC与其它ADC有何区别。

关键字: adc 指数 流水线adc

ADC是电子电路中常用器件,大家对于ADC也较为熟悉。为增进大家对ADC的了解,本文将对高速ADC以及流水线ADC结构予以介绍。

关键字: adc 指数 流水线adc

ADC也即数模转换器,在现实中,ADC具备重要作用。对于ADC,电子相关专业的朋友想必相当熟悉。为增进大家对ADC的认识,本文将对管道ADC以及其原理予以介绍。

关键字: adc 指数 管道adc

设计人员有各种模数转换器(ADC)可以选择,数字数据输出类型是选择过程中需要考虑的一项重要参数。

关键字: 高速转换器 数字数据 adc
关闭
关闭