【北京迅为】《STM32MP157开发板使用手册》- 第三十五章 A7 和 M4 联合调试

news2024/9/23 3:12:51

iTOP-STM32MP157开发板采用ST推出的双核cortex-A7+单核cortex-M4异构处理器,既可用Linux、又可以用于STM32单片机开发。开发板采用核心板+底板结构,主频650M、1G内存、8G存储,核心板采用工业级板对板连接器,高可靠,牢固耐用,可满足高速信号环境下使用。共240PIN,CPU功能全部引出:底板扩展接口丰富底板板载4G接口(选配)、千兆以太网、WIFI蓝牙模块HDMI、CAN、RS485、LVDS接口、温湿度传感器(选配)光环境传感器、六轴传感器、2路USB OTG、3路串口,CAMERA接口、ADC电位器、SPDIF、SDIO接口等


第三十五章 A7 M4 联合调试

在前面的几个章节之中,我们一直所使用的都是通过仿真器,将程序下载到 SRAM中运行,开发板掉电后程序就会丢失,这种方式适合在 Cortex-M4 开发调试阶段,也叫工程模式(Engineering Mode)。而当我们在实际的使用过程中,这样明显是不可以的,而本章节将会讲解如何在 Linux 操作系统中使用 Cortex-A7 去加载、启动和停止运行Cortex-M4 的固件。

35.1 调试前的准备工作

 首先最实现联合调试的基本要求:

  1. 必须使用yocto文件系统
  2. 连接串口线和otg线和对应的LINK调试器

Yocto文件系统的存放路径为“iTOP-STM32MP157开发板网盘资料汇总\03_文件系统源码和镜像\06_yocto文件系统\04_烧写镜像文件\image”,将该镜像烧写到TF卡或者EMMC中,烧写完成之后,将拨码开关设置为对应的启动模式,进入uboot倒计时之后,按下任意键,进入uboot命令行,如下图所示:

我们接下来输入以下命令

setenv bootsystem yocto

saveenv

 

 

设置启动系统为yocto并且将设置保存,然后输入reset命令重启系统,重启完成进入系统如下图所示: 

该文件系统,会默认虚拟一个usb网卡,通过otg线连接到电脑上,我们使用命令“ifconfig”来查看开发板的网络设备列表,如下图所示: 

然后打开Windows端的设备管理器,我们测试应该会有以下三个设备,分别为

1 ) CH340 开发板的打印串口设备

2 ) ST-Link 仿真器调试设备

3 ) remote NDIS USB虚拟网卡设备  

如下图所示:

至此我们调试前的准备工作就完成了。

35.2 使用 STM32CubeIDE 进行调试 

在这里,我们以按键工程来进行A7和M4联合调试的例子,打开工程之后如下图所示:

 

首先我们需要设置串行过滤器,因为默认情况下,STM32CubelDE是只将 STMicroelectronics 和 FTDI 设备作为首选的串行设备,其它设备无法识别,所以我们要关闭默认选项而选择我们需要的设备,点击Windows菜单栏下的preferences(偏好)选项,进入preferences界面,如下图所示:

然后我们选择STM32Cube进入MPU Serial菜单栏,勾选Remove filter 然后选择我们的CH340对应的端口,作者这里为COM3,选择完成之后点击右下角的Apply and Close,如下图所示: 

应用之后,回到初始界面,我们点击爬虫debug旁的小三角,点击Debug Configurations,进入debug设置界面,如下图所示: 

然后我们点击 KTY_CH4 DEBUG 进入该工程的配置界面,选择调试器窗口。Load mode 选择为thru Linux core,连接端口选择为我们的打印串口COM3(这里可能会找不到设备,原因为该版本的STM32Cubeide自身的bug问题,需要降低版本,低版本的存放路径为“iTOP-STM32MP157开发板网盘资料汇总\01_开发所需PC软件\12_STM32CubeIDE软件”下的st-stm32cubeide_1.4.0_7511_20200720_0928_x86_64.exe),Inet Address 已经默认为我们设置好了,不需要我们进行设置,然后我们点击debug按钮,如下图所示: 

接下来会弹出以下界面,我们选择同意点击yse即可: 

随后会出现load 进度条窗口,等待文件传输完成,如下图所示: 

加载完成之后,回到我们的串口终端界面,会显示如下信息: 

