OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2528|回复: 4

串口如何把数组中元素一次都打印出来

[复制链接]

5

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
60
金钱
60
注册时间
2018-5-16
在线时间
11 小时
发表于 2018-9-25 15:26:35 | 显示全部楼层 |阅读模式
5金钱
各位大神好,希望伸出援手帮助小弟解决问题。问题我用串口打印函数打印数组的内容,一个元素一个元素打印可以实现,想一次把所有元素都打印出来不行?代码如下希望大神和版主帮忙解决。


串口打印函数代码:
__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



正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

1906

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4100
金钱
4100
注册时间
2018-8-14
在线时间
695 小时
发表于 2018-9-25 18:41:38 | 显示全部楼层
回复

使用道具 举报

5

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
60
金钱
60
注册时间
2018-5-16
在线时间
11 小时
 楼主| 发表于 2018-9-26 11:21:50 | 显示全部楼层

不用DMA为啥不行呀?我也是循环打印了
回复

使用道具 举报

3

主题

1906

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4100
金钱
4100
注册时间
2018-8-14
在线时间
695 小时
发表于 2018-9-26 13:11:55 | 显示全部楼层
Laughing11 发表于 2018-9-26 11:21
不用DMA为啥不行呀?我也是循环打印了

不知道你的“一次”是否有特别的意思, 循环还算一次不?
回复

使用道具 举报

2

主题

42

帖子

0

精华

初级会员

Rank: 2

积分
196
金钱
196
注册时间
2014-1-28
在线时间
44 小时
发表于 2018-9-26 16:57:52 | 显示全部楼层
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
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-25 05:44

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表