树莓派4B的外设一共包含两个串口,
一个称之为硬件串口(/dev/ttyAMA0),
一个称之为mini串口(/dev/ttyS0)。
硬件串口由硬件实现,有单独的波特率时钟源,性能高、可靠。
mini串口性能低,功能也简单.
请注意:在默认状态下,serial0(就是GPIO14,15)是映射到ttyS0的(就是MINI串口:/dev/ttyS0),ttyS0的特点是其工作时钟来自于CPU,CPU的时钟呢又是从600MHZ到1.5Ghz动态变化的,所以这个串口经常会因为时钟频率发生变化而发生错误,因此我们不用这个串口。
默认状态下,serial1(跟板载蓝牙相连)映射到ttyAMA0,ttyAMA0是硬件串口,它的时钟频不受CPU影响。因此我们一般都是用的ttyAMA0。
所以我们的第一步就是配置交换映射关系,最终的映射结果如上图,我们要把硬件串口ttyAMA0映射到GPIO14,15上
树莓派4b串口通信配置1----_弑梦空间-涛-的博客-CSDN博客
ls /dev -al | grep serial
上图是默认状态的
现在操作一下
删除cmdline.txt
console=serial0,115200
余文是
console=tty1 root=PARTUUID=14b6b696-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait
没有变化
继续增加2个句子
此时效果变了 BLE消失了 前面很容易成功的案例 也不能成功了
enable_uart=1
dtoverlay=disable-bt
也就是现在BLE断来了 为外接蓝牙准备
树莓派入门教程 - 1 - 基础外设篇 - 1.5 树莓派GPIO库wiringPi 串口ttyAMA0与ttyS0的区别 - 程序员大本营
树莓派教程 - 1.4 树莓派GPIO库wiringPi 树莓派串口ttyS0_Mark_md的博客-CSDN博客
补充 可以百度 wiring编码
树莓派-wiringPI-设置引脚编号模式_nicekwell的专栏-CSDN博客
所以别人都再说15 16 而我看到 here是14 15
esp-hosted/UART_setup.md at master · espressif/esp-hosted · GitHub
看到只有1个串口
1---启用串口登入【待定】
2--串口发送数据
接线 5V5V黑色白色卢瑟【注意红色3.3V不要 看上去好像下电以后PC的USB会持续供电给PI】
跑程序 直接跑不可以
Install and Testing | Wiring Pi
Raspberry Pi | Wiring | Download & Install | Wiring Pi
14 sudo apt-get install wiringpi
15 gpio -v
16 gcc c1.c
17 gcc -Wall -o c c1.c -lwiringPi
18 ls
可以了
测试效果
#include
#include
#include
int main(void)
{
int hs1;
int snum = 0;
wiringPiSetup(); // 使用wiring编码去初始化GPIO序号
//hs1 = serialOpen("/dev/ttyS0", 115200); // 打开 /dev/ttyS0 串口设备,波特率115200
hs1 = serialOpen("/dev/ttyAMA0", 115200);
printf("ttyS0 uart test1:\n"); // 终端打印
serialPrintf(hs1, "Hello World!\r\n"); // 串口打印
serialPrintf(hs1, "Enter 10 letters:\r\n");
/* 串口缓存区读取10个字节,并完整输出接收到的数据 */
do{
snum = serialDataAvail(hs1); // 获取串口接收缓存区的可用字节数
}while(snum < 10);
while(snum--)
{
serialPutchar(hs1,serialGetchar(hs1)); // 通过串口发送字节
}
serialPrintf(hs1, "\r\nserial close\r\n\r\n"); // 串口打印
serialClose(hs1); // 关闭串口
return 0;
}
上面的是测试的 下面的没有测试
#include
#include
#include
int main(void)
{
int hs1;
int snum = 0;
int tnum = 0;
unsigned char chrtmp[100];
wiringPiSetup(); // 使用wiring编码去初始化GPIO序号
//hs1 = serialOpen("/dev/ttyS0", 115200); // 打开 /dev/ttyS0 串口设备,波特率115200
hs1 = serialOpen("/dev/ttyAMA0", 115200);
printf("ttyS0 uart test2:\n"); // 终端打印
serialPrintf(hs1, "Hello World!\r\n"); // 串口打印
serialPrintf(hs1, "Enter a paragraph and end with Enter:\r\n");
/* 串口缓存区记录到数组,遇到\n结束,并完整输出接收到的数据 */
while (1)
{
snum = serialDataAvail(hs1); // 获取串口接收缓存区的可用字节数
if(snum > 0)
{
chrtmp[tnum] = serialGetchar(hs1); // 从接收缓存区读取一个字节
tnum ++;
if(chrtmp[tnum - 1] == '\n') break;
}
//delay(2000);
//printf("%d , %d\n",snum,tnum);
}
int i = 0;
while (tnum--)
{
serialPutchar(hs1,chrtmp[i++]); // 通过串口发送字节
}
serialPrintf(hs1, "\r\nserial close\r\n\r\n"); // 串口打印
serialClose(hs1); // 关闭串口
return 0;
}
也可以直接发 貌似PI默认是115200
echo -n "koson" > /dev/serial0
3--串口通讯