主題:EM3352的ttyS5的問題 共有64857人關注過本帖 |
---|
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進行設置的,沒發現錯誤。剛才粘帖完看了一下才發現是這有問題。
|
|
單帖管理 | 引用 | 回復 |