加入星計劃,您可以享受以下權(quán)益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴(kuò)散
  • 作品版權(quán)保護(hù)
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長期合作伙伴
立即加入
  • 正文
    • serial.c
    • serial.h
    • 主函數(shù)main.c
    • 程序說明
  • 相關(guān)推薦
  • 電子產(chǎn)業(yè)圖譜
申請入駐 產(chǎn)業(yè)圖譜

飛凌嵌入式ElfBoard ELF 1板卡-串口通訊編程示例之串口完整代碼

10/25 10:28
171
閱讀需 7 分鐘
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

注意:學(xué)習(xí)資料可在ElfBoard官方網(wǎng)站“資料”專區(qū)獲取。

本節(jié)用到的源碼路徑:ELF 1開發(fā)板資料包->03-例程源碼->03-1 命令行例程源碼->02_elf1_cmd_serialport

serial.c

本節(jié)代碼提供了串口通信的函數(shù)庫,主要分三部分:

(一)設(shè)置串口參數(shù)'func_set_opt'

首先通過func_set_opt設(shè)置參數(shù),波特率從600 bit/s-115200 bits/s,默認(rèn)使用的是9600 bits/s;之后是校驗(yàn)位,五種校驗(yàn)方式分別為奇校驗(yàn)、偶校驗(yàn)、MARK校驗(yàn)、SPACE校驗(yàn)和空校驗(yàn);另外還有檢測是否有停止位;以及硬件連接方式是否帶RTS和CTS引腳。

(二)發(fā)送數(shù)據(jù)'func_send_frame'

串口發(fā)送函數(shù)用于向串口發(fā)送數(shù)據(jù)。該函數(shù)接收一個文件描述符 fd,指向待發(fā)送數(shù)據(jù)緩沖區(qū)的指針 p_send_buff,以及要發(fā)送數(shù)據(jù)的長度 count。函數(shù)內(nèi)部使用 write 函數(shù)將數(shù)據(jù)寫入串口,并返回寫入的字節(jié)數(shù)。

(三)串口接收'func_receive_frame'

串口接收函數(shù)用于從串口接受數(shù)據(jù)。該函數(shù)接收一個文件描述符 fd,指向接收數(shù)據(jù)緩沖區(qū)的指針 p_receive_buff,以及要接收數(shù)據(jù)的長度 count。函數(shù)內(nèi)部使用 read?函數(shù)將數(shù)據(jù)從串口讀出來,并返回實(shí)際讀到的字節(jié)數(shù)。

serial.h

(一)定義串口參數(shù)結(jié)構(gòu)體struct_tty_param,它包含以下成員變量:

baudrate:波特率,表示數(shù)據(jù)傳輸速率,取值范圍為 600 到 4000000;

data_bit:數(shù)據(jù)位,表示每個數(shù)據(jù)字節(jié)中的位數(shù),可取 5、6、7 或 8;

stop_bit:停止位,表示停止位的數(shù)量,可取 1 或 2;

check:校驗(yàn)方式,表示數(shù)據(jù)校驗(yàn)的方式??梢允?'N' 表示無校驗(yàn),'O' 表示奇校驗(yàn),'E' 表示偶校驗(yàn);

hardware:硬件流控,表示是否啟用硬件流控;

(二)聲明func_set_opt

用于設(shè)置串口參數(shù)。它傳入一個 fd,以及用于設(shè)置串口的參數(shù)值,包括速度 speed、數(shù)據(jù)位 bits、停止位 stop、校驗(yàn)方式 check 和硬件流控 hardware。函數(shù)返回執(zhí)行結(jié)果。

(三)聲明函數(shù)func_send_frame

用于向串口發(fā)送數(shù)據(jù)。它傳入一個 fd,一個指向待發(fā)送數(shù)據(jù)緩沖區(qū)的指針 p_send_buff,以及要發(fā)送的數(shù)據(jù)長度 count。函數(shù)返回執(zhí)行結(jié)果。

(四)聲明函數(shù)func_receive_frame

用于從串口接收數(shù)據(jù)。它傳入一個 fd,一個指向接收數(shù)據(jù)緩沖區(qū)的指針 p_receive_buff,以及最大接收數(shù)據(jù)長度 count。函數(shù)返回執(zhí)行結(jié)果。

主函數(shù)main.c

(一)定義了一些全局變量,包括:

(1)`ver`:存儲版本信息的字符數(shù)組;

(2)`fd`:串口文件描述符;

(3)`tty_param`:串口參數(shù)結(jié)構(gòu)體,用于存儲串口的波特率、數(shù)據(jù)位、停止位、校驗(yàn)方式和硬件流控等參數(shù);

(4)`send_buff`、`receive_buff`:發(fā)送和接收數(shù)據(jù)的緩沖區(qū);

(5)`send_num`、`receive_num`:發(fā)送和接收的數(shù)據(jù)長度;

(6)`dev`:串口設(shè)備名稱;

(二)`func_my_print`:自定義的打印函數(shù),根據(jù)指定的打印格式打印數(shù)據(jù)。

(三)`print_usage`:打印參數(shù)設(shè)置的格式說明。

(四)`get_param`:解析命令行參數(shù),并將參數(shù)值賦給串口參數(shù)結(jié)構(gòu)體 `tty_param`。

(五)`main` 函數(shù):主函數(shù),用于執(zhí)行串口通信的示例程序。

(1)首先檢查命令行參數(shù),如果沒有指定串口設(shè)備名稱或使用了幫助參數(shù),則打印使用說明并退出程序。

(2)通過命令行參數(shù)拼接串口設(shè)備名稱,并打開串口設(shè)備。

(3)調(diào)用 `get_param` 函數(shù)解析命令行參數(shù),并將參數(shù)值賦給 `tty_param`。

(4)調(diào)用 `func_set_opt` 函數(shù)設(shè)置串口參數(shù)。

(5)打印串口參數(shù)信息。

(6)進(jìn)入循環(huán),不斷發(fā)送和接收數(shù)據(jù),根據(jù)不同的模式選擇不同的操作。

(7)如果啟用了發(fā)送模式,則按照設(shè)定的時間間隔發(fā)送指定的數(shù)據(jù)。

(8)如果啟用了數(shù)據(jù)回環(huán)模式,則將接收到的數(shù)據(jù)發(fā)送回去。

(9)關(guān)閉串口。

該程序通過命令行參數(shù)來設(shè)置串口的參數(shù),并提供了發(fā)送和接收數(shù)據(jù)的功能。在主函數(shù)的循環(huán)中,可以根據(jù)需要選擇不同的操作模式,例如定時發(fā)送數(shù)據(jù)、數(shù)據(jù)回環(huán)等。

程序說明

進(jìn)程名:elf1_cmd_serialport

使用方法:./elf1_cmd_serialport 設(shè)備名 [參數(shù)選項]… …

相關(guān)推薦

電子產(chǎn)業(yè)圖譜