树莓派4B如何使用串口与外部进行通信

外设IO口定义说明

从树莓派的相关资料我们可以看到,树莓派有两个串口可以使用,一个是硬件串口(/dev/ttyAMA0),另一个是mini串口(/dev/ttyS0)。硬件串口有单独的波特率时钟源,性能好,稳定性强;mini串口功能简单,稳定性较差,波特率由CPU内核时钟提供,受内核时钟影响。
树莓派(3/4代)板载蓝牙模块,默认的硬件串口是分配给蓝牙模块使用的,而性能较差的mini串口是分配给GPIO串口 TXD0、RXD0。
在这里插入图片描述

Serial 配置

首先运行ls /dev -al命令查看到默认的串口分配方式,如下图所示:
在这里插入图片描述
由于硬件串口分配给板载蓝牙使用,所以要释放掉,并设置硬件串口分配给GPIO串口。
首先登陆终端后,输入sudo raspi-config命令进入树莓派系统配置界面,选择第五个Interfacing Options:
在这里插入图片描述
进入P6 Serial
在这里插入图片描述
选择关闭串口登录功能,打开硬件串口调试功能:
在这里插入图片描述
在这里插入图片描述
完成后提示以下界面,按OK
在这里插入图片描述

设置硬件串口为GPIO串口

接着将串口配置为我们的GPIO串口,对输入sudo vim /boot/config.txt命令,将下面两行内容添加到最后:dtoverlay=pi3-miniuart-bt force_turbo=1
修改后保存并退出,内容如下图片所示:
在这里插入图片描述
重启树莓派后,再次输入ls /dev -al,可以看到两个串口已经互相换了位置:
在这里插入图片描述

minicom串口助手测试

首先输入sudo apt-get install minicom命令安装minicom,安装完成后,输入minicom -D /dev/ttyAMA0 -b 9600启动minicom,如图所示:
在这里插入图片描述
其中-D表示选择串口/dev/ttyAMA0,-b 设置波特率为9600,此参数可以不用设置,默认11520,并且退出minicom时需要先按Ctrl+A,再按Z,弹出以下菜单,0。
将树莓派与TTL对应接上,就可以通过PC串口助手与树莓派互相发送、接收数据,但是树莓派在发送数据时,命令终端并不会显示,如下图所示:
在这里插入图片描述

  • 23
    点赞
  • 178
    收藏
    觉得还不错? 一键收藏
  • 23
    评论
树莓派4B和STM32之间进行串口通信时,需要使用GPIO引脚以及相应的代码进行连接和配置。下面是一个示例代码,演示了如何在树莓派4B和STM32之间进行串口通信。 在树莓派4B上的代码(Python): ```python import serial # 创建串口对象 ser = serial.Serial('/dev/ttyS0', 115200) # '/dev/ttyS0'为树莓派4B上的默认串口,波特率为115200 # 向STM32发送数据 ser.write(b'Hello STM32!') # 从STM32接收数据 data = ser.readline() print(data) # 关闭串口连接 ser.close() ``` 在STM32上的代码(C语言): ```c #include "stm32f4xx.h" // 配置串口 void USART2_Init(void) { RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE); RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE); GPIO_InitTypeDef GPIO_InitStruct; USART_InitTypeDef USART_InitStruct; // 配置GPIO引脚 GPIO_InitStruct.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_3; GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStruct.GPIO_OType = GPIO_OType_PP; GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_UP; GPIO_Init(GPIOA, &GPIO_InitStruct); // 配置USART2 USART_InitStruct.USART_BaudRate = 115200; USART_InitStruct.USART_WordLength = USART_WordLength_8b; USART_InitStruct.USART_StopBits = USART_StopBits_1; USART_InitStruct.USART_Parity = USART_Parity_No; USART_InitStruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None; USART_InitStruct.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; USART_Init(USART2, &USART_InitStruct); // 启用USART2 USART_Cmd(USART2, ENABLE); } // 发送数据到树莓派 void sendToRaspberryPi(const uint8_t* data, uint32_t length) { for (uint32_t i = 0; i < length; i++) { while (USART_GetFlagStatus(USART2, USART_FLAG_TC) == RESET); USART_SendData(USART2, data[i]); } } // 接收树莓派发送的数据 uint8_t receiveFromRaspberryPi(void) { while (USART_GetFlagStatus(USART2, USART_FLAG_RXNE) == RESET); return (uint8_t)USART_ReceiveData(USART2); } int main(void) { USART2_Init(); // 接收树莓派发送的数据并回传 while (1) { uint8_t data = receiveFromRaspberryPi(); sendToRaspberryPi(&data, 1); } } ``` 需要注意的是,在树莓派4B上,使用的是/dev/ttyS0作为默认串口设备。在STM32上,需要根据硬件连接情况和引脚配置进行相应的修改。以上代码仅供参考,具体的串口连接方式和代码实现可能会因硬件和需求的不同而有所差异。
评论 23
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值