想用ADC1不停采波形(最高1kHz),通过DMA存到数组里面,然后显示。
新手刚上路,DMA刚刚学习,完全拿原子原先的程序来改的,DMA、ADC的各个函数都没动,就是ADC初始化里面加了一句ADC1的DMA使能。
程序里面特地加了显示传输进度,但是屏幕一直显示0%。
坛子里搜索了一番还是没能解决问题,现在贴上main.c,其他c文件几乎都没动。希望原子哥和各位前辈能帮我。int main(void)
{
float pro=0;
Stm32_Clock_Init(9); //系统时钟设置
uart_init(72,9600); //串口初始化为9600
delay_init(72); //延时初始化
LED_Init(); //初始化与LED连接的硬件接口
LCD_Init(); //初始化LCD
TIM3_Int_Init(2999,7199); //1kHz采样率
Adc_Init(); //ADC初始化
  OINT_COLOR=BLUE;//设置字体为蓝色
LCD_ShowString(60,170,200,16,16," %");//显示百分号
MYDMA_Config(DMA1_Channel1,(u32)&ADC1->DR,(u32)SendBuff,320);//DMA1通道1,外设为ADC1,存储器为SendBuff,长度320.
while(1)
{
MYDMA_Enable(DMA1_Channel1);
while(1)
{
if(DMA1->ISR&(1<<1))//等待通道1传输完成
{
LED0=~LED0;
for(i=0;i<320;i++)
{
LCD_Fast_DrawPoint(i,240-SendBuff/10,BLUE);
}
DMA1->IFCR|=1<<1;//清除通道1传输完成标志
break;
}
pro=DMA1_Channel1->CNDTR;//得到当前还剩余多少个数据
pro=1-pro/320;//得到百分比
pro*=100; //扩大100倍
LCD_ShowNum(60,170,pro,3,16);
}
}
}
|