[good]串口读取
#include <stdio.h> #include <stdlib.h> #include <math.h> #include <limits.h> #include <string.h> #include <windows.h> #include "serialport.h" int main() { // word byte WORD_BYTE wb; wb.word = 0x1234; printf("wb.word = %x\n", wb.word); wb.byte.high = 0x56; wb.byte.low = 0x78; printf("wb.byte.high = %x\n", wb.byte.high); printf("wb.byte.low = %x\n", wb.byte.low); print_bits(wb); // serial port HANDLE phSerial = NULL; char *port_name = "COM8"; openPort(&phSerial, port_name); configPort(&phSerial); char *msg_send = "Hello, world!\n"; for (int i = 0; i < 100; i++) { sendPort(&phSerial, msg_send); } // while (1) // { // receivePort(phSerial); // } return 0; }
#pragma once #include <stdio.h> #include <stdlib.h> #include <math.h> #include <limits.h> #include <string.h> #include <stdint.h> #include <windows.h> #define BUF_SIZE 100 typedef union { uint16_t word; struct { uint8_t low; uint8_t high; } byte; struct { uint8_t bit0 : 1; uint8_t bit1 : 1; uint8_t bit2 : 1; uint8_t bit3 : 1; uint8_t bit4 : 1; uint8_t bit5 : 1; uint8_t bit6 : 1; uint8_t bit7 : 1; uint8_t bit8 : 1; uint8_t bit9 : 1; uint8_t bit10 : 1; uint8_t bit11 : 1; uint8_t bit12 : 1; uint8_t bit13 : 1; uint8_t bit14 : 1; uint8_t bit15 : 1; } BIT; } WORD_BYTE; unsigned int crc_chk(unsigned char *data, unsigned char length) { // from delta help int j; unsigned int reg_crc = 0xffff; while (length--) { reg_crc ^= *data++; for (j = 0; j < 8; j++) { if (reg_crc & 0x01) reg_crc = (reg_crc >> 1) ^ 0xa001; else reg_crc = reg_crc >> 1; } } return reg_crc; } void print_bits(WORD_BYTE wb) { unsigned int bits[16] = { wb.BIT.bit15, wb.BIT.bit14, wb.BIT.bit13, wb.BIT.bit12, wb.BIT.bit11, wb.BIT.bit10, wb.BIT.bit9, wb.BIT.bit8, wb.BIT.bit7, wb.BIT.bit6, wb.BIT.bit5, wb.BIT.bit4, wb.BIT.bit3, wb.BIT.bit2, wb.BIT.bit1, wb.BIT.bit0}; printf("wb.word.bit is: "); for (int i = 0; i < 16; i++) { printf("%x", bits[i]); } printf("\n"); } void openPort(HANDLE *hport, const char *com) { *hport = CreateFile(com, // 串口名称 GENERIC_READ | GENERIC_WRITE, // 可读、可写 0, // No Sharing NULL, // No Security OPEN_EXISTING, // Open existing port only FILE_ATTRIBUTE_NORMAL, // Non Overlapped I/O NULL); // Null for Comm Devices if (*hport == INVALID_HANDLE_VALUE) { fprintf(stderr, "Error opening serial port\n"); perror("Error opening serial port"); } else { printf("open serial port success!\n"); } } void configPort(HANDLE *hport) { // 配置串行端口 DCB dcbSerialParams = {0}; dcbSerialParams.DCBlength = sizeof(dcbSerialParams); if (!GetCommState(*hport, &dcbSerialParams)) { fprintf(stderr, "Error getting serial port state\n"); perror("Error opening port"); } dcbSerialParams.BaudRate = CBR_9600; // 设置波特率 dcbSerialParams.ByteSize = 8; // 设置数据位 dcbSerialParams.StopBits = ONESTOPBIT; // 设置停止位 dcbSerialParams.Parity = NOPARITY; // 设置奇偶校验位 if (!SetCommState(*hport, &dcbSerialParams)) { fprintf(stderr, "Error setting serial port state\n"); } else { printf("config serial port success!\n"); } } void sendPort(HANDLE *hport, const char *dataToSend) { DWORD bytesWritten; int len = strlen(dataToSend); // 发送数据 if (!WriteFile(*hport, dataToSend, len, &bytesWritten, NULL)) { fprintf(stderr, "Error writing to serial port\n"); } else { printf("send data success!\n"); } } void receivePort(HANDLE *hport) { // 读取返回的数据 char buffer[BUF_SIZE]; DWORD bytesRead; if (!ReadFile(*hport, buffer, sizeof(buffer), &bytesRead, NULL)) { fprintf(stderr, "Error reading from serial port\n"); } else { // 打印返回的数据 printf("Received: %.*s\n", (int)bytesRead, buffer); } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!