写在前面:
/*
0x0D 指的是“回车” \r是把光标置于本行行首
0x0A 指的是“换行” \n是把光标置于下一行的同一列
0x0D + 0x0A 回车换行 \r\n把光标置于下一行行首
*/
使用的正点原子例程
if(dma_t==KEY0_PRES)//KEY0按下
{
LCD_ShowString(20,60,200,16,16,"Start Transimit....");
LCD_ShowString(20,80,200,16,16," %");//显示百分号
printf("\r\nDMA DATA:\r\n\r\n");
USART_DMACmd(USART1,USART_DMAReq_Tx,ENABLE);
MYDMA_Enable(DMA1_Channel4);//开始一次DMA传输!
//等待DMA传输完成,此时我们来做另外一些事,点灯
//实际应用中,传输数据期间,可以执行另外的任务
while(1)
{
if(DMA_GetFlagStatus(DMA1_FLAG_TC4)!=RESET)//等待通道4传输完成
{
DMA_ClearFlag(DMA1_FLAG_TC4);//清除通道4传输完成标志
break;
}
dma_pro=DMA_GetCurrDataCounter(DMA1_Channel4);//得到当前还剩余多少个数据
dma_pro=(1)-((dma_pro)/((TEXT_LENTH+2)*10));//得到百分比
dma_pro*=100; //扩大100倍
LCD_ShowNum(20,80,dma_pro,3,16);
}
LCD_ShowNum(20,80,100,3,16);//显示100%
LCD_ShowString(20,60,200,16,16,"Transimit Finished!");//提示传送完成
}
printf("\r\nDMA DATA:\r\n\r\n");这一句,应该是回车换行 DMA DATA: 回车换行回车换行,但是在 发送第一次DMA DATA:之后,就少了一个回车换行
SendBuff[(TEXT_LENTH+2)*10],(TEXT_LENTH+2)*10: 140
DMA DATA:
Hello World!
Hello World!
Hello World!
Hello World!
Hello World!
Hello World!
Hello World!
Hello World!
Hello World!
Hello World!
DMA DATA:
Hello World!
Hello World!
Hello World!
Hello World!
Hello World!
Hello World!
Hello World!
Hello World!
Hello World!
Hello World!
DMA DATA:
Hello World!
Hello World!
Hello World!
Hello World!
Hello World!
Hello World!
Hello World!
Hello World!
Hello World!
Hello World!
在串口调试助手中,看十六进制,0D 0A 0D 0A会变成0D 0A 0D 最后一个0A接收不到
所以添加等待发送结束这一句话
while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET){};
全部代码为
if(dma_t==KEY0_PRES)//KEY0按下
{
LCD_ShowString(20,60,200,16,16,"Start Transimit....");
LCD_ShowString(20,80,200,16,16," %");//显示百分号
printf("\r\nDMA DATA:\r\n\r\n");
while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET)
{
;
/*
等待发送结束
没有这个while循环
printf后面两个\r\n\r\n
会变成\r\n\r
0D 0A 0D 0A会变成
0D 0A 0D 最后一个0A接收不到
就会少一个换行
0D “回车” \r
0A “换行“ \n
*/
}
USART_DMACmd(USART1,USART_DMAReq_Tx,ENABLE);
MYDMA_Enable(DMA1_Channel4);//开始一次DMA传输!
//等待DMA传输完成,此时我们来做另外一些事,点灯
//实际应用中,传输数据期间,可以执行另外的任务
while(1)
{
if(DMA_GetFlagStatus(DMA1_FLAG_TC4)!=RESET)//等待通道4传输完成
{
DMA_ClearFlag(DMA1_FLAG_TC4);//清除通道4传输完成标志
break;
}
dma_pro=DMA_GetCurrDataCounter(DMA1_Channel4);//得到当前还剩余多少个数据
dma_pro=(1)-((dma_pro)/((TEXT_LENTH+2)*10));//得到百分比
dma_pro*=100; //扩大100倍
LCD_ShowNum(20,80,dma_pro,3,16);
}
LCD_ShowNum(20,80,100,3,16);//显示100%
LCD_ShowString(20,60,200,16,16,"Transimit Finished!");//提示传送完成
}
这样就不会出现少回车换行的问题了
SendBuff[(TEXT_LENTH+2)*10],(TEXT_LENTH+2)*10: 140
DMA DATA:
Hello World!
Hello World!
Hello World!
Hello World!
Hello World!
Hello World!
Hello World!
Hello World!
Hello World!
Hello World!
DMA DATA:
Hello World!
Hello World!
Hello World!
Hello World!
Hello World!
Hello World!
Hello World!
Hello World!
Hello World!
Hello World!
DMA DATA:
Hello World!
Hello World!
Hello World!
Hello World!
Hello World!
Hello World!
Hello World!
Hello World!
Hello World!
Hello World!