小弟正在调试WINCE+2440下串口程序,现在COM1已经打开,我把2440的板子COM1直接用串口线连接到PC的COM3,发现通过COM1写到PC的全是???,通过PC写到COM1的是ff,或者77之类的乱码,是怎么回事?先谢了。
有关串口的问题以前的帖子很多,你搜一下好了。
估计是两边的串口设置不一样。
同意楼上,再就是注意ANSI和Unicode的区别
以前的帖子我也查过了,大多是ANSI和UNICODE的问题,我的设置是一样的,也不是ANSI和UNICODE的问题,我用的是CE6.0就不可以,用5.0和4.2的nk就可以,设置都是一样的,真是郁闷啊~~
6.0和5.0下驱动是一样的 5.0是在PB下开发的 6.0都是集成到VS2005里面的 感觉就是这个区别了
用BUSHOUND抓的数据,通过设备向PC些1,PC收到的是80 00,写2,PC收到的是00 然后a1 20 00 00 00 00 20 00 90 00(我看了串口连接上的时候PC收到的是a1 20 00 00 00 00 20 00 80 00),最后又是00, PC向设备写1或者2时候,设备收到ff,写3的时候设备什么也收不到,诡异
Larmy888说的对,是波特率不匹配造成的,我把PC的波特率设为14400就对了,很奇怪的是设备的波特率是115200啊,两边波特率设置的不一样竟然数据是对的,诡异~~~
你的实际波特率应该还是14400,
我用模拟器的时候也发现这个问题了,
波特率明明设置的是4800bps,程序也不报错,运行正常, 用串口监视软件一看,实际的波特率却被设置成了1200bps
串口问题已经解决,确实是波特率不对,不过是clock不对引起的,
if (!KernelIoControl(IOCTL_PROCESSOR_INFORMATION, NULL, 0, &procInfo, sizeof(PROCESSOR_INFO), &dwBytesReturned))
{
m_s3c2440_pclk = DEFAULT_S3C2440A_PCLK;
RETAILMSG(TRUE, (TEXT("WARNING: CReg2440Uart::CReg2440Uart failed to obtain processor frequency - using default value (%d).\r\n"), m_s3c2440_pclk));
}
else
{
//m_s3c2440_pclk = procInfo.dwClockSpeed;
//++++++modified by sunwave
m_s3c2440_pclk = 50625000;
RETAILMSG(TRUE, (TEXT("INFO: CReg2440Uart::CReg2440Uart using processor frequency reported by the OAL (%d).\r\n"), m_s3c2440_pclk));
}
现在的问题是不知道在BSP哪里改由KernelIoControl函数得到的procInfo.dwClockSpeed,我是硬改的。
希望知道的朋友指点下哈,谢谢楼上几位,这个问题解决再结贴吧
dwClockSpeed就是由S3C2440A_FCLK得到的。