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