|
本帖最后由 gzhuli 于 2024-8-29 11:07 编辑
linux是不适合点流水灯的,大材小用不说,非实时系统定时精度不高,效果不如单片机好。当然也可以做,直接操作GPIO就行,甚至shell脚本都能做,没啥难度。
串口直接打开 /dev/ttyS* 就好了,让ChatGPT给了一个C例程你参考一下:
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <unistd.h>
- #include <fcntl.h>
- #include <termios.h>
- int main() {
- int serial_port = open("/dev/ttyS0", O_RDWR | O_NOCTTY | O_NDELAY);
- if (serial_port == -1) {
- perror("Failed to open the serial port");
- return 1;
- }
- // Configure serial port settings
- struct termios tty;
- memset(&tty, 0, sizeof(tty));
- if (tcgetattr(serial_port, &tty) != 0) {
- perror("Failed to get terminal attributes");
- close(serial_port);
- return 1;
- }
- cfsetispeed(&tty, B9600); // Input baud rate
- cfsetospeed(&tty, B9600); // Output baud rate
- tty.c_cflag |= (CLOCAL | CREAD); // Enable the receiver and set local mode
- tty.c_cflag &= ~CSIZE; // Clear the character size mask
- tty.c_cflag |= CS8; // 8 data bits
- tty.c_cflag &= ~PARENB; // No parity
- tty.c_cflag &= ~CSTOPB; // 1 stop bit
- tty.c_cflag &= ~CRTSCTS; // No hardware flow control
- // Raw input mode (non-canonical, no echo)
- tty.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG);
- // Raw output mode
- tty.c_oflag &= ~OPOST;
- // Set the new attributes
- if (tcsetattr(serial_port, TCSANOW, &tty) != 0) {
- perror("Failed to set terminal attributes");
- close(serial_port);
- return 1;
- }
- // Write to the serial port
- char *msg = "Hello, Serial Port!\n";
- int bytes_written = write(serial_port, msg, strlen(msg));
- if (bytes_written < 0) {
- perror("Failed to write to the serial port");
- close(serial_port);
- return 1;
- }
- // Read from the serial port
- char read_buf[256];
- memset(read_buf, '\0', sizeof(read_buf));
- int bytes_read = read(serial_port, read_buf, sizeof(read_buf));
- if (bytes_read < 0) {
- perror("Failed to read from the serial port");
- close(serial_port);
- return 1;
- }
- printf("Read %d bytes: %s\n", bytes_read, read_buf);
- // Close the serial port
- close(serial_port);
- return 0;
- }
复制代码
记住linux是一个操作系统,不要总是抱着单片机裸奔的习惯性思维,要在应用开发层面考虑问题。 |
|