主题:EM3352的ttyS5的问题

  共有28960人关注过本帖    
帅哥哟,离线,有人找我吗?
SHENYANG
1楼 信息 | 搜索 | 邮箱


加好友 发短信
EM3352的ttyS5的问题  发帖心情 Post By:2016-5-9 16:59:00   [只看该作者]

ttyS5属于低速串口,波特率不得高于19200,我在程序中将其初始化为9600波特率,用同样的函数将ttyS3初始化为115200波特率,串口连接在485芯片上输出。但是ttyS3是可以正常输出的,ttyS5的TX输出电平最低只能到1.3V左右,不能完全降下来,TX引脚是直接接到485芯片引脚上的,这中间不会产生问题,所以我想问的是,为什么电平拉不下来。

  单帖管理 | 引用 | 回复 回到顶部
帅哥哟,离线,有人找我吗?
hzc
2楼 信息 | 搜索 | 邮箱


加好友 发短信 员工
  发帖心情 Post By:2016-5-9 17:38:00   [只看该作者]

你好,建议测试一下在不连接任何外设的情况下,ttyS5的TX低电平是否也只能到1.3V。
ttyS5和ttyS6都是低速口,可以参考一下我们评估底板的原理图,ttyS6是扩展成了RS485的。

  单帖管理 | 引用 | 回复 回到顶部
SHENYANG
3楼


  发帖心情 Post By:2016-5-10 8:10:00   [只看该作者]

回复:今天一早来公司就按你说的方式测了一下,把核心板插在你们公司的底板上,运行程序,用示波器看ttyS5引脚,对应的是GPIO2和GPIO3,能够看到发送波形,但是波形的低电平在1.6-1.8之间,高电平是3.3V,你们公司提供的底板上ttyS5并没有接485,是悬空的状态。

  单帖管理 | 引用 | 回复 回到顶部
帅哥哟,离线,有人找我吗?
lgz
4楼 信息 | 搜索 | 邮箱


加好友 发短信 员工
  发帖心情 Post By:2016-5-10 10:27:00   [只看该作者]

你好,你还有其他的核心板吗?方便的话换一张核心板再测试一下悬空状态的电平,我测了一下输出低电平是0V的,用的光盘中的例程,ttyS5,波特率9600、115200都没问题

  单帖管理 | 引用 | 回复 回到顶部
客人
5楼


  发帖心情 Post By:2016-5-10 11:53:00   [只看该作者]

有的,另一块也是这样,在你们公司的底板上测试的。

  单帖管理 | 引用 | 回复 回到顶部
帅哥哟,离线,有人找我吗?
lgz
6楼 信息 | 搜索 | 邮箱


加好友 发短信 员工
  发帖心情 Post By:2016-5-10 12:28:00   [只看该作者]

你好,你是用的你们自己写的程序吗,可以试一下我们光盘里面的串口程序

  单帖管理 | 引用 | 回复 回到顶部
客人
7楼


  发帖心情 Post By:2016-5-10 13:19:00   [只看该作者]

用了你们的程序发现如果是重新上电的话就好用,但是如果运行了我的程序后再运行你们的程序就又那样了。我的程序有什么问题?你们这个ttyS5到底有什么问题,为什么这样。

  单帖管理 | 引用 | 回复 回到顶部
帅哥哟,离线,有人找我吗?
lgz
8楼 信息 | 搜索 | 邮箱


加好友 发短信 员工
  发帖心情 Post By:2016-5-10 13:28:00   [只看该作者]

你好,应该是你程序的问题,我们的程序重复运行也不会出现你那样的情况,可以好好看看一下程序代码,主要参考Serial.cpp中的OpenPort函数和set_port函数,可能是你在程序里面设置串口参数时出错了

  单帖管理 | 引用 | 回复 回到顶部
客人
9楼


  发帖心情 Post By:2016-5-10 14:43:00   [只看该作者]

确实是我程序的问题,但是我用另一个测试程序的话这个串口就正常。用我原来出现的问题的程序把串口初始化部分进行修改也不好使,我在程序里使用了六个串口,1路CAN,SPI,网络口,开了七个线程,消息队列,信号量,究竟是什么会影响到ttyS5啊?

  单帖管理 | 引用 | 回复 回到顶部
客人
10楼


  发帖心情 Post By:2016-5-10 15:10:00   [只看该作者]

找到了原因,但是不知道怎么解决。原因是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楼 信息 | 搜索 | 邮箱


加好友 发短信 员工
  发帖心情 Post By:2016-5-10 15:19:00   [只看该作者]

你好,在你的gpio_init()函数里面调用了GPIO_OutEnable函数,
rc = GPIO_OutEnable(gpio_fd,0x40003CF);

0x40003CF出错了,最后一位F跟串口复用的GPIO(2,3)冲突了,为什么不直接使用之前设置过的gpio_value呢
[此贴子已经被作者于2016-5-10 15:19:06编辑过]

  单帖管理 | 引用 | 回复 回到顶部
客人
12楼


  发帖心情 Post By:2016-5-10 16:27:00   [只看该作者]

哦。谢谢,我也发现了。因为这块程序不是我写的所以以为是用外面的那个gpio_value进行设置的,没发现错误。刚才粘帖完看了一下才发现是这有问题。

  单帖管理 | 引用 | 回复 回到顶部

返回首页

EM3352的ttyS5的问题

用户名:
            验证码: 验证码,看不清楚?请点击刷新验证码
内容: