对比了原子哥蓝牙模块的DMA发送程序,发现在F1的板子上使用了DMA功能
[mw_shl_code=c,true]void u2_printf(char* fmt,...)
{
va_list ap;
va_start(ap,fmt);
vsprintf((char*)USART2_TX_BUF,fmt,ap);
va_end(ap);
while(DMA_GetCurrDataCounter(DMA1_Channel7)!=0);
UART_DMA_Enable(DMA1_Channel7,strlen((const char*)USART2_TX_BUF));
}[/mw_shl_code]
在F4的板子上
[mw_shl_code=c,true]void u3_printf(char* fmt,...)
{
u16 i,j;
va_list ap;
va_start(ap,fmt);
vsprintf((char*)USART3_TX_BUF,fmt,ap);
va_end(ap);
i=strlen((const char*)USART3_TX_BUF);
for(j=0;j<i;j++)
{
while((USART3->SR&0X40)==0);
USART3->DR=USART3_TX_BUF[j];
}
}[/mw_shl_code]
原子哥在F4上没有用DMA功能,今天我用串口1的DMA功能,如果像在F1板子上那样
while(DMA2_Stream7->NDTR!=0);
MYDMA_Enable(DMA2_Stream7,10);
发现这样DMA并不能传输,不知道为啥,原子哥能解释一下吗??
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>