至此我们的KEY工程就加载完成了,此时,按下VOL-可以看到LED3状态反转,按下BACK按键可以看到BEEP蜂鸣器状态反转。如果我们想停止程序的运行,只需要回到STM32CubeIDE软件,点击红色方块结束程序的调试即可,如下图所示。 

35.3 手动调试

在上面的两个小节中,我们使用了STM32CubeIDE软件进行调试,这样确实通过A7核来启动了M4核心的例程,但是这样操作也是不方便的,需要STLINK调试,还需要虚拟网卡将M4工程传递到开发板上,本小节所实现的是通过对应的脚本来实现M4核的应用开启和结束,而且不再局限于yocto系统,不再需要USB虚拟网卡。

首先我们要知道STLINK是如何进行调试的,来到STM32CubeIDE软件的项目列表,可以看到KEY_CM4工程下的RemoteProc目录下有一个 fw_cortex_m4.sh脚本文件,STM32CubeIDE软件正是通过该脚本来对程序进行调试。

打开该脚本之后,内容如下: 

  1 #!/bin/sh
  2 rproc_class_dir="/sys/class/remoteproc/remoteproc0"
  3 fmw_dir="/lib/firmware"
  4 fmw_name="KEY_CM4.elf"
  5 
  6 cd $(/usr/bin/dirname $(/usr/bin/readlink -f $0))
  7 
  8 if [ $1 == "start" ]
  9 then
 10         # Start the firmware
 11         if [ -f /lib/firmware/$fmw_name ]; then
 12                 /bin/rm -f /lib/firmware/$fmw_name
 13             if [ $? -ne 0 ]; then
 14                 exit 1
 15             fi
 16         fi
 17         /bin/ln -s $PWD/lib/firmware/$fmw_name $fmw_dir
 18         if [ $? -ne 0 ]; then
 19             exit 1
 20         fi
 21         /bin/echo -n "$fmw_name" > $rproc_class_dir/firmware
 22         /bin/echo -n start > $rproc_class_dir/state
 23 fi
 24 
 25 if [ $1 == "stop" ]
 26 then
 27         # Stop the firmware
 28         /bin/echo -n stop > $rproc_class_dir/state
 29 fi

下面将对该部分代码进行部分讲解。

首先2-4行定义了三个变量,分别为rproc_class_dir、fmw_dir、fmw_name,rproc_class_dir是加载、启动和停止固件的文件操作路径fmw_dir是我们工程固件存放的路径,而fmw_name正是我们工程固件的名称信息。我么先来到工程固件存放的路径下也就是/lib/firmware目录下如下图所示:

可以看到我们在上一小节中通过STM32CubeIDE烧录进的KEY_CM4.elf固件。然后我们使用命令“ls -l”,查看文件的链接信息,如下图所示:

 

可以看到我们的KEY_CM4.elf固件是从/usr/local/projects/KEY_CM4/lib/firmware/路径下的KEY_CM4.elf文件链接来的。我们来到/usr/local/projects/KEY_CM4路径下,如下图所示,会发现该目录下会存在一个fw_cortex_m4.sh文件,查看文件信息之后会发现该文件正是我们正在解释的文件。

随后的第六行命令正是来到fw_cortex_m4.sh文件所在的目录下。

之后的内容就比较简单,分为了两种情况,分别为start和stop分别代表了固件的开启和结束。既然我们几经了解到了固件的启动和停止,那我们现在要解决的问题是,如何不通过STM32CubeIDE来调试固件,首先KEY_CM4.elf文件是我们一定要拷贝到开发板的,再上一章节中,我们是通过usb虚拟网卡来拷贝的,而本小节我们为了方便可以直接通过U盘或者TF卡来拷贝KEY_CM4.elf文件,固件存放的路径为每一个工程目录下的CM4/Debug文件夹下,如下图所示:

将该固件KEY_CM4.elf拷贝到开发板上,拷贝完成如下图所示: 

然后我们在开发板的同一目录下,使用命令“vi fw_m4_itop.sh”建立fw_m4_itop.sh文件,然后仿照fw_cortex_m4.sh文件来改写一个适合我们当前状况的脚本文件,为了方便起见我们将该脚本存放在了“iTOP-STM32MP157开发板网盘资料汇总\06_Cortex-M4实验例程”路径下,内容如下:

