我有三个模拟量通道,需要用ADC0的0、1、2通道来转换成数字量,并且读取出来,编程后只能读出0通道的值,其他通道的值和0通道一样。 求解啊 求解啊。。 对DMA概念很模糊啊 又很急。望各位大虾们解释啊。。感激啊。。。
main函数:
#include "led.h"
#include "delay.h"
#include "sys.h"
#include "key.h"
#include "usart.h"
#include "exti.h"
#include "wdg.h"
#include "timer.h"
#include "pwm.h"
#include "adc.h"
int main(void)
{
SystemInit();
delay_init(72); //延时初始化
NVIC_Configuration();
uart_init(9600);
LED_Init();
KEY_Init(); //按键初始化
Adc_Init();
DMA_Configuration();
while(1)
{
Read_ADC1_MultiChannel(ADC_Channel_0);
Read_ADC1_MultiChannel(ADC_Channel_1);
Read_ADC1_MultiChannel(ADC_Channel_2);
}
}
另外读取数字量的函数:
void Read_ADC1_MultiChannel(unsigned char u8_channNo)
{
unsigned short ADC_data = 0;
unsigned char i,id;
ADC_SoftwareStartConvCmd(ADC1, DISABLE);
for(i=4;i>0;i--)
{
ADC_RegularChannelConfig(ADC1, u8_channNo, 1, ADC_SampleTime_239Cycles5 );
ADC_SoftwareStartConvCmd(ADC1, ENABLE); /* 软件启动 ADC1 */
do
{
id = ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC); /* 读取转换标志 */
} while(!id); /* 等待,直到转换完成 */
ADC_data += ADC_GetConversionValue(ADC1);
ADC_SoftwareStartConvCmd(ADC1, DISABLE); /* 软件停止 ADC1 */
}
ADC_data = ADC_data >> 4; /* 取 16 次采样平均值 */
ADC_data = (unsigned int)(((unsigned int)ADC_data)*3300>>12);/* 把采集到的数值转换成电压数据 */
MultiChannel_AsciiBuff[0] = ADC_data/1000%10 + 0x30;
MultiChannel_AsciiBuff[1] = ADC_data/100%10 + 0x30;
MultiChannel_AsciiBuff[2] = ADC_data/10%10 + 0x30; /* 数据分离送 USART1 显示 */
MultiChannel_AsciiBuff[3] = ADC_data%10 + 0x30;
MultiChannel_AsciiBuff[4] = 0;
printf("MultiChannel_AsciiBuff:\t%d.%d%d%dv\n",MultiChannel_AsciiBuff[0],MultiChannel_AsciiBuff[1],MultiChannel_AsciiBuff[2],MultiChannel_AsciiBuff[3]) ;
}
谢谢了。。
|