串口不能正确回显

脉清心爱 2010-03-16 01:25:00
我修改了一个移植到S3C2410目标板的bootloader。烧写到Flash,复位后,在初始化设置的波特率下,终端无回显,在其它波特率下有。请问高手这是什么原因,该如何解决?
...全文
1379 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
Kelibin 2010-03-19
  • 打赏
  • 举报
回复
其他波特率行是什么意思?是指比他高或低的都行?
sanyecao111 2010-03-19
  • 打赏
  • 举报
回复
学习了
gdtyy 2010-03-18
  • 打赏
  • 举报
回复
用这个工具调试,拦截一下数据看看到底是什么问题。

下载地址:
http://download.cnet.com/ComTrace/3000-2218_4-75156892.html?tag=mncol

感觉好别忘了给个review(评论),谢谢!
shine487 2010-03-18
  • 打赏
  • 举报
回复
学习了
arm9linuxpp 2010-03-18
  • 打赏
  • 举报
回复
那就是波特率不匹配啦
embedwang 2010-03-18
  • 打赏
  • 举报
回复
估计是PC端的串口配置有点问题。
脉清心爱 2010-03-16
  • 打赏
  • 举报
回复
多谢指导!!
juliet_88 2010-03-16
  • 打赏
  • 举报
回复
用串口反复发0x55(01010101), 在TXD端可看到方波, 通过示波器读出周期(倒数为频率), 加上起停位, 可算出波特率. 用示波器(探头X10), 可测量晶振的频率(用好的频率计测最好), MCU晶振的频率不准会导致波特率的误差大.
脉清心爱 2010-03-16
  • 打赏
  • 举报
回复
首先感谢你的答复!
不是学硬件的。不知道用示波器怎么测试?
改写的bootloader使用的波特率为115200,终端也设置为这个数。在bootloader stage1没用到串口,只是对IO口进行了初始化设置,对串口的初始化在stage2中进行,代码如下:
static int s3c2410_serial_init(serial_baud_t baud)
{
u32 divisor;
//UBRDIVn = (int)(PCLK / (bps x 16) ) –1
//or
//UBRDIVn = (int)(UCLK / (bps x 16) ) –1
//usually,PCLK=FCLK/4=MCLK(202.8MHz)/4,UCLK为USB所用频率
/* get correct divisor */
switch(baud) {
case baud_1200:
divisor = 2639;
break;

case baud_9600:
divisor = 329;
break;

case baud_19200:
divisor = 164;
break;

case baud_38400:
divisor = 81;
break;

case baud_57600:
divisor = 54;
break;

case baud_115200:
divisor = 26;
break;

default:
return -ERANGE;
}

s3c2410_serial_flush_output();
rUFCON0 = 0x0; //FIFO Control Register,disable FIFO
rULCON0 = 0x03; //data bits number,设置数据位8,无奇偶校验位,1位停止位
rUCON0 = 0x05; //Transmit/Receive mode:Interrupt,polling or DMA.Here,Interrupt or polling.Pulse Interrupt.Select PCLK as the UART baud rate.
rUBRDIV0 = divisor;//设置波特率

rUFCON1 = 0x0;
rULCON1 = 0x03;
rUCON1 = 0x05;
rUBRDIV1 = divisor;

for(divisor=0; divisor<100; divisor++);
return 0;
}
这里:baud_57600、baud_115200为枚举类型中的元素。
不知道这样做有什么问题,请高手们指点!
kyzf 2010-03-16
  • 打赏
  • 举报
回复
在初始化设置的波特率下,终端无回显,在其它波特率下有。

这说明你bootloader设置的波特率 可能有问题,不是PC对应的那些可配置的波特率。
也可能PC没有配置好,从而导致两端的波特率不一样。

楼主如果有条件,用示波器测试下就知道啦

21,619

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 驱动开发/核心开发
社区管理员
  • 驱动开发/核心开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