树莓派本身是两个串口,运行ls /dev -al如下:
请注意:在默认状态下,serial0(就是GPIO14,15)是映射到ttyS0的(就是MINI串口:/dev/ttyS0),ttyS0的特点是其工作时钟来自于CPU,CPU的时钟呢又是从600MHZ到1.5Ghz动态变化的,所以这个串口经常会因为时钟频率发生变化而发生错误,因此我们不用这个串口。
默认状态下,serial1(跟板载蓝牙相连)映射到ttyAMA0,ttyAMA0是硬件串口,它的时钟频不受CPU影响。因此我们一般都是用的ttyAMA0。
所以我们的第一步就是配置交换映射关系,最终的映射结果如上图,我们要把硬件串口ttyAMA0映射到GPIO14,15上
第一步:命令行输入:sudo raspi-config,选择第五个选项
选中P6敲回车进入,然后会问你是否关闭serial login ,我们选关闭,接下来就会问你是否打开串口调试,我们选打开:
在这里插入图片描述
第二步:在boot目录下找到config.txt文件,在最后添加一行内容如下:
dtoverlay=pi3-miniuart-bt
红框中的内容就是我们添加的内容,请注意:树莓派4b也是写pi3。
自此,交换映射完成,如果没有错误的话映射关系就是本博客第一幅图那样了。
第三步:测试
先把树莓派上装一个软件,这个软件跟我们常用的串口调试助手是一类的
sudo apt-get install minicom
完毕之后输入:
minicom -D /dev/ttyAMA0 -b 9600
9600是指定了9600波特率,ttyAMA0 是指定该软件使用硬件串口。默认数据8位,停止位1位
把STM32上烧录上一个串口发送的程序,波特率也设置为9600,把树莓派的TX0接到STM32的RX,树莓派的RX0接到STM32的TX。然后把两个设备的GND连起来(学过电路分析的话应该还是知道这个知识点的)。接下来就可以让STM32发送了。
下图红框中的就是STM32发送的字符串
如果要退出这个minicom软件的话,先按CTRL+A再按Z就会弹出菜单,按下0回车就退出了,然后就能直接关闭了。
注:改config.txt文件的时候要root权限的,我是用root账户登录了,然后右键点击属性直接把修改权限给改了。
注:由于我没有232转TTL电平的转换器,我是直接使用了STM32用杜邦线把uart接到树莓派的GPIO串口上了,如果是有转换器的话可以直接把树莓派跟电脑接起来,在电脑上用串口调试助手发送数据
附录:树莓派4b的GPIO分布:
- 展示所有串口命令
$ dtoverlay -a | grep uart
展示 pi4 中所有串口
pi@raspberrypi:~ $ dtoverlay -a | grep uart
midi-uart0
midi-uart1
miniuart-bt
uart0
uart1
uart2
uart3
uart4
uart5
- 查看特定串口信息
$ dtoverlay -h uart2
查看 UART2 的配置信息等:
pi@raspberrypi:~ $ dtoverlay -h uart2
Name: uart2
Info: Enable uart 2 on GPIOs 0-3
Usage: dtoverlay=uart2,<param>
Params: ctsrts Enable CTS/RTS on GPIOs 2-3 (default off)
相关信息会展现 GPIOs 与新的 UART 串口的分配:0-3 对应 UART2, 4-7 对应 UART3,8-11 对应 UART 4,以及 12-15 对应 GUIO 5
3. 配置开启串口 UART2-5
执行编辑 config.txt 命令:
sudo vim /boot/config.txt
在文件结尾添加如下:
dtoverlay=uart2
dtoverlay=uart3
dtoverlay=uart4
dtoverlay=uart5
保存(Write Out)并退出(Exit)
重启后查看是否生效:
$ ls /dev/ttyAMA*
结果显示如下:
pi@raspberrypi:~ $ ls /dev/ttyAMA*
/dev/ttyAMA0
/dev/ttyAMA1
/dev/ttyAMA2
/dev/ttyAMA3
/dev/ttyAMA4
各 UART 串口与 GPIO 对应关系:
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
Comments | 0 条评论