HarmonyOS鸿蒙Next中stm32l476移植求助

HarmonyOS鸿蒙Next中stm32l476移植求助

本人菜鸡一只,尝试着移植鸿蒙2.0系统到stm32l476rg_nucleo开发板。现在碰到一些问题,想问下论坛里的大佬是否可以给点提示,非常感谢。

环境配置描述:
目前已完成至设置好clang+gcc工具链(最后ld时使用arm-none-eabi-gcc)配置,编译参数根据cubeMX生成的makefile文件修改好了。该工具链与编译参数使用在cubeMX生成的标准程序里可正常运行(点灯OK,延时500毫秒OKprintf重定向串口输出OK)。

---------------------------
参数设置如下
defines = -DUSE_HAL_DRIVER -DSTM32L476xx
asmflags = -mcpu=cortex-m4 -mthumb -mfpu=fpv4-sp-d16 -mfloat-abi=hard
# -fshort-enums -target arm-none-eabi 这两个参数是clang用的
cflags = -mcpu=cortex-m4 -mthumb -mfpu=fpv4-sp-d16 -mfloat-abi=hard -fshort-enums -target arm-none-eabi -fPIC
cflags_c = -Og -Wall -fdata-sections -ffunction-sections -g -gdwarf-2
ldflags = -T ../../vendor/st/board/stm32l476rg/STM32L476RGTx_FLASH.ld -lc -lm -lnosys -specs=nano.specs -mcpu=cortex-m4 -mthumb -mfpu=fpv4-sp-d16 -mfloat-abi=hard -Og -Wall -fdata-sections -ffunction-sections -g -gdwarf-2
```plaintext
---------------------------
问题描述如下,mcu的时钟定义设置为最高速80M,在cubeMX生成的标准程序里(不管是gcc编译或者clang编译),SystemCoreClock可顺利更新为80M,程序正常。但是在移植到鸿蒙的代码中,HAL库无法更新SystemCoreClock变量,不管是如何修改cubeMX的时钟定义(降频改配置,修改UART2时钟信号源),均无法正常运行点灯与串口输出功能,HAL_Delay功能也出错。目前判断是只要使用到SystemCoreClock变量的,都会出错。自己在单步调试中将SystemCoreClock变量赋值为80M,也无法正常运行程序。
```plaintext
--------------------------
想求助一下论坛里的大佬,是否能帮忙看一下到底是什么地方有问题。
源码地址附上:https://gitee.com/walker2048/hmos_iot,请切换到clang_stm32分支。
编译时需要LLVM,arm-none-eabi-gcc,gn,ninja工具,以及python3.7以上环境。Debug时需要Openocd和arm-none-eabi-gdb。
编译命令为python build.py stm32l476rg_nucleo(在源码根目录执行)。
如果大家懒得搭编译环境,可以使用我创建好的Docker镜像(arm-none-eabi-gcc工具链需要自行下载配置)
镜像运行命令:docker run -it --name build -v "D:/hmos_iot":"/mnt" walker2048/hm_build:slim_iot
7 回复

萌新一枚,能具体教一下怎么才能移植使用吗?

更多关于HarmonyOS鸿蒙Next中stm32l476移植求助的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


开发者你好,可以尝试在代码中加入更多的日志或者单步调试,然后给出具体出错的信息或者相关日志,以便更好的定位问题。

已搞定,编译选项去掉-fPIE就行了。谢谢,正在处理内核相关代码

有要学HarmonyOS AI的同学吗,联系我:https://www.itying.com/goods-1206.html

亲爱滴开发者 ,这个问题已经在处理中啦,稍后答复你哟 ,么么哒

在HarmonyOS鸿蒙Next中移植STM32L476,首先需要确保开发环境配置正确。使用DevEco Studio作为开发工具,安装HarmonyOS SDK,并确保STM32L476的硬件支持包已安装。接下来,创建新的HarmonyOS项目,选择适合的模板,如“Empty Ability”或“Service Ability”。

在项目配置中,设置目标设备为STM32L476,并配置相应的编译器和调试工具链。确保项目中的config.json文件正确配置了硬件资源和外设驱动。在src/main/cpp目录下,编写或移植STM32L476的底层驱动代码,确保与HarmonyOS的HDF(Hardware Driver Foundation)框架兼容。

src/main/ets目录下,编写应用逻辑代码,调用底层驱动实现功能。使用HarmonyOS提供的API进行任务调度、内存管理和外设控制。确保代码符合HarmonyOS的安全和性能要求。

编译项目,生成可执行文件,并通过调试工具将其烧录到STM32L476开发板上。使用DevEco Studio的调试功能,验证移植的正确性和稳定性。如果遇到问题,检查日志输出,定位并修复错误。

整个过程需要熟悉HarmonyOS的架构和API,以及STM32L476的硬件特性。确保代码的兼容性和稳定性,是成功移植的关键。

在HarmonyOS鸿蒙Next中移植STM32L476,首先需确保开发环境配置正确,包括安装HarmonyOS SDK和STM32CubeMX。接着,使用STM32CubeMX生成初始化代码,并配置时钟、GPIO等外设。然后,将生成的代码集成到HarmonyOS工程中,确保系统启动流程和任务调度与STM32L476的硬件特性兼容。最后,调试并优化系统性能,确保稳定运行。建议参考官方文档和社区资源,获取更详细的移植指南。

回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!