主题:EM3352的ttyS5的问题 共有84550人关注过本帖 |
---|
![]() SHENYANG |
1楼 信息 | 搜索 | 邮箱 |
![]() ![]() ![]() ![]() |
EM3352的ttyS5的问题 ![]()
ttyS5属于低速串口,波特率不得高于19200,我在程序中将其初始化为9600波特率,用同样的函数将ttyS3初始化为115200波特率,串口连接在485芯片上输出。但是ttyS3是可以正常输出的,ttyS5的TX输出电平最低只能到1.3V左右,不能完全降下来,TX引脚是直接接到485芯片引脚上的,这中间不会产生问题,所以我想问的是,为什么电平拉不下来。
|
单帖管理 | 引用 | 回复 ![]() |
![]() hzc |
2楼 信息 | 搜索 | 邮箱 |
![]() ![]() ![]() ![]() |
![]()
你好,建议测试一下在不连接任何外设的情况下,ttyS5的TX低电平是否也只能到1.3V。
ttyS5和ttyS6都是低速口,可以参考一下我们评估底板的原理图,ttyS6是扩展成了RS485的。
|
单帖管理 | 引用 | 回复 ![]() |
SHENYANG |
3楼 |
![]() |
![]()
回复:今天一早来公司就按你说的方式测了一下,把核心板插在你们公司的底板上,运行程序,用示波器看ttyS5引脚,对应的是GPIO2和GPIO3,能够看到发送波形,但是波形的低电平在1.6-1.8之间,高电平是3.3V,你们公司提供的底板上ttyS5并没有接485,是悬空的状态。
|
单帖管理 | 引用 | 回复 ![]() |
![]() lgz |
4楼 信息 | 搜索 | 邮箱 |
![]() ![]() ![]() ![]() |
![]()
你好,你还有其他的核心板吗?方便的话换一张核心板再测试一下悬空状态的电平,我测了一下输出低电平是0V的,用的光盘中的例程,ttyS5,波特率9600、115200都没问题
|
单帖管理 | 引用 | 回复 ![]() |
客人 |
5楼 |
![]() |
![]()
有的,另一块也是这样,在你们公司的底板上测试的。
|
单帖管理 | 引用 | 回复 ![]() |
![]() lgz |
6楼 信息 | 搜索 | 邮箱 |
![]() ![]() ![]() ![]() |
![]()
你好,你是用的你们自己写的程序吗,可以试一下我们光盘里面的串口程序
|
单帖管理 | 引用 | 回复 ![]() |
客人 |
7楼 |
![]() |
![]()
用了你们的程序发现如果是重新上电的话就好用,但是如果运行了我的程序后再运行你们的程序就又那样了。我的程序有什么问题?你们这个ttyS5到底有什么问题,为什么这样。
|
单帖管理 | 引用 | 回复 ![]() |
![]() lgz |
8楼 信息 | 搜索 | 邮箱 |
![]() ![]() ![]() ![]() |
![]()
你好,应该是你程序的问题,我们的程序重复运行也不会出现你那样的情况,可以好好看看一下程序代码,主要参考Serial.cpp中的OpenPort函数和set_port函数,可能是你在程序里面设置串口参数时出错了
|
单帖管理 | 引用 | 回复 ![]() |
客人 |
9楼 |
![]() |
![]()
确实是我程序的问题,但是我用另一个测试程序的话这个串口就正常。用我原来出现的问题的程序把串口初始化部分进行修改也不好使,我在程序里使用了六个串口,1路CAN,SPI,网络口,开了七个线程,消息队列,信号量,究竟是什么会影响到ttyS5啊?
|
单帖管理 | 引用 | 回复 ![]() |
客人 |
10楼 |
![]() |
![]()
找到了原因,但是不知道怎么解决。原因是GPIO口的初始化操作,不知道怎么影响到了串口,
int gpio_value; gpio_value = GPIO9+GPIO16+GPIO17+GPIO18+GPIO19+GPIO20+GPIO21+GPIO22+GPIO23+GPIO15; GPIO_fd = gpio_init(); GPIO_OutEnable(GPIO_fd,gpio_value); 这部分是主程序中的,以下是苦中对应的函数 int gpio_init() { int gpio_fd,rc; unsigned int dwPinState; gpio_fd=open("/dev/em335x_gpio",O_RDWR); printf("open file = %d\n",gpio_fd); rc = GPIO_OutEnable(gpio_fd,0x40003CF); if(rc<0) { printf("open gpio failed %d\n",rc); //return rc; } else; dwPinState = 0xffffffff; rc = GPIO_PinState(gpio_fd,&dwPinState); if(rc<0) { printf("GPIO_PinState::failed %d\n",rc); //return rc; } printf("PinState = 0xx\n",dwPinState); sleep(1); return gpio_fd; } int GPIO_OutEnable(int fd,unsigned int dwEnBits) { int rc; struct double_pars dpars; dpars.par1 = EM335X_GPIO_OUTPUT_ENABLE; dpars.par2 = dwEnBits; rc = write(fd,&dpars,sizeof(struct double_pars)); return rc; } 请问有什么问题吗?
|
单帖管理 | 引用 | 回复 ![]() |
![]() lgz |
11楼 信息 | 搜索 | 邮箱 |
![]() ![]() ![]() ![]() |
![]()
你好,在你的gpio_init()函数里面调用了GPIO_OutEnable函数,
rc = GPIO_OutEnable(gpio_fd,0x40003CF); 0x40003CF出错了,最后一位F跟串口复用的GPIO(2,3)冲突了,为什么不直接使用之前设置过的gpio_value呢
[此贴子已经被作者于2016-5-10 15:19:06编辑过]
|
单帖管理 | 引用 | 回复 ![]() |
客人 |
12楼 |
![]() |
![]()
哦。谢谢,我也发现了。因为这块程序不是我写的所以以为是用外面的那个gpio_value进行设置的,没发现错误。刚才粘帖完看了一下才发现是这有问题。
|
单帖管理 | 引用 | 回复 ![]() |