树莓派4B串口通信

树莓派4B串口通信

需要了解的一些知识

树莓派3B的时候,一共有两个串口。

硬件串口:/dev/ttyAMA0 mini串口:/dev/ttyS0 硬件串口有独立的时钟源,通信稳定,但默认分配成了蓝牙功能。可以通过禁用蓝牙等操作来使用这个串口。

而mini串口的时钟源由cpu提供,会随主频的变化而变化,通信不稳定,但可以通过固定CPU主频来稳定通信。

为追求稳定的串口通信,树莓派3需要经过非常复杂的操作才得以实现。

树莓派4B配置第一步

初次使用树莓派串口编程,需要配置,将串口改用成通信。把这个用作调试端口的串口修改为能够通信的串口。

/* 修改 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

 然后 sudo reboot

树莓派4B配置第二步

树莓派4B增加了四个硬件串口,但需要修改配置来打开。(用硬件串口会比较好)

sudo nano /boot/config.txt

追加以下内容到末尾:

dtoverlay=uart2 ​

dtoverlay=uart3 ​

dtoverlay=uart4 ​

dtoverlay=uart5

大概就是以下内容:树莓派4B串口通信_第1张图片

然后CTRL+O保存,然后回车,最后CTRL+X退出。

修改完这个配置文件然后重启树莓派:sudo reboot

查看硬件串口是否可用

ls /dev/ttyA*

 

串口与GPIO的对应关系

建议使用除ttyAMA0之外的串口

GPIO14 = TXD0 -> ttyAMA0

GPIO0 = TXD2 -> ttyAMA1

GPIO4 = TXD3 -> ttyAMA2

GPIO8 = TXD4 -> ttyAMA3

GPIO12 = TXD5 -> ttyAMA4

GPIO15 = RXD0 -> ttyAMA0

GPIO1 = RXD2 -> ttyAMA1

GPIO5 = RXD3 -> ttyAMA2

GPIO9 = RXD4 -> ttyAMA3

GPIO13 = RXD5 -> ttyAMA4

树莓派4GPIO引脚图

树莓派4B串口通信_第2张图片

测试代码

#include 
#include 
#include 
​
int main()
{
        wiringPiSetup();
        int fd;
        int cmd=0;
        int data=0;
        fd=serialOpen("/dev/ttyAMA1",9600);
        while(1)
        {
                while(serialDataAvail(fd) != -1 )
                {
                        serialPuts(fd,"jinru\r\n");
                         cmd=serialGetchar(fd);
                        printf("%d\n",cmd);
                        perror("why");
                }
                serialFlush(fd);
        }
​
​
        return 0;
}

注意:这里使用的是AMA1GPIO1 = RXD2 -> ttyAMA1,GPIO0 = TXD2 -> ttyAMA1,注意硬件接线,串口波特率设置为9600树莓派要和ch340共地。串口发送’7‘给树莓派(验证树莓派的RXD),树莓派接收到数据,先打印“jinru”(验证树莓派的TXD),然后再打印这个数据。

树莓派4B串口通信_第3张图片

 树莓派4B串口通信_第4张图片

你可能感兴趣的:(树莓派,linux)