首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

经典_STM32_ADC多通道采样的例子(5)

经典_STM32_ADC多通道采样的例子(5)

u16 GetVolt(u16 advalue)

{

return (u16)(advalue * 330 / 4096); //求的结果扩大了100倍,方便下面求出小数

}




void filter(void)
{
int sum = 0;
u8 count;
for(i=0;i<12;i++)

{

for ( count=0;count<N;count++)

{

sum += AD_Value[count][i];

}

After_filter[i]=sum/N;

sum=0;
}

}




int main(void)
{

u16 value[M];

init_All_Periph();
SysTick_Initaize();


ADC_SoftwareStartConvCmd(ADC1, ENABLE);
DMA_Cmd(DMA1_Channel1, ENABLE); //启动DMA通道
while(1)
{
while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);//等待传输完成否则第一位数据容易丢失

filter();
for(i=0;i<12;i++)
{
value[i]= GetVolt(After_filter[i]);

printf("value[%d]:\t%d.%dv\n",i,value[i]/100,value[i]0) ;
delay_ms(100);
}
}

}
总结
该程序中的两个宏定义,M和N,分别代表有多少个通道,每个通道转换多少次,可以修改其值。
曾出现的问题:配置时钟时要知道外部晶振是多少,以便准确配置时钟。将转换值由二进制转换为十进制时,要先扩大100倍,方便显示小数。最后串口输出时在printf语句之前加这句代码,防止输出的第一位数据丢失:while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);
继承事业,薪火相传
返回列表