当前位置: 首页 > wzjs >正文

青岛免费网站建设查询自己网站外链

青岛免费网站建设,查询自己网站外链,网站上传文件夹,小米路由器wordpress一、前言 使用 C 应用进行串口调用需要手动配置串口的各项参数&#xff0c;并且 Ubuntu 下的串口是通过读写文件实现的&#xff0c;所以还需要设置权限。 二、源码分析 serial.c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <…

一、前言

        使用 C 应用进行串口调用需要手动配置串口的各项参数,并且 Ubuntu 下的串口是通过读写文件实现的,所以还需要设置权限。

二、源码分析

serial.c

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <fcntl.h>      // 文件控制定义(如 O_RDWR)
#include <unistd.h>     // Unix 标准函数(如 read/write)
#include <termios.h>    // 串口配置(波特率等)
#include <errno.h>      // 错误号定义static int fd;
#ifndef CRTSCTS
#define CRTSCTS 020000000000  /* Flow control.  八进制值,等同于 0x80000000*/
#endif
/*** @Description: 打开串口并返回文件描述符* @param {char} *device: 串口设备* @return {*} 成功返回 0,失败返回 -1*/
int open_serial_port(const char *device) {fd = open(device, O_RDWR | O_NOCTTY | O_NDELAY);if (fd == -1) {perror("无法打开串口设备");return -1;}// 恢复串口阻塞模式(等待数据)fcntl(fd, F_SETFL, 0);// 配置串口参数struct termios options;tcgetattr(fd, &options);// 设置波特率 115200 cfsetispeed(&options, B115200);cfsetospeed(&options, B115200);// 8N1(8数据位,无校验,1停止位)options.c_cflag &= ~PARENB;   // 无校验options.c_cflag &= ~CSTOPB;   // 1停止位options.c_cflag &= ~CSIZE;    // 清除数据位掩码options.c_cflag |= CS8;       // 8数据位// 启用接收,忽略 modem 控制线options.c_cflag |= (CLOCAL | CREAD);// 关闭流控options.c_cflag &= ~CRTSCTS;  // 无硬件流控options.c_iflag &= ~(IXON | IXOFF | IXANY);  // 无软件流控// 原始输入模式(不处理特殊字符)options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG);// 原始数据(RAW)输出options.c_oflag &= ~OPOST;// 最小读取字符数和超时(单位:0.1秒)options.c_cc[VMIN] = 1;      // 至少读取1个字符options.c_cc[VTIME] = 10;    // 超时 1秒(10 * 0.1s)// 应用配置if (tcsetattr(fd, TCSANOW, &options) != 0) {perror("串口配置失败");close(fd);return -1;}return 0;
}/*** @Description: 关闭串口* @return {*}*/
void close_serial_port(void) {close(fd);
}/*** @Description: 发送数据并接收返回* @param {unsigned char} *tx_data* @param {int} tx_len* @param {unsigned char} *rx_buf* @param {int} rx_buf_size* @return {*} 接收数据长度*/
int send_and_receive(const unsigned char *tx_data, int tx_len, unsigned char *rx_buf, int rx_buf_size) {// 发送数据int written = write(fd, tx_data, tx_len);if (written != tx_len) {perror("发送数据失败");return -1;}printf("已发送 %d 字节: ", written);for (int i = 0; i < written; i++) {printf("%02X ", tx_data[i]);}printf("\n");// 接收数据int received = read(fd, rx_buf, rx_buf_size);if (received < 0) {perror("接收数据失败");return -1;}// .* 表示精度(precision)由后面的参数动态指定(这里用 length 变量控制)printf("收到 %d 字节: ", received);printf("%.*s", received, rx_buf);printf("\n");return received;
}

        这里有个地方需要注意,宏定义 CRTSCTS 硬件流控默认是关闭的,如果想要使用需要先启用 __USE_MISC 宏定义:

#ifdef __USE_MISC
# define CBAUD	 000000010017 /* Baud speed mask (not in POSIX).  */
# define CBAUDEX 000000010000 /* Extra baud speed mask, included in CBAUD.(not in POSIX).  */
# define CIBAUD	 002003600000 /* Input baud rate (not used).  */
# define CMSPAR  010000000000 /* Mark or space (stick) parity.  */
# define CRTSCTS 020000000000 /* Flow control.  */
#endif

在代码中显式定义 _GNU_SOURCE,这些特性测试宏会自动启用 __USE_MISC:

#define _GNU_SOURCE   // 或 #define _BSD_SOURCE

而我为了方便,直接在源文件进行了宏定义 CRTSCTS 硬件流控的定义:

#ifndef CRTSCTS
#define CRTSCTS 020000000000  /* Flow control.  八进制值,等同于 0x80000000*/
#endif

serial.h

#ifndef SERIAL_H
#define SERIAL_H#include <stdint.h>int open_serial_port(const char *device);
void close_serial_port(void);
int send_and_receive(const unsigned char *tx_data, int tx_len, unsigned char *rx_buf, int rx_buf_size);#endif

三、设置权限

        在 Linux 系统中尝试打开串口设备(如 /dev/ttyCH341USB0 或 /dev/ttyUSB0)时遇到权限不足(Permission denied) 错误,将当前用户加入 dialout 组:

sudo usermod -a -G dialout $USER

这样用户就可以读写串口设备文件了。

http://www.dtcms.com/wzjs/576723.html

相关文章:

  • 网站建设中faqs的意思合肥网站制作
  • 如何查公司网站谁家做的外包网站建设是什么意思
  • 特别炫酷的网站wordpress 咚门下载
  • 天津手机网站开发有什么好看的网站资源
  • 哪里提供邢台做网站上海百度推广代理商
  • 做网站用域名不备案怎么弄家在深圳歌曲
  • 网站备案登记查询南开区网站建设公司
  • 网站开发的两种模式地方门户网站如何推广
  • 楚雄网站制作做网站平台
  • 微信端网站开发流程html网站怎么做视频
  • 单页网站修改凡科怎么建设网站
  • 网站版面布局设计的原则云端视差wordpress企业主题破解版
  • 广州做网络服装的网站建设公司网站模板怎么写
  • 新网做网站流程在线借贷网站建设
  • 网站需要在哪些方面备案php网站开发培训
  • 泰安营销型手机网站建设西安网站建设设计公司
  • 在线相册jsp网站开发与设计酒店网络设计方案
  • 网站分析设计做的项目的过程哈尔滨制作网站
  • 如何购买网站虚拟主机公众号小程序怎么开通
  • 维修保养网站开发国内做市场调查专业网站
  • 成都网站设计电商创业项目有哪些
  • 做网站可以用海外空间吗北京兼职网站建设
  • 网站界面设计软件长沙做网站哪家公司好
  • 教育机构网站开发南阳企业网站
  • 合肥的电商网站设计做网站外国的
  • 网站开发费摊销多少年上海内贸网站建设
  • 建设银行积分兑换商城官方网站工程公司logo图标设计
  • fn网站不是做那么好吗深圳公共资源交易中心官网
  • 自己建个网站需要什么怎样推广app别人才愿意下载
  • 可直接进入正能量网站北京外语网站开发公司