树莓派串口小结

流程图
1--------
【状态A机器】
原始树莓派 它只有AMA0使能 ls -l /dev | grep tty
它是UART0 是硬件串口 是AMA0 是给蓝牙用的
lrwxrwxrwx 1 root root           7 Jan 28 01:33 serial1 -> ttyAMA0
此时用户没有UART可以使用


2--------
【状态B机器】
随后在config.txt 追加了一句  enable_uart=1
它是使能了迷你串口 它是 UART1 默认是给无头模式登入的 并且cmdline.txt可以修改波特率
enable_uart=1           //从只有 serial1 -> ttyAMA0  到serial0 -> ttyS0 和 serial1 ->ttyAMA0

#dtoverlay=disable-bt   //(硬件串口与mini串口默认映射对换 这里没有做 无视)
ls -l /dev | grep tty
现在是
lrwxrwxrwx 1 root root           5 Mar 11 06:38 serial0 -> ttyS0
lrwxrwxrwx 1 root root           7 Mar 11 06:38 serial1 -> ttyAMA0
验证无头模式很好用
下图的3根线可以无头进入!

3---------
【状态C机器】
现在维持AMA0给蓝牙使用
S0不要做无头模式的 怎么失能?
sudo systemctl stop serial-getty@ttyAMA0.service
sudo systemctl disable serial-getty@ttyAMA0.service
B
sudo systemctl stop serial-getty@ttyS0.service
sudo systemctl disable serial-getty@ttyS0.service
sudo systemctl start serial-getty@ttyS0.service
sudo systemctl enable serial-getty@ttyS0.service
sudo systemctl status serial-getty@ttyS0.service
A
cmdline.txt 删除console=serial0,115200

原始
root@raspberrypi:~# cat /boot/cmdline.txt 
console=serial0,115200 console=tty1 root=PARTUUID=c86f8f6e-02 rootfstype=ext4 fsck.repair=yes rootwait
修改为
                       console=tty1 root=PARTUUID=c86f8f6e-02 rootfstype=ext4 fsck.repair=yes rootwait


4--
写一个程序XCOM发什么 PI就返回什么!发送1就是关闭

状态A机器
没有使能无头模式 会失败 设备无法打开
直接用AMA0 会失败 识别打开 但是无法通讯 TXRX接的是无头模式的3根线

状态B机器
使能无头模式 成功 设备打开  WIN10输入4 收到4 但是有时候会有干扰
怎么把cmdline使能呢?

状态C机器
和上面一样 也即是A不可以
完成B以后很好!!!!


5--变化S0也就是 UART1 的PIN脚

不知道 问淘宝

6--交换一下S0 AMA0
A 在追加的 enable_uart=1 下面追加依据  dtoverlay=disable-bt
B 维持cmdline.txt的del
C 执行 sudo systemctl disable hciuart

sudo systemctl status hciuart

一切正常
复位 再看
变化1   hciconfig 没有了
变化2 交换了
lrwxrwxrwx 1 root root           7 Mar 11 07:59 serial0 -> ttyAMA0
lrwxrwxrwx 1 root root           5 Mar 11 07:59 serial1 -> ttyS0
此时代码不能直接run 需要修改了
#define UART  "/dev/ttyAMA0"    
//#define UART  "/dev/ttyS0"
可以了 一样很稳定
理论是更加稳定!!!!!


一共6个 新增加的4个很好用 传统的2个 硬 分给蓝牙 迷你可以自己拿出来用 也就是5个开发的
 

#include <wiringSerial.h>
#include <wiringPi.h>
#include <stdio.h>

#define UART  "/dev/ttyAMA0"    
//#define UART  "/dev/ttyS0"    

int main()
{
    int fd;
    unsigned char cmd;
    
    wiringPiSetup(); //树莓派初始化


    fd = serialOpen(UART,9600);// 打开串口 返回文件描述符fd ;
                                         //  /dev/ttyAMA0 : 串口的地址,在Linux中就是设备所在的目录    
                                         //  9600:波特率
                                         //  返回:正常返回文件描述符,否则返回-1失败。
                                         
    if(fd < 0){
        printf("Unable to open serial device\n") ;
        return 1 ;
    }  
    
    printf("uart test [%s]\n",UART);          // 终端打印
    serialPrintf(fd, "Hello World!\r\n");  // 串口打印
    while(1){
        while(serialDataAvail(fd) != -1){ //serialDataAvail(fd):获取串口缓存中可用的字节数。
                                          //返回:串口缓存中已经接收的,可读取的字节数,-1代表错误
 
            cmd = serialGetchar(fd);      //从串口读取一个字节数据返回给 cmd
            printf("get-cmd == %d \n",cmd);
            if(cmd == 1){
                serialPrintf(fd, "\r\nserial close\r\n\r\n");  // 串口打印
                serialClose(fd);  // 关闭串口 
                return 0; 
            }else {
                //serialPuts(fd,"HELLO\r\n");
                serialPutchar(fd,cmd);  // 通过串口发送字节
            }             

        }
    }    
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值