STM32MP157驱动开发——Linux RS232/485/GPS 驱动

news2025/1/12 5:58:32

STM32MP157驱动开发——Linux RS232/485/GPS 驱动

  • 一、简介
  • 二、STM32MP1 UART 驱动分析
    • 1.UART 的 platform 驱动框架
    • 2.uart_driver相关流程
  • 三、驱动开发
    • 1.RS232驱动编写
      • 1)添加 usart3 和 uart5 的引脚信息
      • 2)移植minicom
  • 四、驱动测试
    • 1.RS232收发测试
    • 2.RS485测试
    • 3.GPS测试


参考文章:【正点原子】I.MX6U嵌入式Linux驱动开发——Linux RS232/485/GPS驱动

一、简介

  除了 platform、I2C、SPI 之外,还可以通过串口 uart 与其他设备或传感器进行通信。根据电平的不同,串口分为 TTL 和 RS232,但是不管是什么样的接口电平,其驱动程序都是一样的,通过外接 RS485 这样的芯片就可以将串口转换为 RS485 信号。
  正点原子的 STM32MP1 开发板有 8 个串口,四个同步串口(USART1、USART2、USART3 和 USART6),四个异步串口(UART4、UART5、UART7 和 UART8)。RS232 和 RS485 接口连接到了 STM32MP1 的 USART3 接口上,通过跳线帽选择相应的功能。GPS 模块连接到 UART5 接口上,因此这些外设最终都归结为 USART3 和 UART5 的串口驱动。
  同 I2C、SPI 一样,Linux 也提供了串口驱动框架,只需要按照相应的串口框架编写驱动程序即可。串口驱动没有主机端和设备端之分,就只有一个串口驱动,而且这个驱动也已经由 ST 官方编写好,开发人员要做的就是在设备树中添加所要使用的串口节点信息。当系统启动以后串口驱动和设备匹配成功,相应的串口就会被驱动起来,生成 /dev/ttySTMX(X=0….n)文件。

二、STM32MP1 UART 驱动分析

1.UART 的 platform 驱动框架

在设备树 stm32mp151.dtsi 文件中,有 USART3 对应的子节点:
在这里插入图片描述
根据compatible属性值可以找到驱动文件为drivers/tty/serial/stm32-usart.c。查看相应文件可以发现 UART 本质上是一个 platform 驱动。

2.uart_driver相关流程

初始化:

1550 static struct uart_driver stm32_usart_driver = {
1551 		.driver_name = DRIVER_NAME,
1552 		.dev_name = STM32_SERIAL_NAME,
1553 		.major = 0,
1554 		.minor = 0,
1555 		.nr = STM32_MAX_PORTS,
1556 		.cons = STM32_SERIAL_CONSOLE,
1557 };

probe函数:

1306 static int stm32_usart_serial_probe(struct platform_device *pdev)
1307 {
1308 		const struct of_device_id *match;
1309 		struct stm32_port *stm32port;
1310 		int ret;
1311
1312 		stm32port = stm32_usart_of_get_port(pdev);
1313 		if (!stm32port)
1314 			return -ENODEV;
1315
1316 		match = of_match_device(stm32_match, &pdev->dev);
1317 		if (match && match->data)
1318 			stm32port->info = (struct stm32_usart_info *)match->data;
1319 		else
1320 			return -EINVAL;
1321
1322 		ret = stm32_usart_init_port(stm32port, pdev);
1323 		if (ret)
1324 			return ret;
......
1374 		ret = uart_add_one_port(&stm32_usart_driver, &stm32port->port);
1375 		if (ret)
1376 			goto err_port;
1377
1378 		pm_runtime_put_sync(&pdev->dev);
1379
1380 		return 0;
.....
1410 }

三、驱动开发

本节要用到 STM32MP1 的 USART3 接口和 UART5 接口,USART3 连接 RS485 和RS232 的公头,UART5 连接 GPS 和 RS232 的母头。

RS232原理图:
在这里插入图片描述
RS232 串口一共有 2 个,COM1 是母头,COM2为公头,这两个 RS232 串口都是通过 SP3232 芯片来实现。
COM1 母头连接到 STM32MP1 的 UART5 接口上,和正点原子的 ATK 模块共用 USART5,把 JP5 的 1-3 和 2-4 连接起来以后 SP3232 就和 URAT5 连接到一起。UART5_TX 和 UART5_RX 分别接到了 PB13 和 PB12 这两个引脚上。
COM2 公头连接到 STM32MP1 的 USART3 接口上,COM2 和 RS485 共用 USART3,把JP4的3-5和4-6连接起来以后SP3232就和USRAT3连接到一起。USART3_TX和USART3_RX分别接到了 PD8 和 PD9 这两个引脚上。

