国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

【Rayeager PX2分享】PX2上ttys3串口測試程序編寫

發(fā)布時間:2015-7-2 17:45    發(fā)布者:穿prada的008
關(guān)鍵詞: Android , Rayeager PX2
在PX2開發(fā)板上有個已引出的的ttys3,大家如果用PX2來開發(fā)或者學(xué)習(xí),時不時總是會需要用到這個串口的,而在android系統(tǒng)中,使用串口的方式也很簡單,因?yàn)樵赑X2的源碼中已經(jīng)有了ttys3的驅(qū)動,我們只需要將起編譯進(jìn)內(nèi)核(編譯fangshihttp://bbs.chipspark.com/forum.p ... =%E4%B8%B2%E5%8F%A3)就可以像操作文件一樣,操作這個串口,然后操作這個串口的時候,我們需要做的也只有先做個初始的配置,就是設(shè)置波特率,停止位,數(shù)據(jù)位,奇偶校驗(yàn)。
注:ttys3的連接如果是DB9腳的,理論上只連接RX ,TX,GND便可工作。樓主便是用這個的
1.串口的配置,
串口的配置是利用POSIX終端的termios結(jié)構(gòu)
termios 結(jié)構(gòu)定義如下
struct termios
{
tcflag_t c_iflag /* 輸入選項(xiàng)標(biāo)志 */
tcflag_t c_oflag /* 輸出選項(xiàng)標(biāo)志 */
tcflag_t c_cflag /* 控制選項(xiàng)標(biāo)志 */
tcflag_t c_lflag /* 本地選項(xiàng)標(biāo)志 */
cc_t c_cc[NCCS] /* 控制特性 */
}
而部分參數(shù)的作用參考附件中的內(nèi)容 Linux下串口編程-非常全面-精品.txt.zip (12.2 KB)
核心主要配置波特率,校驗(yàn)位,數(shù)據(jù)位,停止位,
而樓主自己寫的驅(qū)動如下,其中的設(shè)置為波特率115200,無效驗(yàn),八位數(shù)據(jù)位,一位停止位,

#include /*標(biāo)準(zhǔn)輸入輸出定義*/
#include /*標(biāo)準(zhǔn)函數(shù)庫定義*/
#include /*Unix 標(biāo)準(zhǔn)函數(shù)定義*/
#include
#include
#include /*文件控制定義*/
#include /*PPSIX 終端控制定義*/
#include /*錯誤號定義*/
#include

    int OpenDev(char *Dev){

    int fd = open( Dev, O_RDWR )  
    if (-1 == fd){
        perror("Can't Open Serial Port")
        return -1
}
    else
        return fd
}
    int set_opt(int fd,int nSpeed,int nBits,char nEvent,int nStop){
    struct termios newios,oldios
    if(tcgetattr(fd, &oldios)!=0){    //獲取之前定義的終端值   
        perror("setupserial 1")
        return -1
}
    bzero(&newios,sizeof(newios))//將newios結(jié)構(gòu)體里的數(shù)據(jù)重新設(shè)置為0
    newios.c_cflag|=CREAD//使能讀和
    newios.c_cflag&=~CSIZE//字符長度掩碼
    switch(nBits){
        case 7:newios.c_cflag|=CS7break
        case 8:newios.c_cflag|=CS8break


}
    switch(nEvent){
        case '0':
            newios.c_cflag|=PARENB
            newios.c_cflag|=PARODD
            newios.c_cflag|=(INPCK|ISTRIP)//偶校驗(yàn)
            break
        case '1':
            newios.c_cflag|=PARENB
            newios.c_cflag&=~PARODD//奇校驗(yàn)
            break
        case 'N':
            newios.c_cflag&=~PARENB//無校驗(yàn)
            break

}
    switch(nSpeed){//設(shè)置波特率
        case 2400:
            cfsetispeed(&newios,B2400)
            cfsetospeed(&newios,B2400)
            break
        case 4800:
            cfsetispeed(&newios,B4800)
            cfsetospeed(&newios,B4800)
            break
        case 9600:
            cfsetispeed(&newios,B9600)
            cfsetospeed(&newios,B9600)
            break
        case 115200:
            cfsetispeed(&newios,B115200)
            cfsetospeed(&newios,B115200)
            break
        default:
            cfsetispeed(&newios,B115200)
            cfsetospeed(&newios,B115200)
            break
    }
    if(nStop==1)
        newios.c_cflag&=~CSTOPB//一停止位
    else if (nStop==2)
    {
        newios.c_cflag|=CSTOPB//兩停止位
        newios.c_cc[VTIME]=0//無延時
        newios.c_cc[VMIN]=0//無附加
        tcflush(fd,TCIOFLUSH)//刷新輸出隊(duì)列
}        

    newios.c_lflag &= ~(ICANON | IEXTEN | ISIG | ECHO)//原始數(shù)據(jù)輸入
    newios.c_oflag &= ~OPOST//原始數(shù)據(jù)輸出
    if(tcsetattr(fd,TCSANOW,&newios)!=0)//將配置賦予POSIX終端
        {
            perror("com set error")
            return -1

            }

        printf("set done\n")
return 0

}
int main(int argc, char **argv){
int fd
int nread,nwrite
char buff[8]
char *dev = "/dev/ttyS3" //串口3
char bufsend[8]
fd = OpenDev(dev)

if (set_opt(fd,115200,8,'N',1) == FALSE) {
printf("Set Parity Errorn")
exit (0)
}
memset(buff,0,8*sizeof(char))
if(strcmp(argv[1],"receive")==0)
{
while(1){
while((nread = read(fd, buff, 8))>0) //讀數(shù)據(jù),在死循環(huán)中不斷等待,輸出數(shù)據(jù),
{
printf("receive %d ",nread)      
printf( "\n%s", buff)
}}}
memset(bufsend, 0,8*sizeof(char))//清空數(shù)據(jù)棧
if(strcmp(argv[1],"send")==0){//發(fā)送數(shù)據(jù),類型字符
printf("send message:  ")
fgets(bufsend,8,stdin)
printf("\n%s",bufsend)

nwrite=write(fd,bufsend,8)

}

close(fd)
exit (0)
}

2.程序測試,
確認(rèn)連接無誤后,樓主開始發(fā)送數(shù)據(jù),但是,雖然正常實(shí)現(xiàn)串口的通信,但是發(fā)送的數(shù)據(jù)卻是亂碼,一開始樓主發(fā)送了111111111111,而接受到的數(shù)據(jù)是ggggggggggg,其接收到的即不是ascii碼,而對應(yīng)的十六進(jìn)制是67,具體的問題樓主還在研究,估計還得過段時間,才能解決這個問題,按樓主的估計可能性有兩個,一個是樓主是使用DB9接口的,只連了三根線,并沒有VCC,會不會是這個有影響,二,樓主配置串口時,只做了基本配置,或許是某個配置出錯了。這里先放到論壇上分享給大家,后續(xù)再繼續(xù)補(bǔ)充,與大家共勉。

串口調(diào)試助手:
sscom32.rar (274.99 KB)

本文地址:http://www.qingdxww.cn/thread-151102-1-1.html     【打印本頁】

本站部分文章為轉(zhuǎn)載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀點(diǎn)和對其真實(shí)性負(fù)責(zé);文章版權(quán)歸原作者及原出處所有,如涉及作品內(nèi)容、版權(quán)和其它問題,我們將根據(jù)著作權(quán)人的要求,第一時間更正或刪除。
您需要登錄后才可以發(fā)表評論 登錄 | 立即注冊

廠商推薦

  • Microchip視頻專區(qū)
  • 想要避免發(fā)生災(zāi)難,就用MPLAB SiC電源仿真器!
  • 利用模擬開發(fā)工具生態(tài)系統(tǒng)進(jìn)行安全電路設(shè)計
  • Cortex-M4外設(shè) —— TC&TCC結(jié)合事件系統(tǒng)&DMA優(yōu)化任務(wù)培訓(xùn)教程
  • 深度體驗(yàn)Microchip自動輔助駕駛應(yīng)用方案——2025巡展開啟報名!
  • 貿(mào)澤電子(Mouser)專區(qū)

相關(guān)視頻

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權(quán)所有   京ICP備16069177號 | 京公網(wǎng)安備11010502021702
快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 天天噜噜日日噜噜久久综合网 | 国产精品麻豆网站 | 六月丁香色婷婷 | 国产乱了真实在线观看 | 免费看三级毛片 | 国产日韩欧美视频在线 | 欧美做a欧美 | 色综久久天天综合绕视看 | 国产tv在线观看 | 国产福利在线观看永久视频 | 国产三级在线免费 | 免费观看色 | 91seav| 四虎影视www | 女人特黄大aaaaaa大片 | 2019精品手机国产品在线 | 日本伊人精品一区二区三区 | 欧美日韩一区二区三区自拍 | 99热在这里只有免费精品 | 天堂中文在线乱码 | 精品无人区一区二区三区a 精品无人区麻豆乱码1区2区 | 成人国产亚洲欧美成人综合网 | 日韩免费高清一级毛片在线 | 久久99热精品免费观看无卡顿 | 国产精品午夜寂寞视频 | 国产一区二区三区亚洲欧美 | 日本精a在线观看 | 极品美女一区二区三区 | 黄色成人在线 | 亚洲欧美国产视频 | 国产一区二区三区高清 | 全部免费的毛片在线看美国 | 4438a| 四虎永久在线精品免费观看地址 | 91小视频在线观看 | 国产精品伦理久久久久久 | 成人在线视频免费看 | 国内精品久久国产大陆 | 91视在线国内在线播放酒店 | 亚洲黄色高清视频 | 特级毛片一级美国黑人 |