STM32MP135裸机编程:配置RCC,修改主频到1GHz
0 工具准备
STM32CubeMX v6.11.1
STM32CubeIDE v1.15
STM32CubeProgrammer v2.16.0
STM32MP13xx参考手册
STM32MP13勘误手册
STM32MP135AD数据手册
正点原子stm32MP135开发板
1 确认时钟源
本例使用的时钟源均由外部晶振提供,分别是24MHz的HSE、32.768KHz的LSE。原理图如下:


STM32MP135AD数据手册对HSE、LSE的描述如下:
LSE:

HSE:

2 使用STM32CubeMX生成RCC初始化代码
2.1 使能HSE、LSE

2.2 修改RCC时钟树
本例以HSE倍频后的PLL1P作为MPU的主频为999MHz,如果使用HSI的话可以设置到正好1GHz。为了保证时钟源的精度,这里牺牲1MHz频率选择HSE。

按照上图指示完成步骤1、2,然后在3框内输入999即可自动得出合适的配置。
其余的时钟我们暂时没用到,配置如下:

2.3 生成初始化代码

在方框内输入工程名,然后点击生成代码即可。
3 修改STM32CubeMX生成的RCC初始化代码
3.1 初始化前去初始化RCC
STM32CubeMX生成的RCC初始化代码并不能直接使用,参考官方初始化RCC操作,我们需要在初始化RCC前去初始化RCC,也就是在RCC初始化前加上HAL_RCC_DeInit()。最后还要为MPU各总线选择时钟源及分频系数。完整代码如下:
void SystemClock_Config(void)
{
#if !defined(USE_DDR)HAL_RCC_DeInit();RCC_OscInitTypeDef RCC_OscInitStruct = {0};RCC_ClkInitTypeDef RCC_ClkInitStructure;/** Initializes the RCC Oscillators according to the specified parameters* in the RCC_OscInitTypeDef structure.*/RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI | RCC_OSCILLATORTYPE_HSE;RCC_OscInitStruct.HSEState = RCC_HSE_ON;RCC_OscInitStruct.HSIState = RCC_HSI_ON;RCC_OscInitStruct.HSICalibrationValue = 16;RCC_OscInitStruct.HSIDivValue = RCC_HSI_DIV1;RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;RCC_OscInitStruct.PLL.PLLSource = RCC_PLL12SOURCE_HSE;RCC_OscInitStruct.PLL.PLLM = 2;RCC_OscInitStruct.PLL.PLLN = 83;RCC_OscInitStruct.PLL.PLLP = 1;RCC_OscInitStruct.PLL.PLLQ = 2;RCC_OscInitStruct.PLL.PLLR = 2;RCC_OscInitStruct.PLL.PLLFRACV = 2048;RCC_OscInitStruct.PLL.PLLMODE = RCC_PLL_FRACTIONAL;RCC_OscInitStruct.PLL2.PLLState = RCC_PLL_ON;RCC_OscInitStruct.PLL2.PLLSource = RCC_PLL12SOURCE_HSE;RCC_OscInitStruct.PLL2.PLLM = 2;RCC_OscInitStruct.PLL2.PLLN = 62;RCC_OscInitStruct.PLL2.PLLP = 3;RCC_OscInitStruct.PLL2.PLLQ = 2;RCC_OscInitStruct.PLL2.PLLR = 2;RCC_OscInitStruct.PLL2.PLLFRACV = 4096;RCC_OscInitStruct.PLL2.PLLMODE = RCC_PLL_FRACTIONAL;RCC_OscInitStruct.PLL3.PLLState = RCC_PLL_ON;RCC_OscInitStruct.PLL3.PLLSource = RCC_PLL3SOURCE_HSE;RCC_OscInitStruct.PLL3.PLLM = 2;RCC_OscInitStruct.PLL3.PLLN = 50;RCC_OscInitStruct.PLL3.PLLP = 3;RCC_OscInitStruct.PLL3.PLLQ = 2;RCC_OscInitStruct.PLL3.PLLR = 2;RCC_OscInitStruct.PLL3.PLLRGE = RCC_PLL3IFRANGE_1;RCC_OscInitStruct.PLL3.PLLFRACV = 0;RCC_OscInitStruct.PLL3.PLLMODE = RCC_PLL_INTEGER;RCC_OscInitStruct.PLL4.PLLState = RCC_PLL_NONE;if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK){Error_Handler();}/* Select PLLx as MPU, AXI and MCU clock sources */RCC_ClkInitStructure.ClockType = (RCC_CLOCKTYPE_MPU | RCC_CLOCKTYPE_ACLK |RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_PCLK4 |RCC_CLOCKTYPE_PCLK5 | RCC_CLOCKTYPE_PCLK1 |RCC_CLOCKTYPE_PCLK6 |RCC_CLOCKTYPE_PCLK2 | RCC_CLOCKTYPE_PCLK3);RCC_ClkInitStructure.MPUInit.MPU_Clock = RCC_MPUSOURCE_PLL1;RCC_ClkInitStructure.MPUInit.MPU_Div = RCC_MPU_DIV2;RCC_ClkInitStructure.AXISSInit.AXI_Clock = RCC_AXISSOURCE_PLL2;RCC_ClkInitStructure.AXISSInit.AXI_Div = RCC_AXI_DIV1;RCC_ClkInitStructure.MLAHBInit.MLAHB_Clock = RCC_MLAHBSSOURCE_PLL3;RCC_ClkInitStructure.MLAHBInit.MLAHB_Div = RCC_MLAHB_DIV1;RCC_ClkInitStructure.APB1_Div = RCC_APB1_DIV2;RCC_ClkInitStructure.APB2_Div = RCC_APB2_DIV2;RCC_ClkInitStructure.APB3_Div = RCC_APB3_DIV2;RCC_ClkInitStructure.APB4_Div = RCC_APB4_DIV2;RCC_ClkInitStructure.APB5_Div = RCC_APB5_DIV4;RCC_ClkInitStructure.APB6_Div = RCC_APB6_DIV2;if (HAL_RCC_ClockConfig(&RCC_ClkInitStructure) != HAL_OK){/* HAL RCC configuration error */Error_Handler();}
#endif
}
这里有个USE_DDR的宏定义,如果用户程序是在DDR中运行的,则不能再初始化时钟避免DDR异常。
3.2 添加一个LED闪烁观察是否初始化成功
RCC初始化如果异常则会进入Error_Handler函数,这是一个死循环:
void Error_Handler(void)
{/* USER CODE BEGIN Error_Handler_Debug *//* User can add his own implementation to report the HAL error return state */__disable_irq();while (1){}/* USER CODE END Error_Handler_Debug */
}
本例在RCC初始化后加上一个LED闪烁死循环,如果LED能够闪烁起来则说明RCC初始化成功。相关代码如下:
static void MX_GPIO_Init(void)
{GPIO_InitTypeDef GPIO_InitStruct = {0};/* USER CODE BEGIN MX_GPIO_Init_1 *//* USER CODE END MX_GPIO_Init_1 *//* GPIO Ports Clock Enable */__HAL_RCC_GPIOI_CLK_ENABLE();__HAL_RCC_GPIOC_CLK_ENABLE();__HAL_RCC_GPIOH_CLK_ENABLE();/*Configure GPIO pin Output Level */HAL_GPIO_WritePin(GPIOI, GPIO_PIN_3, GPIO_PIN_RESET);/*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);/* USER CODE BEGIN MX_GPIO_Init_2 *//* USER CODE END MX_GPIO_Init_2 */}
3.3 添加总线时钟频率打印语句查看总线时钟频率是否设置正确
相关代码如下:
imx_printf("CPU Name : stm32MP135DAE7\r\n");imx_printf("ACLK Freq : %lu.%lu MHz\r\n", HAL_RCC_GetACLKFreq() / 1000000, HAL_RCC_GetACLKFreq() % 1000000);imx_printf("HCLK5 Freq : %lu.%lu MHz\r\n", HAL_RCC_GetHCLK5Freq() / 1000000, HAL_RCC_GetHCLK5Freq() % 1000000);imx_printf("HCLK6 Freq : %lu.%lu MHz\r\n", HAL_RCC_GetHCLK6Freq() / 1000000, HAL_RCC_GetHCLK6Freq() % 1000000);imx_printf("PCLK4 Freq : %lu.%lu MHz\r\n", HAL_RCC_GetPCLK4Freq() / 1000000, HAL_RCC_GetPCLK4Freq() % 1000000);imx_printf("PCLK5 Freq : %lu.%lu MHz\r\n", HAL_RCC_GetPCLK5Freq() / 1000000, HAL_RCC_GetPCLK5Freq() % 1000000);imx_printf("MPUSS Freq : %lu.%lu MHz\r\n", HAL_RCC_GetMPUSSFreq() / 1000000, HAL_RCC_GetMPUSSFreq() % 1000000);imx_printf("MLAHB Freq : %lu.%lu MHz\r\n", HAL_RCC_GetMLAHBFreq() / 1000000, HAL_RCC_GetMLAHBFreq() % 1000000);imx_printf("HCLK Freq : %lu.%lu MHz\r\n", HAL_RCC_GetHCLK1Freq() / 1000000, HAL_RCC_GetHCLK1Freq() % 1000000);imx_printf("PCLK1 Freq : %lu.%lu MHz\r\n", HAL_RCC_GetPCLK1Freq() / 1000000, HAL_RCC_GetPCLK1Freq() % 1000000);imx_printf("PCLK2 Freq : %lu.%lu MHz\r\n", HAL_RCC_GetPCLK2Freq() / 1000000, HAL_RCC_GetPCLK2Freq() % 1000000);imx_printf("PCLK3 Freq : %lu.%lu MHz\r\n", HAL_RCC_GetPCLK3Freq() / 1000000, HAL_RCC_GetPCLK3Freq() % 1000000);imx_printf("PCLK6 Freq : %lu.%lu MHz\r\n", HAL_RCC_GetPCLK6Freq() / 1000000, HAL_RCC_GetPCLK6Freq() % 1000000);
主函数完整代码如下:
/*** @brief The application entry point.* @retval int*/
int main(void)
{/* USER CODE BEGIN 1 *//* USER CODE END 1 *//* MCU Configuration--------------------------------------------------------*//* Reset of all peripherals, Initializes the Flash interface and the Systick. */HAL_Init();/* USER CODE BEGIN Init *//* USER CODE END Init *//* Configure the system clock */SystemClock_Config();/* USER CODE BEGIN SysInit *//* USER CODE END SysInit *//* Initialize all configured peripherals */MX_GPIO_Init();MX_UART4_Init();/* USER CODE BEGIN 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */while (1){HAL_Delay(5000);HAL_GPIO_TogglePin(GPIOI, GPIO_PIN_3);imx_printf("CPU Name : stm32MP135DAE7\r\n");imx_printf("ACLK Freq : %lu.%lu MHz\r\n", HAL_RCC_GetACLKFreq() / 1000000, HAL_RCC_GetACLKFreq() % 1000000);imx_printf("HCLK5 Freq : %lu.%lu MHz\r\n", HAL_RCC_GetHCLK5Freq() / 1000000, HAL_RCC_GetHCLK5Freq() % 1000000);imx_printf("HCLK6 Freq : %lu.%lu MHz\r\n", HAL_RCC_GetHCLK6Freq() / 1000000, HAL_RCC_GetHCLK6Freq() % 1000000);imx_printf("PCLK4 Freq : %lu.%lu MHz\r\n", HAL_RCC_GetPCLK4Freq() / 1000000, HAL_RCC_GetPCLK4Freq() % 1000000);imx_printf("PCLK5 Freq : %lu.%lu MHz\r\n", HAL_RCC_GetPCLK5Freq() / 1000000, HAL_RCC_GetPCLK5Freq() % 1000000);imx_printf("MPUSS Freq : %lu.%lu MHz\r\n", HAL_RCC_GetMPUSSFreq() / 1000000, HAL_RCC_GetMPUSSFreq() % 1000000);imx_printf("MLAHB Freq : %lu.%lu MHz\r\n", HAL_RCC_GetMLAHBFreq() / 1000000, HAL_RCC_GetMLAHBFreq() % 1000000);imx_printf("HCLK Freq : %lu.%lu MHz\r\n", HAL_RCC_GetHCLK1Freq() / 1000000, HAL_RCC_GetHCLK1Freq() % 1000000);imx_printf("PCLK1 Freq : %lu.%lu MHz\r\n", HAL_RCC_GetPCLK1Freq() / 1000000, HAL_RCC_GetPCLK1Freq() % 1000000);imx_printf("PCLK2 Freq : %lu.%lu MHz\r\n", HAL_RCC_GetPCLK2Freq() / 1000000, HAL_RCC_GetPCLK2Freq() % 1000000);imx_printf("PCLK3 Freq : %lu.%lu MHz\r\n", HAL_RCC_GetPCLK3Freq() / 1000000, HAL_RCC_GetPCLK3Freq() % 1000000);imx_printf("PCLK6 Freq : %lu.%lu MHz\r\n", HAL_RCC_GetPCLK6Freq() / 1000000, HAL_RCC_GetPCLK6Freq() % 1000000);/* USER CODE END WHILE *//* USER CODE BEGIN 3 */}/* USER CODE END 3 */
}
4 烧录测试
这里有一个小技巧,如果我们的程序是在SYSRAM中运行的,不需要使用调试工具,直接将板子设置为USB/UART启动,然后将我们的用户程序直接烧写到SYSRAM中即可看到实验现象。下图就是本例使用的烧录配置:

