|

楼主 |
发表于 2021-3-25 11:23:03
|
显示全部楼层
我以前也是这么认为的。
但有个代码这样写。
void ADC_DMA_Init(void)
{
//DMA一些配置
DMA_Cmd(DMA2_Stream0, ENABLE);
/*清除一次DMA中断标志*/
DMA_ClearITPendingBit(DMA2_Stream0, DMA_IT_TC);
/* DMA中断开 */
DMA_ITConfig(DMA2_Stream0, DMA_IT_TC, ENABLE);
}
然后没有NVIC配置,这样就不用写中断函数了。
然后写一个查询dma完成中断标志 作为结束标志 这个函数在别的函数调用,
int wait_convert_complete(void)
{
uint16_t timeout = 0;
while(DMA_GetITStatus(DMA2_Stream0,DMA_IT_TCIF0) == RESET)
{
delay_us(1);
timeout++;
if(timeout > 10)
return -1;
};
DMA_ClearITPendingBit(DMA2_Stream0,DMA_IT_TCIF0);
return timeout;
}
|
|