OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4317|回复: 1

串口返回的AD检测值都是0.0000,无论采集什么电平。为什么?求大神赐教!!!

[复制链接]

2

主题

3

帖子

0

精华

新手入门

积分
31
金钱
31
注册时间
2014-8-23
在线时间
0 小时
发表于 2014-8-25 12:27:53 | 显示全部楼层 |阅读模式
5金钱
float ADC_ConvertedValue[8][2];                                    //ad采集数据存放地址

DMA_DeInit(DMA1_Channel1);                                               //DMA配置
DMA_InitStructure.DMA_PeripheralBaseAddr = ADC1_DR_Address; //ADC地址//(u32)&ADC1->DR//ADC1_DR_Address
DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)&ADC_ConvertedValue;//内存地址
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;
DMA_InitStructure.DMA_BufferSize = 16;
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;//外设地址固定
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;  //内存地址固定
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord; //半字
DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;
DMA_InitStructure.DMA_Mode = DMA_Mode_Circular; //循环传输
DMA_InitStructure.DMA_Priority = DMA_Priority_High;
DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
DMA_Init(DMA1_Channel1, &DMA_InitStructure);
 /* Enable DMA channel1 */
DMA_Cmd(DMA1_Channel1, ENABLE);

extern float ADC_ConvertedValue[8][2];                                //filter.c中进行外部声明

void AD_filter(void)                                                               //该函数对ADC_ConvertedValue[8][2]进行滤波
{
char mm;
for(mm=0;mm<8;mm++)
{
result_chan0+=ADC_ConvertedValue[mm][0];
result_chan1+=ADC_ConvertedValue[mm][1];
// result_chan2+=maopao_2_data[mm];
}
result_chan0/=8;  //AN0 即result_chan0/=8
result_chan1/=8;  //AN1
if(result_chan0>=0xfff)result_chan0=0xfff;
if(result_chan1>=0xfff)result_chan0=0xfff;
}

extern float result_chan0,result_chan1;                                                        //知道函数中调用数据平均值

void TIM2_IRQHandler(void)                                                                                        //中断函数
{
if ( TIM_GetITStatus(TIM2 , TIM_IT_Update) != RESET ) 

tim2_add++;

if (tim2_add>=30)
{
tim2_add=0;
A++;
AD_filter();  
ADIN_Data =(result_chan0/4096)*3.314*10;                                          //不知道是不是这里的问题
buck_VI =(result_chan1/4096)*3.314*10;

buck_VO=ADIN_Data;

buck_PID();
}
if(A>=100)GPIO_ResetBits(GPIOB,GPIO_Pin_9);
if(A>=200){GPIO_SetBits(GPIOB,GPIO_Pin_9);A=0;}                                //小灯闪烁正常
 
TIM_ClearITPendingBit(TIM2 , TIM_FLAG_Update);    

}


printf("%f\n",buck_VI);                            //这句位于主函数,串口有返回值,返回值都是0.0000   在没加滤波void AD_filter(void)之前返回过正常值,说明AD检测没有问题,串口有返回值说明串口没问题,小灯闪烁说明进入了中断函数。


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

4

主题

200

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
236
金钱
236
注册时间
2012-12-19
在线时间
0 小时
发表于 2014-8-25 13:09:32 | 显示全部楼层
那你就就看看AD_filter()到底怎么回事啊
目前在玩STM32,BBB,RPi
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-2 11:37

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表