#!/bin/sh
 rproc_class_dir="/sys/class/remoteproc/remoteproc0"
 if [ $2 == "start" ]
 then
  /bin/echo -n $1 > $rproc_class_dir/firmware
  /bin/echo -n start > $rproc_class_dir/state
 fi
 if [ $2 == "stop" ]
 then
  /bin/echo -n stop > $rproc_class_dir/state
 fi

内容添加完成之后,保存退出,,然后使用命令“chmod 777 fw_m4_itop.sh”给予fw_m4_itop.sh权限,如下图所示:

然后我们使用命令

 ./fw_m4_itop.sh KEY_CM4.elf start

来运行KEY_CM4.elf固件,如下图所示:

 

此时,按下VOL-可以看到LED3状态反转,按下BACK按键可以看到BEEP蜂鸣器状态反转。如果我们想停止程序的运行,只需要再使用以下命令即可,如下图所示:

 ./fw_m4_itop.sh KEY_CM4.elf stop

 

此时该固件就会停止运行。该脚本的第一个参数为固件名称,第二个参数为对应的start运行和stop停止。

至此我们呢的A7和M4联合调试的内容就结束了。

 

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

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

相关文章

【MySQL】表的操作【有关表结构的操作】【创建、查看、删除、修改表结构】

目录 表的操作1.创建表2.查看表结构3修改表3.1修改表名3.2添加字段/列3.3修改字段/列3.4删除字段/列3.5对单一字段/列 重命名 4.删除表 表的操作 1.创建表 创建表的语句语法: CREATE TABLE table_name ( field1 datatype, field2 datatype, field3 datatype ) ch…

基于SSM的在线家用电器销售系统

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于JavaSSMVueMySQL的在线家…

【学习笔记】SSL/TLS安全机制之HSTS

1、What:HSTS全称HTTP Strict Transport Security,HTTP严格传输安全。 2、Why:因为HTTP 在重定向到 HTTPS 之前存在漏洞 用户在浏览时很少明确输入 https:// 有时,用户正好通过http来访问网站,网站服务器知道这应该是…

43.哀家要长脑子了!

1.53. 最大子数组和 - 力扣&#xff08;LeetCode&#xff09; class Solution { public:int maxSubArray(vector<int>& nums) {int pre 0, maxRes nums[0];for(int x : nums){pre max(pre x, x);maxRes max(maxRes, pre); }return maxRes;} }; 其实弄懂也就挺简…

初写MySQL四张表:(3/4)

我们已经完成了四张表的创建&#xff0c;学会了创建表和查看表字段信息的语句。 初写MySQL四张表:(1/4)-CSDN博客 初写MySQL四张表:(2/4)-CSDN博客 接下来&#xff0c;我们来学点对数据的操作&#xff1a;增 删 查&#xff08;一部分&#xff09;改 先来看这四张表以及相关…

python-简单的数据结构

题目描述 小理有一天在网上冲浪的时候发现了一道很有意思的数据结构题。 该数据结构形如长条形。 一开始该容器为空&#xff0c;有以下七种操作。 1 a从前面插入元素 a ; 2 从前面删除一个元素; 3 a从后面插入一个元素; 4 从后面删除一个元素; 5 将整个容器头尾翻转; 6 输出个…

存储数据的树形结构

目录 1、二叉查找树 2、平衡二叉树AVL Tree 3 、平衡多叉树B-Tree 4、BTree树 5 、红黑树 红黑树的应用 6.平衡树的旋转 mysql 索引数据结构&#xff1a; Btree 索引是B树在数据库中的一种实现&#xff0c;最为常见的。B树 中的B代表平衡&#xff0c;而不是二叉 1、二…

火山引擎数智平台:高性能ChatBI的技术解读和落地实践

导读&#xff1a;大模型能力的发展和成熟&#xff0c;催生出新一代智能化 BI—— ChatBI&#xff0c;即通过自然语言处理&#xff08;NLP&#xff09;与大型语言模型&#xff08;LLMs&#xff09;的结合&#xff0c;极大简化数据分析过程&#xff0c;提高效率并降低分析门槛。火…

剪画:视频怎么去水印?分享几个简单实用的视频去水印方法!

亲爱的小伙伴们&#xff0c;在视频创作的道路上&#xff0c;水印问题是不是常常让你感到困扰呢&#xff1f; 别担心&#xff0c;今天就来为大家详细介绍七种超实用的视频去水印方法&#xff0c;让你的视频制作更加顺畅。 一、剪画 - 短视频去水印 剪画是一款非常强大的视频处理…

