完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
前言 本来想直接阐述问题,但是想想还是写一下过程,自己脑子不好使老是忘,放在网站上当做日记了,也方便大家,同时如果移植过程中有问题,大佬也会指出。 1、移植: 1.1. 看好自己板子的晶振,根据自己板子的晶振在STM32CubeMx中设置,并设置shell串口,把CubeMx生成的main.c中的“SystemClock_Config”复制到board.c中替换原有的。 1.2. shell 移植的过程中会发现,RTT提供的“uart_config.h”文件中只有LPUART1、UART1、UART2、UART3,L475明明支持5个串口呢,没办法谁让硬件工程师把调试串口画在了UART5上,增加如下代码段,关于这段代码的添加最好还是配合着看看 “dma_config.h”,因为UART上有些DMA接口如果“dma_config.h”中没有,即使添加上也是没有用的。 #if defined(BSP_USING_UART5) 1.3. 下载观察现象 2、添加Fal组件管理片上Flash中 这方面我之前在F4上移植过,但是L4和F4的Flash存储划分是不一样的,还是要看看的,包括512K和256K的还不一样,我用的是256K,如下所示。 read、write、erase函数。 2.2. 在env中开启fal,我这里用的是片上,所以sfud没选择 2.3. fal管理的存储列表在“fal_cfg.h”中,packages的inc文件夹中没有这个文件,程序检索不到,编译会报错,所以将“samples\porting”中的“fal_cfg”复制过来。 2.4. 添加完成你会打开工程你会看到,你想要的内容都在其中,如下: 2.5. 对应的填写fal_cfg.h 中列表如下,这几个名字要与“drv_flash_l4”中一致: 2.6. 在main中添加,如下代码段,这个”fal_test”函数我是直接从正点原子开发板复制过来的。
2.7. 下载验证 添加easyflash 组件,这里要注意一下 3.1. env中开启easyflash组件,这里2048是l4的页大小,我的env存储空间也是2048 3.2. 对应修改“packages\EasyFlash-v3.0.0\SConscript”,为如下 3.3. 修改“ef_fal_port.c”中文件,并在main中加入如下测试代码 3.4. 下载验证 我们看着是成功了,但是问题: 4、ulog_easyflash移植 4.1. env中开启ulog_easyflash组件 4.2. 下载验证 4.3. 问题分析 int stm32_flash_write(rt_uint32_t addr, const uint8_t buf, size_t size) 问题 EF_ENV_USING_LEGACY_MODE 我从头到位都没设置呢? |
|
相关推荐
1个回答
|
|
遇到同样的问题。之前移植EasyFlash时,作者提示过STM32L4系列只能用V3版本。不知道ulog_easyflash有没有在L4系列上经过测试,地址对齐的问题我解决了部分。
在ulog_easyflash_be.c中 static void ulog_easyflash_backend_output(struct ulog_backend *backend, rt_uint32_t level, const char *tag, rt_bool_t is_raw, const char *log, size_t len) { /* write some 'r' for word alignment */ // 原代码为char write_overage_c[4] = { 'r', 'r', 'r', 'r'}; char write_overage_c[8] = { 'r', 'r', 'r', 'r', 'r', 'r', 'r', 'r'}; size_t write_size_temp = 0; EfErrCode result = EF_NO_ERR; /* saving level filter for flash log */ if (level <= log_saving_lvl) { /* calculate the word alignment write size */ // 源代码为write_size_temp = RT_ALIGN_DOWN(len, 4); write_size_temp = RT_ALIGN_DOWN(len, 8); result = ef_log_write((uint32_t *) log, write_size_temp); /* write last word alignment data */ if ((result == EF_NO_ERR) && (write_size_temp != len)) { memcpy(write_overage_c, log + write_size_temp, len - write_size_temp); ef_log_write((uint32_t *) write_overage_c, sizeof(write_overage_c)); } } } 能存储一部分log,之后亦出现写入错误问题。如果楼主解决问题,麻烦交流下经验。 |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
883 浏览 0 评论
AI模型部署边缘设备的奇妙之旅:如何在边缘端部署OpenCV
3025 浏览 0 评论
tms320280021 adc采样波形,为什么adc采样频率上来波形就不好了?
1409 浏览 0 评论
2039 浏览 0 评论
1574 浏览 0 评论
75142 浏览 21 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-26 17:24 , Processed in 0.718739 second(s), Total 71, Slave 55 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号