RS485原理图:
在这里插入图片描述
与 COM2 共用 USART3,把 JP4 的 3-5 和 4-6 连接起来,RS485 就连接到了 USART3 上。
RS485 采用 SP3485 芯片实现,RO 为数据输出端,RI 为数据输入端,RE 是接收使能信号(低电平有效),DE 是发送使能信号(高电平有效)。图中 RE 和 DE 经过一系列的电路,最终通过 RS485_RX 来控制,这样可以省掉一个 RS485 收发控制 IO,将 RS485完全当作一个串口来使用,方便写驱动。

GPS原理图:
在这里插入图片描述
正点原子有一款 GPS+北斗定位模块,型号为 ATK1218-BD,只在开发板上留出了接口。COM1 和正点原子的 ATK 模块共用 USART5 接口,USART5 驱动成功以后就可以直接读取 GPS 模块数据了。ATK 模块还有两个引脚 GBC_KEY 和 GBC_LED 分别连接到了 STM32MP157 的 PC13 和 PI8 上,这两个引脚是给其他模块准备的,GPS 模块没有用到。

1.RS232驱动编写

1)添加 usart3 和 uart5 的引脚信息

STM32MP1 的 UART 驱动 ST 已经编写好了,所以不需要自己编写。只用在设备树中添加 USART3 和 UART5 对应的设备节点即可。并且因为 usart3 和 uasrt5 的节点在 stm32mp151.dtsi 已经存在,所以只用在自己的设备树中追加内容即可。
修改 stm32mp15-pinctrl.dtsi,追加一个 usart3 引脚设置:
在这里插入图片描述
追加 uart5 引脚设置:
在这里插入图片描述
在设备树 stm32mp157d-atk.dtsi 中追加串口设备节点:

&usart3 {
	pinctrl-names = "default";
	pinctrl-0 = <&usart3_pins_c>;
	status = "okay";
};

&uart5 {
	pinctrl-names = "default";
	pinctrl-0 = <&uart5_pins_a>;
	status = "okay";
};

设置串口的别名:

aliases {
	serial0 = &uart4;
	serial1 = &uart5;
	serial2 = &usart3;
};

在根节点/下原先存在 aliases 子节点,在其中追加 uart5 和 usart3 的别名,用于 UART 子系统的匹配。
修改完成后编译出新的设备树文件,用于开发板启动。

2)移植minicom

  minicom 类似常用的串口调试助手,是 Linux 下很常用的一个串口工具,将 minicom 移植到开发板中,这样就可以借助 minicom 对串口进行读写操作。
  buildroot 已经集成了 minicom,所以只需要重新配置 buildroot,使能 minicom 即可。在buildroot的menuconfig中,选中以下编译项:
在这里插入图片描述
修改完成后保存,然后使用sudo make进行编译,将编译出的rootfs.tar文件解压到nfs即可用于开发板启动。启动后使用minicom -v命令查看是否正常工作,使用minicom -s命令进行配置。
在这里插入图片描述

四、驱动测试

RS232连接:
在这里插入图片描述
左边的 COM2 为公头,可以通过 JP4 跳接到 USART3上。右边的 COM1 为母头,可以通过 JP5 跳接到 UART5 上。本节使用右边的 COM1,所以将 JP5 的两个跳线帽接到上方,也就是将 UART5 与 COM1 连接起来。
使用RS232转TTL线连接到电脑,就可以进行收发测试。在开发板上使用minicom -s命令配置UART5。
在这里插入图片描述
在这里插入图片描述
按下Ctrl + A,再按下 Z,就会出现以下界面:
在这里插入图片描述

1.RS232收发测试

发送测试:需要打开 minicom 的回显功能(不打开也可以,但是在 minicom 中看不到自己输入的内容),回显功能打开以后输入“AAAA”,在电脑的串口助手就会收到消息。
在这里插入图片描述
在这里插入图片描述
接收测试:在电脑上的串口助手发送消息,在开发板上就能接收到。
在这里插入图片描述
使用 Ctrl + A然后按下 X 键关闭minicom。