双向NAT=源NAT+NAT Server,有这么6?

号主&#xff1a;老杨丨11年资深网络工程师&#xff0c;更多网工提升干货&#xff0c;请关注公众号&#xff1a;网络工程师俱乐部 你们好&#xff0c;我的网工朋友。 随着移动设备的普及和云计算技术的发展&#xff0c;网络流量的规模和复杂度不断增加。网络地址转换&#xff…

像JSON一样使用ProtoBuf,空间还能缩小60%,性能提升100%

首发公众号:【赵侠客】 引言 在前面《释放你九成的带宽和内存&#xff1a;GZIP在解决Redis大Key方面的应用》一文中我使用GZIP算法可以将JSON格式数据的大小缩小88%从而节省了大量的存储和带宽资源&#xff0c;本文介绍另一种JAVA对象序列化神器——ProtoBuf&#xff08;Proto…

打破服务提供商的数据中心自动化障碍

在通信服务提供商&#xff08;CSP&#xff09;不断变革的背景下&#xff0c;数据中心发挥着越来越重要的作用。这些数据中心不仅是部署基于云的5G基础设施的重要组成部分&#xff0c;还在促进边缘计算和下一代企业解决方案的过程中发挥着关键作用。然而&#xff0c;随着数据中心…

YOLOv10改进系列,YOLOv10损失函数更换为Powerful-IoU(2024年最新IOU),助力高效涨点

改进前训练结果: 改进后的结果: 摘要 边界框回归(BBR)是目标检测中的核心任务之一,BBR损失函数显著影响其性能。然而,观察到现有基于IoU的损失函数存在不合理的惩罚因子,导致回归过程中锚框扩展,并显著减缓收敛速度。为了解决这个问题,深入分析了锚框扩展的原因。针…

PyCharm安装和使用教程(Windows系统)

一、pycharm基本使用 说明&#xff1a; PyCharm 是一款功能强大的 Python 编辑器&#xff0c; 本文简单的介绍下PyCharm 在 Windows下是如何安装的。 PyCharm 的下载地址&#xff1a;http://www.jetbrains.com/pycharm/download/#sectionwindows 如果进入网页时间过长或进不…

OpenAI震撼发布o1大模型!RL深度思考,技术差距拉开

openai放大招了&#xff0c;是奥特曼在推上宣传了很久的草莓真身&#xff0c;这次它真的来了。 又给大家带来一点小小的震撼&#xff0c;国内大模型老板们也不再迷茫了&#xff0c;4o的多模态的还没赶上呢&#xff0c;这下怎么又回到纯文本了&#xff0c;不是说大家都搞得差不多…

神经网络通俗理解学习笔记(1)

神经网络通俗理解学习笔记&#xff08;1&#xff09; 神经网络原理激活函数前向传播和反向传播多层感知机代码实现加载数据网络结构损失函数优化器训练测试保存 回归问题一元线性回归多元线性回归多项式回归 线性回归代码实现数据生成设置超参数初始化参数可视化Pytorch模型实现…

性能测试的五大目标

性能测试的目的其实是为了验证软件系统是否能够达到用户的性能指标&#xff0c;发现软件系统中存在的性能瓶颈&#xff0c;随后优化软件&#xff0c;最后起到优化系统的目的。 主要有以下几点&#xff1a; 评估系统的能力 测试中得到的负荷和响应时间数据可以被用于验证所计…

AI+智能监控实训平台

基本介绍 中智讯“AI智能监控实训平台” &#xff08;AI-Monitor&#xff09;是中智讯公司面向于人工智能等相关专业设计的一款工程实训平台&#xff0c;该产品基于基于行业内主流的TensorFlow深度学习框架来实现&#xff0c;同时&#xff0c;通过机器视觉技术和边缘计算技术实…

【新手上路】衡石分析平台使用手册-系统管理员手册

用户管理​ 用户管理页面可以创建管理用户、对用户进行分组管理、组织架构管理及用户属性的维护和管理。下面详细介绍用户管理相关功能。 用户管理​ 用户管理子页面展示了当前系统中所有用户的信息&#xff0c;可以添加新用户&#xff0c;查看、编辑已有用户&#xff0c;可…