新手入门
- 积分
- 36
- 金钱
- 36
- 注册时间
- 2014-12-1
- 在线时间
- 0 小时
|
5金钱
如果不进行dma传输结束标志检查,通过串口可以看到ad数据。
使用了检查dma是否发送完成,就会死在等待这块
/*定时中断采集AD数据*/
void TIM2_IRQHandler(void)
{
if(TIM2->SR&0X01)
{ ADC1->CR2|=1<<22;//开始转换
while(!(ADC1->SR&(1<<1)));//等待转换结束
ADC1->SR&=0<<1;
dma_ad_enable(DMA1_Channel1);//使能ADC-DMA
while(!(DMA1->ISR&(1<<1)))
{USART3->DR=DMA1_Channel1->CNDTR;}
//等待传输完成中标志
DMA1->IFCR|=1<<1;//清楚传输完成中断标志
for(y=0;y<6;y++)
{
i=ad_val[y];
USART3->DR=(i/10000)+0x30;
while(!(USART3->SR&1<<7));
USART3->DR=((i%10000)/1000)+0x30;
while(!(USART3->SR&1<<7));
USART3->DR=((i%1000)/100)+0x30;
while(!(USART3->SR&1<<7));
USART3->DR=((i%100)/10)+0x30;
while(!(USART3->SR&1<<7));
USART3->DR=(i%10)+0x30;
while(!(USART3->SR&1<<7));
USART3->DR='\r';
while(!(USART3->SR&1<<7));
}
while(!(USART3->SR&1<<7));
USART3->DR='\r';
while(!(USART3->SR&1<<7));
PBout(5)=~PBout(5);
}
TIM2->SR&=~(1<<0);
dma_enable(DMA1_Channel2);
}
|
|