请教:一个WINCE下串口通信的问题,很急!

xudonghe1234 2009-04-20 06:37:02
最近做一个ARM9数据采集的项目,采用S3C2410内核,通过带数显的千分尺测量数据,然后通过RS232接口模块发送到ARM板的串口1,串口程序用EVC4.0编写,数显千分尺不间断主动发送数据,ARM上手动启动采集,用多线程读数据,但是一直读不到数据,想问一下,对这种情况是否要为千分尺写专门的驱动程序,千分尺输出遵循的是标准的RS232协议?用VC6.0写的串口程序在 PC与千分尺之间采集数据已经走通了,我也知道WINCE不支持重叠I/O,所以采用了多线程,程序应该没有问题,我想是不是驱动出了问题?我采用的是厂家提供的BSP定制的WINCE系统。
...全文
317 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
chxy85 2009-04-25
  • 打赏
  • 举报
回复
我做过的串口通信的应用程序,最后得不到数据发现是码率问题,给电脑发送竟然要691200,给打印机115200

菜鸟,希望对LZ有帮助
AMOROUS 2009-04-24
  • 打赏
  • 举报
回复
大侠先确定一下你那个千分尺串口跟板子连接是否正确啊,好像有些千分尺是9线串口,一般arm板子上都是5线的

[Quote=引用楼主 xudonghe1234 的帖子:]
最近做一个ARM9数据采集的项目,采用S3C2410内核,通过带数显的千分尺测量数据,然后通过RS232接口模块发送到ARM板的串口1,串口程序用EVC4.0编写,数显千分尺不间断主动发送数据,ARM上手动启动采集,用多线程读数据,但是一直读不到数据,想问一下,对这种情况是否要为千分尺写专门的驱动程序,千分尺输出遵循的是标准的RS232协议?用VC6.0写的串口程序在 PC与千分尺之间采集数据已经走通了,我也知道WINCE不支持重叠I/O,所以…
[/Quote]
wolong98 2009-04-24
  • 打赏
  • 举报
回复
arm 应该带有一个全功能串口(9线COM),引脚需要自己接出来, 开发板可能为了省成本,没有引出来,这个需要自己作板子引出来。
你的数显千分尺 相当于一个modem 需要dtr,rts 信号来控制 数显千分尺 使能或者禁止发送数据。
fendou_mo 2009-04-23
  • 打赏
  • 举报
回复
我还是觉得我之前说的那个,虽然你说你能和PC连上,PC与千分尺之间采集数据也已经走通了,说明千分尺上已经有了MAX232或是别的,如果你在直接接到ARM模块上的话,那ARM上不是也有吗,两个电平就冲突了,我觉得这样是不可以的。
xudonghe1234 2009-04-23
  • 打赏
  • 举报
回复
也就是说ARM上是五线异步串口,而千分尺要求9线制串口,需要DTR和RTS两脚的状态信号,该怎么实现转换,如果要加另外的处理电路,采用什么芯片比较好?
xudonghe1234 2009-04-23
  • 打赏
  • 举报
回复
楼上能不能详细解释一下为什么会冲突,我查了一下开发板硬件手册,发现问题确实是出在硬件上,开发板的串口只用到了(TX、RX、CTS、RTS、GND)这五根线,而千分尺说明书上要求DTR设为有效,RTS设为无效,现在板子上DTR引脚没用到怎么办,我现在正在考虑是不是直接给DTR(4脚)加上一个5V左右的外部电压,让它一直处于高电平,不知道这个方法能不能行的通。不管怎样,都很谢谢你,分数最后会给你。(开发板上的转换芯片是MAX3232,千分尺上用的什么芯片还不知道,都封装起来了)
xudonghe1234 2009-04-21
  • 打赏
  • 举报
