初级会员

- 积分
- 113
- 金钱
- 113
- 注册时间
- 2013-12-21
- 在线时间
- 3 小时
|
5金钱
本人在一个项目中,参考了正点原子的USART1_Printf函数,函数如下:
//发送缓冲区
#define USART1_MAX_SEND_LEN 200 //最大发送字节
__align(8) INT8U USART1_TX_BUF[USART1_MAX_SEND_LEN]; //发送缓冲区
void USART1_Printf(char * fmt,...)
{
va_list ap;
va_start(ap,fmt);
vsprintf((char*)USART1_TX_BUF,fmt,ap);
va_end(ap);
while(DMA_GetCurrDataCounter(DMA1_Channel4)!=0);
UART_DMA_Enable(DMA1_Channel4,strlen((constchar*)USART1_TX_BUF));
}
其他配置正确,串口波特率为9600,通过DMA发送。为了对比,又通过如下函数发送数据,串口也是串口1,没有使用DMA。
void USART1_SendString(char* s)
{
while(*s)
{
while(USART_GetFlagStatus(USART1, USART_FLAG_TC)==RESET);
USART_SendData(USART1 ,*s++);
}
}
void USART1_Send_Len(INT8U len,char *s)
{
if(s!=0)
while(len)
{
while(USART_GetFlagStatus(USART1, USART_FLAG_TC)==RESET);
USART_SendData(USART1 ,*s++);
len--;
}
}
使用USART1_Send_Len发送的数据帧正确,而使用USART1_Printf发送的数据帧只有前四个字节,请问程序哪里不对?
截图如下:
USART1_Send_Len发送
USART1_Printf发送
验证后发现发送字符串时,却能完整的发送出去。不知道什么原因?
|
|