2.RS485测试

在这里插入图片描述
将JP4 跳线帽的 1-3、2-4 连接起来,此外还需要一个RS485转接器,与电脑进行连接。
在这里插入图片描述
收发测试与RS232相同。

3.GPS测试

GPS模块大部分都是通过串口通信的,使用开发板上的 JP5 跳线帽,将 UART5 与 ATK 模块接口上的串口连接起来。
在这里插入图片描述
在这里插入图片描述
然后设置minicom,波特率设置为 38400,8 位数据位, 1 位停止位。
在这里插入图片描述
之后就可以接收到GPS发送的数据。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/118087.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

GitHub下载量5W+,最新23版Java岗面试攻略,涵盖28个技术栈

年底失业&#xff0c;机会也不多&#xff0c;短时间内想找到合适工作是几乎不可能的。身体好点在家&#xff0c;主要建议大家就做两件事&#xff1a; 第一&#xff1a;整理工作经验&#xff0c;制定新年求职计划。等一些不错的公司放出新的hc&#xff0c;市场情况一回暖&#…

web应用的认证与鉴权

文章目录什么是认证和授权&#xff1f;什么是session&#xff1f;什么是cookie&#xff1f;什么是stick session&#xff1f;如何解决session同步的问题&#xff1f;什么是认证和授权&#xff1f; 认证解决的就是你是谁的问题&#xff0c;当登录一个web电商平台&#xff0c;当…

配置压力测试环境

压力测试环境跟测试环境基本一样&#xff0c;不过部署到新的服务器 首先选一台服务器部署eureka&#xff0c;在把项目发布到eureka上 选择另外一台服务器部署nginx&#xff0c;实现前后端分离 &#xff08;eureka路径如下&#xff1a;/opt/cbd/cloud/cbd-cloud-eureka/&#x…

TensorRt(4)yolov3加载测试

本文介绍使用darknet项目原始的预训练模型yolov3.weights&#xff0c;经过tensorrt脚本转换为onnx模型&#xff0c;进一步编译优化编译位engine&#xff0c;最后使用TensorRt运行时进行推理。推理时的结果后处理使用c实现&#xff0c;也给出了问题的说明。 文章目录1、darkent模…

C语言奇奇怪怪表达式‘abcd‘,及操作符详解

前言 回顾操作符和一些表达式方面的知识。 表达式及操作符前言算术操作符 &#xff1a; - * /位操作符>>、<<>>算数右移逻辑右移<<小结&、|、~&&#xff1a;有0则为0&#xff0c;两个1才为1|&#xff1a; 有1则为1&#xff0c;两个0才为0~&am…

透彻感知 数字孪生智慧隧道Web3D可视化监控系统

今天为大家分享一个采用 数维图 的 Sovit3D 构建轻量化 3D 可视化场景的案例——智慧隧道三维可视化系统。多维度呈现隧道内外场景&#xff0c;实现隧道内态势的实时监测&#xff0c;运维设备、控制系统和信息系统的互联互通。加强隧道内设备的全状态感知力与控制力&#xff0c…

AI技术赋能数智化转型,激发企业变革创新

人工智能的概念第一次被提出&#xff0c;是在20世纪50年代&#xff0c;距今已七十余年的时间。随着深度神经网络技术的逐渐成熟和计算能力的大幅提升&#xff0c;AI技术实现了飞跃式地发展&#xff0c;已经在工业、制造、能源、金融等各行各业得到了广泛有效地应用实践&#xf…

2022全年度饮料十大热门品牌销量榜单

随着国民经济的发展及居民收入水平不断提升&#xff0c;我国饮料行业规模处于不断增长的状态&#xff0c;饮料种类也日益繁多。同时&#xff0c;瓶装水、碳酸饮料、果汁饮料、茶饮料、功能饮料、含乳饮料等品类竞争激烈。但未来&#xff0c;我国饮料市场还有很大发展空间。 根据…

VS code配置C语言环境

下载编译器MinGW并解压&#xff08;任意路径&#xff09; 官网页面&#xff1a;MinGW-w64 下载页面&#xff1a;MinGW-w64 - for 32 and 64 bit Windows - Browse Files at SourceForge.net MinGW添加至环境变量 D:\VS code\mingw64\bin 注&#xff1a;不能有中文&#xff1b…

SpringBoot整合Swagger3.0

