1 硬件电路
- STM32MP1有 8 个串口,四个同步串口(USART1、USART2、USART3 和 USART6),四个异步串口(UART4、UART5、UART7 和 UART8)。
- 当系 统 启 动 以 后 串 口 驱 动 和 设 备 匹 配 成 功 , 相 应 的 串 口 就 会 被 驱 动 起 来 , 生 成
/dev/ttySTMX(X=0….n)
文件。 - STM32MP1 的 USART3 接口和 UART5 接口,USART3 连接
RS485
和RS232
的公头,UART5 连接GPS
和RS232
的母头。我们依次来看一下这个两个串口的硬件原理图。 - ttySTM0 为serial0,对应uart4
ttySTM1 为 serial1,对应uart5
ttySTM2 为 serial2,对应usart3
1.1 RS232 原理图(原理图错误更正:USART5对应UART5)
- RS485 和 COM2 共用 USART3
- COM1 和 ATK 模块共用UART5
1.2 RS485原理图
1.2 GPS原理图
2 设备树
2.1 添加usart3和uart5的引脚信息
- usart3_pins_c
- uart5_pins_a
2.2 向usart3和uart5节点追加内容
2.3 设置串口的别名
ttySTM0 为 serial0,对应 uart4;ttySTM1 为 serial1,对应 uart5;ttySTM2 为 serial2,对应usart3
- serial0 是 uart4 的别名,表示在系统启动生成一个名为“/dev/ttySTM0”的设备文件,serial1就会生成“/dev/ttySTM1”如此类推,最多 8 个。serial0 就是我们的调试串口
3 移植 minicom
minicom 类似我们常用的串口调试助手
,是 Linux 下很常用的一个串口工具,将 minicom移植到我们的开发板中,这样我们就可以借助 minicom 对串口进行读写操作。buildroot 已经集成了 minicom,所以我们只需要重新配置 buildroot,使能 minicom 即可。
4 驱动测试
4.1 RS232驱动测试
- ttySTM0 为serial0,对应uart4
- ttySTM1 为 serial1,对应uart5
- ttySTM2 为 serial2,对应usart3
发送测试
-首先测试开发板通过 UART5 向电脑发送数据的功能,需要打开 minicom 的回显功能(不打开也可以,但是在 minicom 中看不到自己输入的内容),回显功能打开以后输入“AAAA”,- 电脑的 COM11就会接收到“AAAA”,MobaXterm 中 COM11 收到的数据如图所示:
4.2 RS485驱动测试
- ttySTM0 为serial0,对应uart4
- ttySTM1 为 serial1,对应uart5
- ttySTM2 为 serial2,对应usart3
- 使用
SecureCRT 创建一个 COM12 的连接
,开发板使用 USART3,对应的串口设备文件为/dev/ttySTM2,因此开发板使用 minicom 创建一个/dev/ttySTM2 的串口连接。串口波特率都选择 115200,8 位数据位,1 位停止位,关闭硬件和软件流控。
4.3 GPS测试
- ttySTM0 为serial0,对应uart4
- ttySTM1 为 serial1,对应uart5
- ttySTM2 为 serial2,对应usart3
- GPS 都是被动接收定位数据的,模块接收定位卫星数据,然后计算出位置信息通过串口输出。所以我们要先设置 minicom,
UART5 对应/dev/ttySTM1
,串口设置要求如下: - ①、波特率设置为 38400,因为正点原子的 ATK1218-BD 模块默认波特率就是 38400。
- ②、8 位数据位,1 位停止位。
- ③、关闭硬件和软件流控
- 设置好以后就可以静静的等待 GPS 数据输出,GPS 模块第一次启动可能需要几分钟搜星,等搜到卫星以后才会有定位数据输出。搜到卫星以后 GPS 模块输出的定位数据如图所示