只需要下载用户程序(记得加上stm32头标识)即可。
实验现象:
可以看到LED灯闪烁了起来,说明我们已经将主频设置成功,完成了RCC初始化。打印的总线时钟频率如下:

以上总线频率和我们在stm32CubeMX内设置的一样。详见以下图片:


相关文章:
STM32MP135裸机编程:配置RCC,修改主频到1GHz
0 工具准备 STM32CubeMX v6.11.1 STM32CubeIDE v1.15 STM32CubeProgrammer v2.16.0 STM32MP13xx参考手册 STM32MP13勘误手册 STM32MP135AD数据手册 正点原子stm32MP135开发板 1 确认时钟源 本例使用的时钟源均由外部晶振提供,分别是24MHz的HSE、32.768KHz的LSE。原…...
观察 jvm 运行时数据区内存大小(native memory tracking)
jvm 运行时数据区 jvm 运行时数据区包括且不限于以下几个部分: 堆(heap): 用于存储对象实例和数组。堆内存的分配和释放由垃圾回收器进行管理。方法区(method area): 用于存储类的信息、静态变量、常量等。jdk 8 后方法区位于 metaspace。虚拟机栈(vm stack): 用于存储方法的…...
【论文阅读】-- 时间空间化:用于深度分类器训练的可扩展且可靠的时间旅行可视化
Temporality Spatialization: A Scalable and Faithful Time-Travelling Visualization for Deep Classifier Training 摘要1 引言2 动机3 问题定义4 方法论4.1 时空复合体4.2 复数约简 5 实验6 相关工作7 结论参考文献 摘要 时间旅行可视化回答了深度分类器的预测是如何在训练…...
Windows系统部署本地SQL_Server指引
Windows系统部署本地SQL_Server指引 此指引文档环境为Windows10系统,部署SQL_Server 2019为例,同系列系统软件安装步骤类似。 一、部署前准备; 下载好相关镜像文件;设备系统启动后,将不必要的软件停用,避…...
Aptos Builder Jam 亚洲首站|议程公布,无限畅想 Aptos 生态未来
作为一个新兴的 Layer1 公链,Aptos 自诞生之日起的理想便是 “A Layer 1 for everyone” 当 Web3 深陷熊市阴影之时,Aptos 奋力为开发者找到了全新的技术路径,正有 200 项目正在开发,并且已有大量 DeFi 项目落实部署工作ÿ…...
Vue3使用component动态展示组件
前言: 最近在研究gitHub中的一个项目并将与自己之前完成的项目进行结合,其中有一个功能就是需要使用根据不同的字段,渲染不同的组件,查阅资料发现可以使用component完成这个功能,在实现的过程中也会遇见一些坑&#x…...
嵌入式中间件_2.嵌入式中间件的分类
1.中间件的分类 中间件的范围十分广泛,针对不同的应用需求涌现出了多种各具特色的中间件产品。因此,在不同的角度或不同的层次上,对中间件的分类也会有所不同。 根据IDC在1998年对中间件进行的分类,把中间件分为终端仿真/屏幕转换…...
论文精读——KAN
目录 1.研究背景 2.关键技术 2.1 原始公式 2.2 KAN结构 2.3 缩放定律 3.技术扩展 4.模型效果 5.相关讨论 6.总结 文章标题:《KAN: Kolmogorov–Arnold Networks》 文章地址: KAN: Kolmogorov-Arnold Networks (arxiv.org)https://arxiv.org/a…...
全国产城市轨道交通运营公安AI高清视频监控系统
方案简介 城市轨道交通运营公安高清视频监控系统解决方案针对运营部门和公安部门的安保需求,选用华维视讯的各类前端和视频编解码、控制产品,通过统一平台提供视频监控服务和智能应用,满足轨道交通运营业主客运组织和抢险指挥的需求ÿ…...
python连接mysql数据库、FastAPI、mysql-connector-python
方法工具一、FastAPI 建议使用fast api中的pymysql pip3 install fastapi pip3 install pydantic pip3 install "uvicorn[standard]" pip3 中的3是 Python 3 版本的包管理器命令,用于安装和管理 Python 3 版本的第三方库。在某些系统中,同时…...
【idea】解决springboot项目中遇到的问题
一、Maven报错Could not find artifact com.mysql:mysql-connector-j:pom:unknown in aliyunmaven解决及分析 报错 创建springboot项目,勾选数据库驱动,springboot版本为3,现在改成了2.7.2,Maven就发生了报错Could not find art…...
ubuntu22.04禁止自动休眠的几种方式
在Ubuntu 20.04中,您可以通过以下几种方式禁用自动休眠功能: 使用systemd设置: sudo systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target 修改/etc/systemd/logind.conf文件: sudo nano /etc/systemd/logind.conf 找…...
智能网站管理系统
智能网站管理系统,即智能化的网站管理工具,是为了提高网站管理效率和简化操作流程而开发的一种软件系统。它集合了各种先进的技术和功能,为网站管理员提供了一套强大而可靠的解决方案。 智能网站管理系统的核心功能是网站内容管理。传统的网站…...
Android Service学习笔记
1、Service介绍 Android Service(服务)是 Android 四大组件之一,主要作用是执行后台操作。它是一个后台运行的组件,执行长时间运行且不需要用户交互的任务。即使应用被销毁也依然可以工作。 Service并不是运行在一个独立的进程当…...
amr文件怎么转换成mp3?超好用的四种转换方法介绍!
amr文件怎么转换成mp3?在当今数字化时代,音频格式的多样性给我们带来了更广泛的选择,其中AMR格式就是其中之一,AMR格式在录音和通话领域得到广泛应用,但与此同时,它也存在一些挑战和局限性,尽管…...
翻转数位00
题目链接 翻转数位 题目描述 注意点 可以将一个数位从0变为1找出能够获得的最长的一串1的长度(必须是连续的) 解答思路 参照题解使用动态规划解决本题,对于任意一个位置i,dp[i][0]表示到达且包含第i位不翻转0最长1的长度&…...
工具:安装R语言的R包的各种方法
欢迎大家关注全网生信学习者系列: WX公zhong号:生信学习者Xiao hong书:生信学习者知hu:生信学习者CDSN:生信学习者2 介绍 R语言提供的大量R包为众多研究者提供了足够的工具,但是如何安装R包是很多人在使…...
注意力机制和Transformer模型各部分功能解释
文章目录 Transformer1、各部分功能解释2、通过例子解释a.输入预处理位置编码b.Encoder 的处理c.Decoder的输入Decoder的工作流程d.输出预测总结 Attention代码和原理理解 Transformer 运行机理: (1)假设我们需要进行文本生成任务。我们将已…...
短路是怎么形成的
1. 短路分为电源短路和用电器短路。 电源短路:电流不经过任何用电器,直接由正极经过导线流向负极,由于电源内阻很小,导致短路电流很大,特别容易烧坏电源。 用电器短路:也叫部分电路短路,即一根…...
【ZZULIOJ】1106: 回文数(函数专题)
题目描述 一个正整数,如果从左向 右读(称之为正序数)和从右向左读(称之为倒序数)是一样的,这样的数就叫回文数。输入两个整数m和n(m<n),输出区间[m,n]之间的回文数。…...
iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘
美国西海岸的夏天,再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至,这不仅是开发者的盛宴,更是全球数亿苹果用户翘首以盼的科技春晚。今年,苹果依旧为我们带来了全家桶式的系统更新,包括 iOS 26、iPadOS 26…...
2025年能源电力系统与流体力学国际会议 (EPSFD 2025)
2025年能源电力系统与流体力学国际会议(EPSFD 2025)将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会,EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...
postgresql|数据库|只读用户的创建和删除(备忘)
CREATE USER read_only WITH PASSWORD 密码 -- 连接到xxx数据库 \c xxx -- 授予对xxx数据库的只读权限 GRANT CONNECT ON DATABASE xxx TO read_only; GRANT USAGE ON SCHEMA public TO read_only; GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only; GRANT EXECUTE O…...
BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践
6月5日,2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席,并作《智能体在安全领域的应用实践》主题演讲,分享了在智能体在安全领域的突破性实践。他指出,百度通过将安全能力…...
Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
【生成模型】视频生成论文调研
工作清单 上游应用方向:控制、速度、时长、高动态、多主体驱动 类型工作基础模型WAN / WAN-VACE / HunyuanVideo控制条件轨迹控制ATI~镜头控制ReCamMaster~多主体驱动Phantom~音频驱动Let Them Talk: Audio-Driven Multi-Person Conversational Video Generation速…...
Java + Spring Boot + Mybatis 实现批量插入
在 Java 中使用 Spring Boot 和 MyBatis 实现批量插入可以通过以下步骤完成。这里提供两种常用方法:使用 MyBatis 的 <foreach> 标签和批处理模式(ExecutorType.BATCH)。 方法一:使用 XML 的 <foreach> 标签ÿ…...
【无标题】路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论
路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论 一、传统路径模型的根本缺陷 在经典正方形路径问题中(图1): mermaid graph LR A((A)) --- B((B)) B --- C((C)) C --- D((D)) D --- A A -.- C[无直接路径] B -…...
Webpack性能优化:构建速度与体积优化策略
一、构建速度优化 1、升级Webpack和Node.js 优化效果:Webpack 4比Webpack 3构建时间降低60%-98%。原因: V8引擎优化(for of替代forEach、Map/Set替代Object)。默认使用更快的md4哈希算法。AST直接从Loa…...
学习一下用鸿蒙DevEco Studio HarmonyOS5实现百度地图
在鸿蒙(HarmonyOS5)中集成百度地图,可以通过以下步骤和技术方案实现。结合鸿蒙的分布式能力和百度地图的API,可以构建跨设备的定位、导航和地图展示功能。 1. 鸿蒙环境准备 开发工具:下载安装 De…...
