单片机/MCU论坛
直播中

嵌入式小能手

1年用户 590经验值
擅长:嵌入式技术
私信 关注
[文章]

嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-串口通讯编程示例之串口完整代码

注意:学习资料可在ElfBoard官方网站“资料”专区获取。
本节用到的源码路径:ELF 1开发板资料包->03-例程源码->03-1 命令行例程源码->02_elf1_cmd_serialport
serial.c
本节代码提供了串口通信的函数库,主要分三部分:
(一)设置串口参数'func_set_opt'
首先通过func_set_opt设置参数,波特率从600 bit/s-115200 bits/s,默认使用的是9600 bits/s;之后是校验位,五种校验方式分别为奇校验、偶校验、MARK校验、SPACE校验和空校验;另外还有检测是否有停止位;以及硬件连接方式是否带RTS和CTS引脚。
(二)发送数据'func_send_frame'
串口发送函数用于向串口发送数据。该函数接收一个文件描述符 fd,指向待发送数据缓冲区的指针 p_send_buff,以及要发送数据的长度 count。函数内部使用 write 函数将数据写入串口,并返回写入的字节数。
(三)串口接收'func_receive_frame'
串口接收函数用于从串口接受数据。该函数接收一个文件描述符 fd,指向接收数据缓冲区的指针 p_receive_buff,以及要接收数据的长度 count。函数内部使用 read 函数将数据从串口读出来,并返回实际读到的字节数。
serial.h
(一)定义串口参数结构体struct_tty_param,它包含以下成员变量:
baudrate:波特率,表示数据传输速率,取值范围为 600 到 4000000;
data_bit:数据位,表示每个数据字节中的位数,可取 5、6、7 或 8;
stop_bit:停止位,表示停止位的数量,可取 1 或 2;
check:校验方式,表示数据校验的方式。可以是 'N' 表示无校验,'O' 表示奇校验,'E' 表示偶校验;
hardware:硬件流控,表示是否启用硬件流控;
(二)声明func_set_opt
用于设置串口参数。它传入一个 fd,以及用于设置串口的参数值,包括速度 speed、数据位 bits、停止位 stop、校验方式 check 和硬件流控 hardware。函数返回执行结果。
(三)声明函数func_send_frame
用于向串口发送数据。它传入一个 fd,一个指向待发送数据缓冲区的指针 p_send_buff,以及要发送的数据长度 count。函数返回执行结果。
(四)声明函数func_receive_frame
用于从串口接收数据。它传入一个 fd,一个指向接收数据缓冲区的指针 p_receive_buff,以及最大接收数据长度 count。函数返回执行结果。
主函数main.c
(一)定义了一些全局变量,包括:
(1)`ver`:存储版本信息的字符数组;
(2)`fd`:串口文件描述符;
(3)`tty_param`:串口参数结构体,用于存储串口的波特率、数据位、停止位、校验方式和硬件流控等参数;
(4)`send_buff`、`receive_buff`:发送和接收数据的缓冲区;
(5)`send_num`、`receive_num`:发送和接收的数据长度;
(6)`dev`:串口设备名称;
(二)`func_my_print`:自定义的打印函数,根据指定的打印格式打印数据。
(三)`print_usage`:打印参数设置的格式说明。
(四)`get_param`:解析命令行参数,并将参数值赋给串口参数结构体 `tty_param`。
(五)`main` 函数:主函数,用于执行串口通信的示例程序。
(1)首先检查命令行参数,如果没有指定串口设备名称或使用了帮助参数,则打印使用说明并退出程序。
(2)通过命令行参数拼接串口设备名称,并打开串口设备。
(3)调用 `get_param` 函数解析命令行参数,并将参数值赋给 `tty_param`。
(4)调用 `func_set_opt` 函数设置串口参数。
(5)打印串口参数信息。
(6)进入循环,不断发送和接收数据,根据不同的模式选择不同的操作。
(7)如果启用了发送模式,则按照设定的时间间隔发送指定的数据。
(8)如果启用了数据回环模式,则将接收到的数据发送回去。
(9)关闭串口。
该程序通过命令行参数来设置串口的参数,并提供了发送和接收数据的功能。在主函数的循环中,可以根据需要选择不同的操作模式,例如定时发送数据、数据回环等。
程序说明
进程名:elf1_cmd_serialport
使用方法:./elf1_cmd_serialport 设备名 [参数选项]… …


更多回帖

发帖
×
20
完善资料,
赚取积分