迪文T5L C51开发遇到的串口发送数据错误问题记录机解决

        最近项目使用串口屏,于是选择的迪文带有T5L可进行C51开发的串口屏,在开发C51过程中遇到了用串口2发送数据出错的奇葩问题(后面有说怎么奇葩),在介绍前多谢迪文FAE工程师的耐心指导!

        在此说明一下 鱼哥讲解的内容很好,但我遇到的问题就是在鱼哥工程的基础上出现的!第二天看迪文开发资料,官网明明写的很明白,就怨自己没有认真

我所使用的功能很简单,就是让串口2把一个全局变量数组中的数据发送出去。

程序如下:

//发送一个字节
void u2_send_byte(u8 byte)
{
	ES0 = 0;//先关闭串口2中断
	SBUF0 = byte;
	while(!TI0);
	TI0 = 0;
	#if(UART2_INT_EN)
		ES0 = 1;//再打开中断
	#endif
}

//发送数据
unsigned char SendData2[10] = {0X5A,0XA5,0X07,0XDD,0XDD,0XBB,0X0C,0X06,0X0C,0X04};

void u2_send_bytes( u8 *bytes,u16 len)
{
	u16 i;
	
//	
// unsigned char SendData1[10] = {0X5A,0XA5,0X07,0XDD,0XDD,0X00,0X0C,0X06,0X0C,0X04};
	
	for(i=0;i<len;i++)
		u2_send_byte(bytes[i]);
		
}


void u2_send_bytes222(u16 len)
{
	u16 i;
	
//	
 unsigned char SendData1[10] = {0X5A,0XA5,0X07,0XDD,0XDD,0X00,0X0C,0X06,0X0C,0X04};
	
	for(i=0;i<len;i++)
		u2_send_byte(SendData1[i]);
		
}


//用uart2串口实现printf函数
char putchar(char c)
{
	u2_send_byte(c);
	
	return c;
}

void main(void)
{
	sys_init();
	uart2_init(115200);
	

	while(1)
	{


		
		u2_send_bytes(SendData,10);   //形参根本没有用到	 u2_send_bytes内部没有传递的参数    数组定义在函数外部,数据发出来不对
		sys_delay_about_ms(1000);
		
		u2_send_bytes222(10);//数组定义在函数内部,可以正常打印出数据
		
		sys_delay_about_ms(1000);
		
//		printf("System Running......\r\n");  //这里可以正常打印出来
//		sys_delay_about_ms(1000);
		
	}
	


}

出现的奇葩问题就是:

        我把SendData[]数组定义在函数外部,发出来的数据就不正确就是这个函数void u2_send_bytes( u8 *bytes,u16 len)

        如果把SendData[]数组定义在函数内部,发出来的数据就没有问题,如:void u2_send_bytes222(u16 len)

串口助手显示如下:

 经过与迪文FAE工程师的讨论,发现鱼哥模块中的启动文件有问题,更换启动文件解决!

迪文C51开发启动文件链接如下:

https://download.csdn.net/download/billjiang2008/87708591

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

billjiang2008

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值