赞
踩
需要了解的一些知识
树莓派3B的时候,一共有两个串口。
硬件串口:/dev/ttyAMA0 mini串口:/dev/ttyS0 硬件串口有独立的时钟源,通信稳定,但默认分配成了蓝牙功能。可以通过禁用蓝牙等操作来使用这个串口。
而mini串口的时钟源由cpu提供,会随主频的变化而变化,通信不稳定,但可以通过固定CPU主频来稳定通信。
为追求稳定的串口通信,树莓派3需要经过非常复杂的操作才得以实现。
初次使用树莓派串口编程,需要配置,将串口改用成通信。把这个用作调试端口的串口修改为能够通信的串口。
/* 修改 cmdline.txt文件 */ |
然后 sudo reboot
树莓派4B增加了四个硬件串口,但需要修改配置来打开。(用硬件串口会比较好)
sudo nano /boot/config.txt
追加以下内容到末尾:
dtoverlay=uart2 dtoverlay=uart3 dtoverlay=uart4 dtoverlay=uart5 |
大概就是以下内容:
然后CTRL+O保存,然后回车,最后CTRL+X退出。
修改完这个配置文件然后重启树莓派:sudo reboot
ls /dev/ttyA*
建议使用除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 |
---|
- #include <wiringSerial.h>
- #include <wiringPi.h>
- #include <stdio.h>
-
- 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;
- }
注意:这里使用的是AMA1,GPIO1 = RXD2 -> ttyAMA1,GPIO0 = TXD2 -> ttyAMA1,注意硬件接线,串口波特率设置为9600,树莓派要和ch340共地。串口发送’7‘给树莓派(验证树莓派的RXD),树莓派接收到数据,先打印“jinru”(验证树莓派的TXD),然后再打印这个数据。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。