树莓派和电脑之间的串口通信

一开始我们配置了串口登录树莓派,这样会导致我们后面在用树莓派的时候有些冲突,所以我们需要先修改树莓派串口的一些配置

/* 修改 cmdline.txt文件 */

>cd /boot/

>sudo vim cmdline.txt

删除【】之间的部分

dwc_otg.lpm_enable=0 【console=ttyAMA0,115200】 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait

/*修改 inittab文件 */ //如果没有这个文件,直接跳过即可

>cd /etc/

>sudo vim inittab

注释掉最后一行内容:,在前面加上 # 号

#T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100

sudo reboot 重启

树莓派给电脑发送信息

cpp 复制代码
#include <wiringPi.h>
#include <wiringSerial.h>

int main()
{

     int fd;
     if(WiringPiSetup()==-1){
    
        printf("Setup error\n");
        return -1;
     }   

     fd = serialOpen("/dev/ttyAMA0",9600);
     while(1){
       serialPutchar(fd,"c");  //发送字符
       //serialPuts(fd,"hello i am pi");// 发送字符串
       delayMicroseconds(1000000)//微秒级别 
     }
}

电脑通过串口助手给树莓派发消息

cpp 复制代码
#include <wiringPi.h>
#include <wiringSerial.h>

int main()
{

     int fd;
     int cmd;
     if(WiringPiSetup()==-1){
    
        printf("Setup error\n");
        return -1;
     }   

     fd = serialOpen("/dev/ttyAMA0",9600);
     while(1){
           
        while( serialDataAvail(fd) != -1){

            cmd =serialGetchar(fd); // 通过接收到的指令执行不同的操作
               if(cmd == '2'){
                    printf("daxu 2\n");
                }
        }
     }
}

串口通信相关API

首先要包含头文件 #include <wiringSerial.h>

打开串口

复制代码
int serialOpen (char *device, int baud)

device: 串口的地址,一般默认 "/dev/ttyAMA0"

buad: 波特率

返回值: 正常会返回文件描述符,否则返回-1失败

发送一个字节到串口

复制代码
void  serialPutchar (int fd, unsigned char c)

fd:文件描述符

c:要发送的数据

发送一个字符串到串口

复制代码
void  serialPuts (int fd, char *s)

fd:文件描述符

s:发送的字符串,字符串要以'\0'结尾

获取串口缓存中可用的字节数

复制代码
int   serialDataAvail (int fd)

fd:文件描述符

返回:串口缓存中已经接收的,可读取的字节数,-1代表错误

从串口读取一个字节数据返回。

复制代码
int serialGetchar (int fd)

fd:文件描述符

返回:读取到的字符

如果串口缓存中没有可用的数据,则会等待10秒,如果10后还有没,返回-1

所以,在读取前,做好通过serialDataAvail判断下。

相关推荐
喜欢你,还有大家1 分钟前
Linux笔记8——shell编程基础-2
linux·服务器·笔记
泽虞11 分钟前
《LINUX系统编程》笔记p3
linux·运维·服务器·c语言·笔记·面试
源代码杀手38 分钟前
大模型微调训练资源占用查询:Windows 10 查看 NVIDIA 显卡GPU状态教程(替代 Ubuntu 下 watch nvidia-smi)
linux·windows·ubuntu
头发那是一根不剩了2 小时前
服务器硬盘进行分区和挂载
linux·运维·服务器
Johny_Zhao2 小时前
Linux防止rm误操作防护方案
linux·网络·人工智能·网络安全·信息安全·云计算·yum源·系统运维
bai5459363 小时前
STM32 硬件I2C读写MPU6050
stm32·单片机·嵌入式硬件
stark张宇3 小时前
Linux 零基础入门,看这一篇就够了
linux·服务器
TDengine (老段)3 小时前
TDengine IDMP 运维指南(4. 使用 Docker 部署)
运维·数据库·物联网·docker·时序数据库·tdengine·涛思数据
TDengine (老段)3 小时前
TDengine IDMP 最佳实践
大数据·数据库·物联网·ai·时序数据库·tdengine·涛思数据
IT.小航4 小时前
STM32F103RC的USB上拉电阻1.5K
stm32·单片机·嵌入式硬件