回复
首先感谢大家这么热心的解答,我是新手,第一次在这里发帖就感受到了集体的温暖。我又查了一下,在远峰2410光盘的BSP中\SMDK2410\\KERNEL\HAL\debug.c目录下有这么一段初始化调试串口的代码:这段代码把FIFO和AFC禁用了,不知道跟这个有没有关系。
void OEMInitDebugSerial(void)
{
volatile UART1reg *s2410UART1 = (UART1reg *)UART0_BASE;
volatile IOPreg *s2410IOP = (IOPreg *)IOP_BASE;

// UART1 (TXD1 & RXD1) used for debug serial.
//

// Configure port H for UART.
//
s2410IOP->rGPHCON &= ~((3 << 4) | (3 << 6)); // Configure GPH2 and GHP3 for UART1 Tx and Rx, respectively.
s2410IOP->rGPHCON |= ((2 << 4) | (2 << 6)); //
s2410IOP->rGPHUP |= (1 << 4) | (1 << 5); // Disable pull-up on TXD1 and RXD1.

// Configure UART.
//
s2410UART1->rUFCON = 0x0; // Disable the FIFO (TODO: do we need to enable the FIFO?)
s2410UART1->rUMCON = 0x0; // Disable AFC.
s2410UART1->rULCON = 0x3; // Normal mode, N81.
s2410UART1->rUCON = 0x245; // Rx pulse interrupt, Tx level interrupt, Rx error status interrupt enabled.
s2410UART1->rUBRDIV = ( (int)(S2410PCLK/16.0/UART1BaudRate + 0.5) -1 ); // Set up baudrate (38400).

}
一条晚起的虫 2009-04-21
  • 打赏
  • 举报
回复
既然串口助手可以收到,那就说明硬件方面没有问题。
你的串口配置是否正确?
fendou_mo 2009-04-21
  • 打赏
  • 举报
回复
我怀疑是不是硬件上出了问题了,2410上的串口已经有电平转换的芯片了,你千分尺通信模块可以不要了吧,不然不就冲突了,不然就改成RX接RX TX接TX
xudonghe1234 2009-04-21
  • 打赏
  • 举报
回复
我试过了,串口调试助手发送接收数据一切正常,
BSP中debug.c文件的OEMInitDebugSerial()函数里的这段代码到底是什么意思,对串口通信会产生什么影响?

s2410UART1->rUFCON = 0x0; // Disable the FIFO (TODO: do we need to enable the FIFO?)
s2410UART1->rUMCON = 0x0; // Disable AFC.
s2410UART1->rULCON = 0x3; // Normal mode, N81.
s2410UART1->rUCON = 0x245; // Rx pulse interrupt, Tx level interrupt, Rx error status interrupt enabled.
s2410UART1->rUBRDIV = ( (int)(S2410PCLK/16.0/UART1BaudRate + 0.5) -1 ); // Set up baudrate (38400).
kingpha 2009-04-21
  • 打赏
  • 举报
回复
先检测硬件,例如用示波仪看看相应的串口IO上是否接收到数据
gooogleman 2009-04-21
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 xudonghe1234 的回复:]
但是如果把调试串口设为普通串口的话,WINCE镜像下载到开发板上这一步就没法做了,因为DNW软件窗口看不到下载提示信息了,不知道该怎么办了,板子上只有一个物理串口。
[/Quote]

汗,还用串口下载镜像?

你用串口调试助手发送接收数据,看是否正常,如果可以,那么就是你的应用程序问题。

如果这个都不行,那么找卖给你2410 的那家伙,太不厚道了。
xudonghe1234 2009-04-21
  • 打赏
  • 举报
回复
但是如果把调试串口设为普通串口的话,WINCE镜像下载到开发板上这一步就没法做了,因为DNW软件窗口看不到下载提示信息了,不知道该怎么办了,板子上只有一个物理串口。
xudonghe1234 2009-04-20
  • 打赏
  • 举报
回复
可以打开串口,也能跟串口助手,也能跟串口助手通信。千分尺通信的要求是DTR设为有效,RTS设为无效,数据以ASCII码不间断主动发送,接上千分尺到串口1采集数据时发现只能读到一个字符,还显示不出来
小赌移情 2009-04-20
  • 打赏
  • 举报
回复
不是吧 你系統好了之後 用CreateFile打開串口成功嗎? 能跟串口助手通信嗎?
這個不用寫驅動的.
xudonghe1234 2009-04-20
  • 打赏
  • 举报
回复
在PC上用串口调试工具给ARM的串口1发数据,wince可以收到,数显尺接PC的串口也能读到数据,我查了一下,2410的串口1适当做调试串口用的,我想是不是跟这个有关系,如果要改成普通串口,怎么改?
91program 2009-04-20
  • 打赏
  • 举报
回复
先检测硬件,例如用示波仪看看相应的串口IO上是否接收到数据,有无波形变化
如果硬件都不能,软件就无能为力啦
constantine 2009-04-20
  • 打赏
  • 举报
回复
程序有没有问题先用串口调试工具发送一些数据看看你的wince能否收到。

19,500

社区成员

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

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