目录 第一步&#xff1a;引入依赖 第二步&#xff1a;yml配置文件添加一下内容 第三步&#xff1a;添加SwaggerConfig配置类 第四步&#xff1a;启动类添加注解 第五步&#xff1a;Controller层类添加注解 第六步&#xff1a;实体类添加注解 第七步&#xff1a;启动项目访…

一篇文章教你如何用界面组件DevExpress WPF为应用配置文件选择!

DevExpress WPF拥有120个控件和库&#xff0c;将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpress WPF能创建有着强大互动功能的XAML基础应用程序&#xff0c;这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。 DevExpress WPF的The…

【K3s】第8篇 详解 Kubernetes 组件

目录 1、Kubernetes 组件 2、控制平面组件&#xff08;Control Plane Components&#xff09; kube-apiserver etcd kube-scheduler kube-controller-manager cloud-controller-manager 3、Node 组件 kubelet kube-proxy 1、Kubernetes 组件 当你部署完 Kubernetes&am…

五、Java 12 新特性概述

五、Java 12 新特性概述 JDK12 在 2019 年 3 月 19 号正式发布&#xff0c;不同于JDK11&#xff0c;JDK12并不是一个LTS版本。作为一个中间版本&#xff0c;JDK12版本特性增加较少。 2017年宣布的加速发布节奏要求每六个月发布一次功能&#xff0c;每季度更新一次&#xff0c;每…

北鲲教程|基于 ABAQUS 的 CFRP 加固钢筋混凝土柱承载能力分析

随着我国经济实力快速发展与国家竞争力迅速提高&#xff0c;尤其是“一带一路”倡议与“海洋开发战略”实施&#xff0c;我国基础设施建设正逐步冲破东部地区的狭长地带&#xff0c;不断扩展至更加广阔的海洋与西部地区。混凝土结构作为土木工程中最常用的结构形式&#xff0c;…

女生戴蓝牙耳机什么颜色好看?适合女生的高颜值蓝牙耳机

蓝牙耳机作为当前畅销的数码单品&#xff0c;越来越多的品牌商推出新的蓝牙耳机&#xff0c;导致选购的时候不知道从何下手&#xff0c;蓝牙耳机最主要的是清晰音效&#xff0c;其次就是佩戴舒适度&#xff0c;但是近年来不少的人在外观上做出很大的改变&#xff0c;吸引人们的…

测试执行中工作效率相关指标

→ 执行效率&#xff1a;利用测试用例文档页数除于此次系统测试执行的时间总和(不包含用例文档编写时间)。补充指标方法是用例的个数除于此次系统测试的时间总和。用于获得工作中测试人员每小时执行测试的速度。 公式&#xff1a;∑测试用例文档页数(页) / ∑执行系统测试的有效…

Java多线程创建及典型实例(多线程买票)

Java多线程创建及典型实例&#xff08;多线程买票&#xff09;多线程1. Thread2. Runnable3. 线程通信4. Callable5. 线程池多线程卖票实例1. 继承Thread类&#xff08;存在线程安全问题&#xff09;2. 实现Runnable接口&#xff08;存在线程安全问题&#xff09;3. 对线程安全…

Mybatis源码(三)如何操作数据库

前言 接着environmentElement获取数据源信息后&#xff0c;同级执行代码的mappersElement。里面参杂了mybatis缓存。 Mybatis源码&#xff08;三&#xff09;如何操作数据库 MyBatis源码&#xff08;二&#xff09;如何执行sql Mybatis源码&#xff08;一&#xff09;获取数…

从咖啡馆到世界,共赴下一个十年 |写在 EMQX 开源十周年

十年前,在 2012 年 12 月 17 日,源于个人对 Erlang、MQTT 和开源的热爱,EMQX 诞生于一家咖啡馆并作为开源项目在 GitHub 上发布了初次提交。十年后的今天,EMQX 已成长为 Erlang 生态中最具影响力的物联网开源基础软件项目,作为全球最具扩展性的 MQTT 消息服务器在物联网、工业互…

【Java开发】Spring Cloud 02 :微服务项目介绍及开发环境

了解完 Spring Cloud 的发展背景以及各个组件库后&#xff0c;在敲代码前&#xff0c;本章节会聊一聊优惠券平台项目的整体功能和模块&#xff0c;以及每个功能点的技术选型和背后的依据&#xff0c;最后讲解下搭建项目所需的开发环境~ 目录 1 优惠券平台项目 1.1 项目介绍 …