STM32_ADC+DMA
要概念,用来采集多个数据的
DMA_InitStruct.DMA_PeripheralInc = DMA_PeripheralInc_Disable; //接收一次数据后,设备地址是否后移
DMA_InitStruct.DMA_Mode = DMA_Mode_Circular; //转换模式,循环缓存模式,常用,M2M果果开启了,这个模式失效
。
DMA_InitStruct.DMA_Priority = DMA_Priority_High; //DMA优先级,高
DMA_InitStruct.DMA_BufferSize = 1; //DMA缓存大小,1个
DMA_Init(DMA1_Channel1,&DMA_InitStruct);
// Enable DMA1
DMA_Cmd(DMA1_Channel1, ENABLE);
}
void ADCx_Init(unsigned char ADC_Channel)
{
ADC_DeInit(ADC1); //开启ADC1
ADC_InitStruct.ADC_Mode = ADC_Mode_Independent; //转换模式,为独立转换。转换模式太多了,以后深究
ADC_InitStruct.ADC_DataAlign = ADC_DataAlign_Right; //对齐方式,ADC结果是12位的,显然有个对齐左边还是右边
的问题。一般是右对齐
ADC_InitStruct.ADC_ContinuousConvMode = ENABLE; //连续转换模式开启
ADC_InitStruct.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; //ADC外部出发开关,关闭
ADC_InitStruct.ADC_NbrOfChannel = 2; //开启通道数,2个
ADC_InitStruct.ADC_ScanConvMode = ENABLE; //扫描转换模式开启
ADC_Init(ADC1, &ADC_InitStruct);
ADC_RegularChannelConfig(ADC1, ADC_Channel, 1, ADC_SampleTime_239Cycles5); //规则组通道设置,关键函数 转
换器ADC1,选择哪个通道channel,规则采样顺序,1到16,以后解释详细含义,最后一个参数是转换时间,越长越准越稳定
// ADC1 to DMA, Enable
ADC_DMACmd(ADC1, ENABLE); //ADC命令,和DMA关联。
//ADC1 Enable
ADC_Cmd(ADC1,ENABLE); //开启ADC1
//Reset the Calibration of ADC1
ADC_ResetCalibration(ADC1); //重置校准
//wait until the Calibrations finish
while(ADC_GetResetCalibrationStatus(ADC1)) //等待重置校准完成
;
ADC_StartCalibration(ADC1); //开始校准
while(ADC_GetCalibrationStatus(ADC1)) //等待校准完成
;
ADC_SoftwareStartConvCmd(ADC1, ENABLE); //连续转换开始,从选择开始,MCU可以不用管了,ADC将通过DMA不断刷新
制定RAM区
// Attach them;
}
最后讲讲滤波算法
滤波的方法以后会开个专题。
特别提一下---没有完美的滤波算法,只有合适的滤波算法。
需要综合考虑信号特点,噪声特点,控制对象等等,
这里用个最简单的滤波算法,均值滤波。
采样16次,取平均值,吼吼,在豆皮上跳动还是蛮小的,合适,吼吼
//16ms finish a ADC detection
// return mv
unsigned int ADC_filter(void)
{
unsigned int result="0";
unsigned char i;
for(i=16;i>0;i--)
{
Delay_xms(1);
result += ADC_ConvertedValue;
}
return (unsigned int)(((unsigned long)(result>>4))*3300>>12);
}
STM32ADCDM 相关文章:
- STM32 ADC与DMA多通道处理(12-03)
- STM32 之 ADC_DMA(12-03)
- STM32的ADC DMA USART综合学习(12-02)
- STM32笔记(三)ADC、DMA、USART的综合练习(11-28)
- STM32 ADC结合DMA数据采样与软件滤波处理(11-17)
- Windows CE 进程、线程和内存管理(11-09)