stm32ADC转化 使用多通道时有一个通道数据有问题,求帮助!

Yellow5A5 2014-06-18 06:14:00
int main(void)
{
#ifdef DEBUG
debug();
#endif

/* System clocks configuration ---------------------------------------------*/
RCC_Configuration();

/* NVIC configuration ------------------------------------------------------*/
NVIC_Configuration();

/* GPIO configuration ------------------------------------------------------*/
GPIO_Configuration();


/* Configure the USART1 */
USART_Configuration1();

printf("\r\n USART1 print AD_value -------------------------- \r\n");

/* DMA channel1 configuration ----------------------------------------------*/
DMA_DeInit(DMA1_Channel1);
DMA_InitStructure.DMA_PeripheralBaseAddr = ADC1_DR_Address;
DMA_InitStructure.DMA_MemoryBaseAddr = (u32)&ADC_ConvertedValue;
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;
DMA_InitStructure.DMA_BufferSize = 1;
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Disable;
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);

/* 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 = 1;
ADC_Init(ADC1, &ADC_InitStructure);

/* Enable ADC1 DMA */
ADC_DMACmd(ADC1, ENABLE);

/* Enable ADC1 */
ADC_Cmd(ADC1, ENABLE);

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

/* Start ADC1 calibaration */
ADC_StartCalibration(ADC1);

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

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

while(1)
{
for(Y=0;Y<5;Y++);
if (ticks++ >= 1800000) { /* Set Clock1s to 1 every 1 second */
ticks = 0;
Clock1s = 1;
}
/* Printf message with AD value to serial port every 1 second */
if (Clock1s)
{
Clock1s = 0;
ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_55Cycles5);
AD0=ADC_GetConversionValue(ADC1);
printf("%04i-", AD0);

ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 1, ADC_SampleTime_55Cycles5);
AD1=ADC_GetConversionValue(ADC1);
printf("%04i-", AD1);

ADC_RegularChannelConfig(ADC1, ADC_Channel_2, 1, ADC_SampleTime_55Cycles5);
AD2=ADC_GetConversionValue(ADC1);
printf("%04i-", AD2);

ADC_RegularChannelConfig(ADC1, ADC_Channel_3, 1, ADC_SampleTime_55Cycles5);
AD3=ADC_GetConversionValue(ADC1);
printf("%04i-", AD3);

ADC_RegularChannelConfig(ADC1, ADC_Channel_4, 1, ADC_SampleTime_55Cycles5);
AD4=ADC_GetConversionValue(ADC1);
printf("%04i-", AD4);

ADC_RegularChannelConfig(ADC1, ADC_Channel_5, 1, ADC_SampleTime_55Cycles5);
AD5=ADC_GetConversionValue(ADC1);
printf("%04i-", AD5);

ADC_RegularChannelConfig(ADC1, ADC_Channel_6, 1, ADC_SampleTime_55Cycles5);
AD6=ADC_GetConversionValue(ADC1);
printf("%04i-", AD6);

ADC_RegularChannelConfig(ADC1, ADC_Channel_7, 1, ADC_SampleTime_55Cycles5);
AD7=ADC_GetConversionValue(ADC1);
printf("%04i-", AD7);

ADC_RegularChannelConfig(ADC1, ADC_Channel_8, 1, ADC_SampleTime_55Cycles5);
AD8=ADC_GetConversionValue(ADC1);
printf("%04i-", AD8);

ADC_RegularChannelConfig(ADC1, ADC_Channel_9, 1, ADC_SampleTime_55Cycles5);
AD9=ADC_GetConversionValue(ADC1);
printf("%04i-", AD9);

ADC_RegularChannelConfig(ADC1, ADC_Channel_10, 1, ADC_SampleTime_55Cycles5);
AD10=ADC_GetConversionValue(ADC1);
printf("%04i-", AD10);

ADC_RegularChannelConfig(ADC1, ADC_Channel_11, 1, ADC_SampleTime_55Cycles5);
AD11=ADC_GetConversionValue(ADC1);
printf("%04i-", AD11);

ADC_RegularChannelConfig(ADC1, ADC_Channel_12, 1, ADC_SampleTime_55Cycles5);
AD12=ADC_GetConversionValue(ADC1);
printf("%04i-", AD12);

