本节用到的源码路径: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 设备名 [参数选项]… …
|