stm32MP135裸机编程:修改官方GPIO例程在DDR中点亮第一颗LED灯

0 参考资料

轻松使用STM32MP13x - 如MCU般在cortex A核上裸跑应用程序.pdf
正点原子stm32mp135开发板&原理图
STM32Cube_FW_MP13_V1.1.0
STM32CubeIDE v1.15

1 需要修改那些地方

1.1 修改LED引脚

本例使用开发板的PI3引脚链接的LED作为我们点亮的第一颗LED灯,开启我们的基于stm32MP135的裸机编程生涯。
在这里插入图片描述
LED1就是我们需要控制的LED灯,低电平点亮,高电平熄灭。

1.2 修改用户程序在DDR中运行

在《轻松使用STM32MP13x - 如MCU般在cortex A核上裸跑应用程序》中可以很清晰看到我们的用户程序是运行在DDR中(也可以运行在SYSRAM中,只有128KB)。
在这里插入图片描述
除此之外,我们还需要为用户程序添加stm32头标识,相关说明如下:
在这里插入图片描述

2 基于官方GPIO例程进行修改LED驱动

2.1 导入官方GPIO例程

将V1.1.0软件包的GPIO_EXTI工程导入到stm32CubeIDE中:
在这里插入图片描述

2.2 删除main函数中的无关部分

在这里插入图片描述
main函数只保留HAL_Init()和SystemClock_Config(),其余部分全部注释掉。

2.3 添加LED初始化部分

在这里插入图片描述

__HAL_RCC_GPIOI_CLK_ENABLE();/*Configure GPIO pin : PI3 */GPIO_InitStruct.Pin = GPIO_PIN_3;GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;GPIO_InitStruct.Pull = GPIO_NOPULL;GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;HAL_GPIO_Init(GPIOI, &GPIO_InitStruct);HAL_GPIO_WritePin(GPIOI, GPIO_PIN_3, GPIO_PIN_RESET);

初始化PI3管脚为推挽输出,初始化完之后输出低电平点亮LED。

2.4 让LED闪烁起来

只是点亮一颗LED灯看起来很枯燥,我们在while循环中让LED以一秒为周期闪烁起来,代码如下:
在这里插入图片描述

while (1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 */HAL_Delay(1000);HAL_GPIO_TogglePin(GPIOI, GPIO_PIN_3);}

3 基于官方GPIO例程进行修改程序运行在DDR

3.1 当代码量超过SYSRAM(128KB)的大小时,需要将程序运行在DDR。首先打开C/C++ Build 配置,在Preprocessor中添加USE_DDR宏定义

在这里插入图片描述

3.2 修改链接文件名,重命名为 “stm32mp13xx_a7_ddr.ld”并导入GCC链接脚本

在这里插入图片描述
在这里插入图片描述

这里重命名只是为了便于区分。

3.3 修改REGION_ALIAS定义到DDR区域

打开用户程序链接脚本,使用DDR作为用户程序空间。
在这里插入图片描述

3.4 为用户程序添加stm32头标识

为用户程序加入STM32 Header,可在工程配置的post-build steps中加入如下命令:“(path_to_STM32CubeMP13 Package)/Utilities/ImageHeader/postbuild_STM32MP13.sh" "${gnu_tools_for_stm32_compiler_path}" "${BuildArtifactFileBaseName}"

我们只需要将path_to_STM32CubeMP13 Package修改成我们为STM32CubeMP13开发包
存放路径即可:
在这里插入图片描述
至此,所有修改宣告完成,编译官方GPIO例程即可。终端打印区显示信息如下:
在这里插入图片描述
可以看到我们的程序被定义在DDR的首地址。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AC/DC电源模块的原理、特点以及其在实际应用中的重要性

BOSHIDA AC/DC电源模块的原理、特点以及其在实际应用中的重要性 AC/DC电源模块是一种用于将交流电转换为直流电的设备,广泛应用于各种电子设备中。这种电源模块可以有效地将电力从电网中提取出来,并将其转换为稳定的直流电源,供给各种不同功…

容器(Docker)安装

centos安装Docker sudo yum remove docker* sudo yum install -y yum-utils#配置docker的yum地址 sudo yum-config-manager \ --add-repo \ http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo#安装指定版本 - 可以根据实际安装版本 sudo yum install -y docke…

12个精选Prompt框架,快速提升你写Prompt的能力,内附实例(上篇)

前言 想要熟练驾驭大模型,除了掌握Prompt的原则和技巧外,我们还可以参考一些成熟的Prompt框架,这样能快速提升我们写Prompt的能力,我从网上搜集到了12个精选Prompt框架,并为每一个框架附上一个实际的例子,…

何为屎山代码?

在编程界,有一种代码被称为"屎山代码"。这并非指某种编程语言或方法,而是对那些庞大而复杂的项目的一种形象称呼。屎山代码,也被称为"祖传代码",是历史遗留问题,是前人留给我们的"宝藏"…

性能测试2【搬代码】

