新聞中心
引言:

成都創(chuàng)新互聯(lián)于2013年創(chuàng)立,先為嵩縣等服務(wù)建站,嵩縣等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為嵩縣企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問(wèn)題。
隨著物聯(lián)網(wǎng)技術(shù)的應(yīng)用不斷普及,在嵌入式領(lǐng)域,串口通信一直是低成本、簡(jiǎn)單易用的數(shù)據(jù)傳輸方式。Linux系統(tǒng)并沒(méi)有像 Windows 系統(tǒng)那樣封裝好串口通信相關(guān)的函數(shù),因此在 Linux 下要實(shí)現(xiàn)串口通信需要自己編寫(xiě)代碼。本文將結(jié)合 AT 指令實(shí)際案例,探究串口通信在 Linux 系統(tǒng)下的原碼實(shí)現(xiàn)。
一、串口通信簡(jiǎn)介
串口通信是一種基于異步傳輸模式的串行通信方式,指的是通過(guò)串行線路在兩個(gè)設(shè)備之間傳輸數(shù)據(jù)。其傳輸數(shù)據(jù)的速率通常較慢,但可以傳輸大量數(shù)據(jù)。串口通信分為兩個(gè)方向:發(fā)送端和接收端。在發(fā)送端,將數(shù)據(jù)轉(zhuǎn)換成串口的格式,然后通過(guò)串口線路發(fā)送出去,在接收端,接收到數(shù)據(jù)后再將數(shù)據(jù)轉(zhuǎn)換成相應(yīng)的格式,使用相應(yīng)的接口進(jìn)行解析。
二、Linux 系統(tǒng)下的串口通信
在 Linux 系統(tǒng)下,串口通信可以通過(guò)打開(kāi)設(shè)備文件,設(shè)置相應(yīng)的串口參數(shù)后,使用讀寫(xiě)串口文件進(jìn)行數(shù)據(jù)的收發(fā)。常用串口通信函數(shù)如下:
示例代碼:
#include
#include
#include
#include
#include
#include
#include
#define DEVICE “/dev/ttyS0”
int mn()
{
int fd;
char buf[1024];
struct termios option;
fd = open(DEVICE, O_RDWR|O_NOCTTY|O_NDELAY);
if(fd
{
perror(DEVICE);
return -1;
}
tcgetattr(fd, &option);
cfsetispeed(&option, B9600);
cfsetospeed(&option, B9600);
option.c_cflag &= ~CSIZE;
option.c_cflag &= ~CRTSCTS;
option.c_cflag |= CS8;
option.c_cflag |= CLOCAL|CREAD;
option.c_iflag |= IGNPAR;
option.c_iflag &= ~(IXON | IXOFF | IXANY);
option.c_oflag &= ~OPOST;
option.c_cc[VTIME] = 0;
option.c_cc[VMIN] = 1;
tcflush(fd, TCIFLUSH);
tcsetattr(fd,TCSANOW,&option);
while(1)
{
if(read(fd,buf,sizeof(buf)) >0)
{
printf(“%s”,buf);
memset(buf, 0, sizeof(buf));
}
}
close(fd);
return 0;
}
基于以上代碼,可以通過(guò)讀寫(xiě)串口文件進(jìn)行數(shù)據(jù)的收發(fā),但這還不夠。在實(shí)際應(yīng)用中,可能需要發(fā)送一些指令,例如 AT 指令等。接下來(lái),我們將結(jié)合 AT 指令實(shí)際案例,探究串口通信在 Linux 系統(tǒng)下的原碼實(shí)現(xiàn)。
三、AT 指令應(yīng)用實(shí)例
AT 指令是一種管理調(diào)制解調(diào)器(MODEM)或者 G/GPRS 模塊的指令,其中包含的 AT 是“ATtention”的縮寫(xiě)。通常情況下,需要使用 AT 指令來(lái)進(jìn)行短信發(fā)送、撥號(hào)等操作。在本例中,我們將介紹如何使用 AT 指令來(lái)控制 G/GPRS 模塊的短信發(fā)送。
1. 打開(kāi)串口設(shè)備
int fd = open(SERIAL_PORT, O_RDWR|O_NOCTTY|O_NDELAY);
2. 設(shè)置串口參數(shù)
struct termios option;
tcgetattr(fd, &option);
cfsetispeed(&option, B9600);
cfsetospeed(&option, B9600);
option.c_cflag &= ~CSIZE;
option.c_cflag &= ~CRTSCTS;
option.c_cflag |= CS8;
option.c_cflag |= CLOCAL|CREAD;
option.c_iflag |= IGNPAR;
option.c_iflag &= ~(IXON | IXOFF | IXANY);
option.c_oflag &= ~OPOST;
option.c_cc[VTIME] = 0;
option.c_cc[VMIN] = 1;
tcflush(fd, TCIFLUSH);
tcsetattr(fd,TCSANOW,&option);
3. 發(fā)送 AT 指令
char send_buf[] = “AT\r”;
write(fd, send_buf, strlen(send_buf));
4. 接收 G 模塊返回信息
char recv_buf[1024];
memset(recv_buf, 0, sizeof(recv_buf));
if(read(fd, recv_buf, 1024) > 0)
{
printf(“%s”, recv_buf);
}
5. 設(shè)置短信中心號(hào)碼
char send_buf[] = “AT+CSCA=\”+8613800250500\”\r”;
write(fd, send_buf, strlen(send_buf));
6. 發(fā)送短信
char send_buf[] = “AT+CMGS=\”13912345678\”\r”;
write(fd, send_buf, strlen(send_buf));
7. 輸入短信內(nèi)容
char send_buf[] = “hello world”;
write(fd, send_buf, strlen(send_buf));
8. 發(fā)送結(jié)束標(biāo)識(shí)“Ctrl+Z”
char send_buf[] = “\x1a”;
write(fd, send_buf, strlen(send_buf));
這樣,我們就可以在 Linux 系統(tǒng)下使用 AT 指令來(lái)控制 G/GPRS 模塊進(jìn)行短信發(fā)送了。以上操作均為串口通信的實(shí)際應(yīng)用案例,涉及到了串口設(shè)備的打開(kāi)、參數(shù)設(shè)置、數(shù)據(jù)讀寫(xiě)等操作,同時(shí)也介紹了如何使用 AT 指令來(lái)控制 G/GPRS 模塊。
結(jié)論:
相關(guān)問(wèn)題拓展閱讀:
- 我用Qt在linux下,編寫(xiě)一個(gè)串口程序,然后移植到ARM上,然后給GPRS發(fā)個(gè)at,沒(méi)有回應(yīng)?求大蝦幫忙
我用Qt在linux下,編寫(xiě)一個(gè)串口程序,然后移植到ARM上,然后給GPRS發(fā)個(gè)at,沒(méi)有回應(yīng)?求大蝦幫忙
檢查你的串口設(shè)備是否正確
你代碼中的串口設(shè)置有無(wú)問(wèn)題,網(wǎng)上找個(gè)demo看看,很多的
同樣在學(xué)習(xí)中
linux下的串口助手
關(guān)于串口 at 源碼 linux的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。
成都網(wǎng)站推廣找創(chuàng)新互聯(lián),老牌網(wǎng)站營(yíng)銷公司
成都網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián)(www.cdcxhl.com)專注高端網(wǎng)站建設(shè),網(wǎng)頁(yè)設(shè)計(jì)制作,網(wǎng)站維護(hù),網(wǎng)絡(luò)營(yíng)銷,SEO優(yōu)化推廣,快速提升企業(yè)網(wǎng)站排名等一站式服務(wù)。IDC基礎(chǔ)服務(wù):云服務(wù)器、虛擬主機(jī)、網(wǎng)站系統(tǒng)開(kāi)發(fā)經(jīng)驗(yàn)、服務(wù)器租用、服務(wù)器托管提供四川、成都、綿陽(yáng)、雅安、重慶、貴州、昆明、鄭州、湖北十堰機(jī)房互聯(lián)網(wǎng)數(shù)據(jù)中心業(yè)務(wù)。
分享文章:Linux系統(tǒng)串口通信原碼探究——AT指令應(yīng)用 (串口 at 源碼 linux)
本文地址:http://fisionsoft.com.cn/article/dhedscp.html


咨詢
建站咨詢
