OpenEdv-开源电子网
标题:
串口如何把数组中元素一次都打印出来
[打印本页]
作者:
Laughing11
时间:
2018-9-25 15:26
标题:
串口如何把数组中元素一次都打印出来
各位大神好,希望伸出援手帮助小弟解决问题。问题我用串口打印函数打印数组的内容,一个元素一个元素打印可以实现,想一次把所有元素都打印出来不行?代码如下希望大神和版主帮忙解决。
串口打印函数代码:
__align(8) u8 USART2_TX_BUF[USART2_TXBUFF_SIZE]; //串口2发送区
/*-------------------------------------------------*/
/*函数名:串口2printf */
/*参 数:无 */
/*返回值:无 */
/*-------------------------------------------------*/
void u2_printf(char* fmt,...)
{
u16 i,length;
va_list ap;
va_start(ap,fmt);
vsprintf((char*)USART2_TX_BUF,fmt,ap);
va_end(ap);
length=strlen((const char*)USART2_TX_BUF);
while((USART2->SR&0X40)==0);
for(i = 0;i < length;i ++)
{
USART2->DR = USART2_TX_BUF
;
while((USART2->SR&0X40)==0);
}
}
主函数:
char a[5] = {'a','b','2','3','4'};
int main(void)
{
delay_init(); //延时初始化
Usart2_init(115200); //串口2初始化
GPIO_Configuration(); //以太网接口配置
NVIC_Configuration(); //以太网中断配置
Ethernet_Configuration(); //以太网配置
TIM3_Init(100,7200); //10ms的延时
MylwIP_Init(); //初始化lwip启动前的事宜
UDP_client_init(server_ip,server_port); //UDP客户端初始化
u2_printf("%c",a);
//小弟是此处用法不对么?
while (1)
//此处设置断点串口助手打印出的现象如下图
{
if(udp_demo_flag&1<<6)//是否收到数据?
{
u2_printf("%c",a);
u2_printf("%c",a[0]);
u2_printf("%c",a[2]);
// LCD_Fill(30,250,lcddev.width-1,lcddev.height-1,WHITE);//清上一次数据
// LCD_ShowString(30,250,lcddev.width-30,lcddev.height-230,16,udp_demo_recvbuf);//显示接收到的数据
udp_demo_flag&=~(1<<6);//标记数据已经被处理了.
}
lwip_periodic_handle(); //lwIP周期处理任务
}
}
串口助手显示:在while中第一个打印显示“横杠”,一个一个打印显示的对,小弟想把数组中的元素一次都打印出来,试了好多次也不行,希望大神帮助,小弟先在此谢谢各位了。
开发板静态IP地址: 192.168.0.30
开发板子网掩码地址:255.255.255.0
开发板网关地址: 192.168.0.1
a2
a2
a2
a2
开发板静态IP地址: 192.168.0.30
开发板子网掩码地址:255.255.255.0
开发板网关地址: 192.168.0.1
作者:
edmund1234
时间:
2018-9-25 18:41
用DMA。。。
作者:
Laughing11
时间:
2018-9-26 11:21
edmund1234 发表于 2018-9-25 18:41
用DMA。。。
不用DMA为啥不行呀?我也是循环打印了
作者:
edmund1234
时间:
2018-9-26 13:11
Laughing11 发表于 2018-9-26 11:21
不用DMA为啥不行呀?我也是循环打印了
不知道你的“一次”是否有特别的意思, 循环还算一次不?
作者:
jiki119
时间:
2018-9-26 16:57
length=strlen((const char*)USART2_TX_BUF);
while((USART2->SR&0X40)==0);
for(i = 0;i < length;i ++)
{
USART2->DR = USART2_TX_BUF[i];
while((USART2->SR&0X40)==0);
}
看看,这样改如何?
多看看字节的代码,10之8,9是自己写的有bUG
欢迎光临 OpenEdv-开源电子网 (http://47.111.11.73/)
Powered by Discuz! X3.4