ADC_RegularChannelConfig(ADC1, ADC_Channel_13, 1, ADC_SampleTime_55Cycles5);
AD13=ADC_GetConversionValue(ADC1);
printf("%04i-", AD13);

ADC_RegularChannelConfig(ADC1, ADC_Channel_14, 1, ADC_SampleTime_55Cycles5);
AD14=ADC_GetConversionValue(ADC1);
printf("%04i-", AD14);

ADC_RegularChannelConfig(ADC1, ADC_Channel_15, 1, ADC_SampleTime_55Cycles5);
AD15=ADC_GetConversionValue(ADC1);
printf("%04i-", AD15);

ADC_RegularChannelConfig(ADC1, ADC_Channel_16, 1, ADC_SampleTime_55Cycles5);
AD16=ADC_GetConversionValue(ADC1);
printf("%04i-", AD16);
}

}
}

串口助手接收到的数据如下~

0837-0746-0999-0886-4042-2512-0807-2566-2702-0643-0662-2448-2386-0774-0945-2080-1094-

0003-0742-0998-0895-4043-2510-0809-2564-2699-0640-0662-2443-2376-0772-0942-2071-1090-

0003-0747-1008-0910-4042-2531-0814-2571-2708-0645-0664-2447-2373-0770-0938-2061-1083-

代码基本是套例程的~
有问题的分别是ad0和ad4、
stm32有16个外部通道ad。
我这里多了个AD0~它除了一开始有电压,然后就一直都是0,因为我只要用16个,所以我直接无视它好了。

但是AD4为什么一直都是处于高电压状态??没办法测外部电压~
请告诉我改如何修改~T_T 急

...全文
2770 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
wuyuanyi 2014-07-30
  • 打赏
  • 举报
回复
会不会是调试器之类的有用相应管脚
Yellow5A5 2014-06-18
  • 打赏
  • 举报
回复
引用 1 楼 wangfan027 的回复:
没万用表么?
当然用了 。输出恒定为高电平。。
dceacho 2014-06-18
  • 打赏
  • 举报
回复
没万用表么?
智能车主控芯片采用STM32F103ZET6,该处理器为32 位ARM Cortex-M3 处理器,工作频率为72MHz,64K SRAM,512K Flash,12 位ADC,12 位DAC,12 通道DMA,11 个多功能定时器,多达13 个通信接口:2 个I2C 接口(支持SMBus/PMBus),5 个USART 接口(支持ISO7816、LIN、IrDA 接口和调制解调控制),3 个SPI 接口,CAN 接口,USB 2.0 全速接口,SDIO 接口。 目录 智能车简介 4 主控芯片简介 4 传感器模块 4 第一章 STM32基础实验 5 实验一 Keil uVision4安装以及软件介绍 6 实验二 LED流水灯基础实验 10 引脚分配 10 实验原理 10 函数简介 11 实验步骤 11 实验三 精确延时(SysTick) 12 引脚分配 12 实验原理 12 函数简介 12 实验步骤 13 实验四 串口打印实验 14 引脚分配 14 实验原理 14 函数简介 14 实验步骤 14 实验五 定时器控制 16 引脚分配 16 实验原理 16 函数简介 17 实验步骤 17 实验六 AD转化实验 18 引脚分配 18 实验原理 18 函数简介 18 实验步骤 18 第二章 智能车实验 20 实验一 液晶显示实验 21 引脚分配 21 实验原理 21 函数简介 22 实验步骤 23 实验二 按键检测实验 24 引脚分配 24 实验原理 24 函数简介 26 实验步骤 26 实验三 电机控制实验 28 引脚分配 28 实验原理 28 函数简介 29 实验步骤 29 实验四 转速检测实验 31 引脚分配 31 实验原理 31 函数简介 31 实验步骤 32 实验五 黑线寻迹实验 33 引脚分配 33 实验原理 33 函数简介 34 实验步骤 34 实验六 电池电量检测实验 36 引脚分配 36 实验原理 36 实验步骤 36 实验七 自动避障实验 37 引脚分配 37 实验原理 37 函数简介 37 实验步骤 37 实验八 RFID卡片读取实验 38 引脚分配 38 实验原理 38 函数简介 38 实验步骤 39 实验九 语音播报实验 40 引脚分配 40 实验原理 40 实验步骤 40 实验十 Zigbee数据传输实验 41 引脚分配 41 实验原理 41 函数简介 43 实验步骤 43

27,382

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