最近项目使用串口屏,于是选择的迪文带有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开发启动文件链接如下: