C语言 串口通信
最近,被要求修改STM32做IAP升级的Bootloader.ST已经写好了一个Ymodem协议的Bootloader。现在我要将它改为由Xmodem实现。
问题:
程序写出来,可是在超级终端上传输却没有效果。
数据包:这一栏显示为空。
上一错误:这一栏也显示为空。
表明根本没有收到 数据。。郁闷。下面贴一些关键代码。C的达人和串口通信的高手帮忙指点一下:
u32 SerialKeyPressed(u8 *key) //这是ST写的固件库,应该是没有问题的。
{
if(USART_GteFlagStatus(USART1, USART_FLAG_RXNE) != RESET)
{
return 1;
}
else
{
return 0;
}
}
//下面两个函数是我修改的,不用注释 应该很容易看懂了。。达人们帮忙看看。是不是指针之类的使用有问题?不然怎么可能收不到数据包?我 把while轮询去掉。结果超级终端传输文件时,数据包:这一栏 可以显示数据包1,但是重试 10次失败,就会退出。估计还是收数据有问题。。。
static s32 Recieve_Byte(u8 *c)
{
if(SerialKeyPressed(c) == 1)
{
return 0;
}
return -1;
}
static u8 Get_Byte(void) //一个字节一个字节地收数据
{
u8 temp;
while(Recieve_Byte(&temp) == -1); //轮询
return temp;
}
Xmodem协议部分就不贴了,我自己写了一个版本,编译通过但是运行后,传输不了数据。又在网上找到马潮老师的代码,改写。我估计是串口收数据有问题。但是,这个不知道如何调试。(我是通过超级终端传输单文件)。