1.性能测试脚本完善以及增强 2.jmeter插件安装以及监控使用 3.性能压测场景设置(基准、负载、压力、稳定性) 4. 无界面压测场景详解 一、性能测试脚本完善以及增强 使用控制器的目的是使我们的脚本更加接近真实的场景 1.逻辑控制器: 【事务控制器】&…

电商API接口接入||电商比价项目比价系统搭建需要注意哪些?

在搭建一个淘宝/京东比价系统时,需要注意以下几个方面,以确保系统的有效性、准确性和用户友好性: 确定平台和商品范围: 明确系统覆盖的电商平台,如淘宝、京东等。确定要比较的商品类别和范围,以确保数据的…

Maven环境搭建

💻博主现有专栏: C51单片机(STC89C516),c语言,c,离散数学,算法设计与分析,数据结构,Python,Java基础,MySQL,linux&#xf…

【Vue】核心概念 - module

目标 掌握核心概念 module 模块的创建 问题 由于使用单一状态树,应用的所有状态会集中到一个比较大的对象。当应用变得非常复杂时,store 对象就有可能变得相当臃肿。 这句话的意思是,如果把所有的状态都放在state中,当项目变得…

表的设计与查询

目录 一、表的设计 1.第一范式(一对一) 定义: 示例: 2.第二范式(一对多) 定义: 要求: 示例: 3.第三范式(多对多) 定义: 要求…

Selenium三种等待方式的使用!

UI自动化测试,大多都是通过定位页面元素来模拟实际的生产场景操作。但在编写自动化测试脚本中,经常出现元素定位不到的情况,究其原因,无非两种情况:1、有frame;2、没有设置等待。 因为代码运行速度和浏览器…

如何有效释放Docker占用的存储空间

随着Docker的广泛应用,我们经常会遇到Docker占用过多存储空间的问题。这可能是由于频繁的镜像拉取、容器创建和删除等操作导致的。本文将介绍几种方法来有效释放Docker占用的存储空间,特别是docker system prune命令的使用。 Docker的存储机制 Docker使…

体验SmartEDA:颠覆传统,设计流程更流畅,超越Multisim与Proteus!

在电子设计自动化(EDA)领域,传统软件如Multisim和Proteus一直是工程师们的得力助手。然而,随着科技的飞速发展和用户需求的不断升级,一个全新的EDA平台——SmartEDA正崭露头角,凭借其更为流畅的设计流程&am…

【验收支撑文档】软件验收计划书

软件系统验收计划书是确保新开发的软件系统符合预期要求并稳定运行的关键步骤。本计划书概述了验收过程的主要环节,包括系统功能的详细测试、性能评估、用户接受度测试以及文档完整性的核查。验收团队将依据项目需求规格说明书和合同要求,对系统进行全面…

网络安全自学入门:(超详细)从入门到精通学习路线规划,学完即可就业

很多人上来就说想学习黑客,但是连方向都没搞清楚就开始学习,最终也只是会无疾而终!黑客是一个大的概念,里面包含了许多方向,不同的方向需要学习的内容也不一样。 算上从学校开始学习,已经在网安这条路上走…

简单了解java中的异常

异常 1、异常的概述 1.1、概述 异常就是程序出现了不正常的情况,程序在执行过程中,数据导致程序不正常,最终导致JVM的非正常停止。语句错误不算在异常体系中。 1.2、异常的存在形式 异常有类型之分,比如我们比较熟悉的数组越…

Nginx服务配置

一、Nginx服务的主配置文件nginx.conf vim /usr/local/nginx/conf/nginx.conf 全局块:全局配置,对全局生效;events块:配置影响 Nginx 服务器与用户的网络连接;http块:配置代理,缓存&#xff0c…

C语言怎样初始化图形模式?

一、问题 在C语⾔中,initgraph( ) 函数⽤于初始化图形模式。初始化时,那么多参数都是⼲什么的?怎样设置? 二、解答 initgraph( ) 函数⽤于初始化图形模式,其语法格式如下。 void far initgraph(int far * gdriver, i…

Nginx学习笔记(十)如何配置HTTPS协议?(公网)

目录 一、简介二、SSL 证书类型介绍三、公网 SSL 证书3.1 证书管理工具3.2 下载安装 acme.sh3.3 申请并下载证书报错1:没有指定账号报错2:DNS无法解析的域名报错3:无效的响应 404 3.4 配置 Nginx3.5 证书过期刷新 四、补充4.1 同一域名的不同…

局域网测速

对于网管来说,企业局域网络的速度是知道的,因为网管清楚企业局域网络的拓扑结构、网络链路、网络设备以及实际到桌面的情况。 有时候即使千兆到桌面实际因为影响的因素多,实际的网络速度可能会打一定的折扣,那么就需要清楚实际的网…

【数学建模】微分方程的数值求解

微分方程的数值求解 一阶差分求解微分方程原理:四阶龙格-库塔方法应用:小船渡河问题: 进阶求二阶微分方程 一阶差分求解微分方程原理: d y d x f ( x n , y n ) \dfrac{dy}{dx}f(x_n,y_n) dxdy​f(xn​,yn​) y n 1 − y n x n 1 − x n f ( x n , y n ) \dfrac{y_{n1}-y_n…