STM32用STLINK烧写外置FLASH遇到的问题

发布者:chunying最新更新时间:2021-10-18 来源: eefocus关键字:STM32 手机看文章 扫描二维码
随时随地手机看文章

由于项目需要大量的图片字库还有音频文件,所以外挂了NOR flash和NAND flash,需要用到烧写算法STLDR(就是包含几段在SRAM里面运行的代码),调试的时候遇到了几个问题,都是大意造成的,所以写出来记录一下


首先烧写用到PC端软件是STM32 STLINK Utility,在安装目录下附带了一些常用的flash的烧写算法,但没有我用到的那种,所以只能参考ST-LINK Utility UM手册在…ST-LINK UtilityExternalLoader目录下的工程模板上修改,修改需要用到对FLASH的初始化、读写、擦除函数,这个要提前调试好,填到对应的函数内就可以了,后面由上位机自己调用


问题来了,主要是三方面的问题,第一个是编译出错,第二个是延时,第三个是地址


1)编译出错:在修改完模板第一次编译的时候可能会报错.xxx.axf: Error: L6265E: Non-PI Section loader_src.o(.data) cannot be assigned to PI Exec region PrgData.,这个问题需要修改target.sct文件,添加ABSOLUTE,这个是偶然在一个论坛上看到的,在此表示感谢

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

2)延时问题:工程用的cubemx的HAL库开发,所有延时部分都是用的HAL_Delay()函数,但是在模板中并没有使用中断,一直卡死在延时函数里面出不来,所以最终改为常用的自减法来达到延时的目的


3)地址问题:flash接在OSPI2接口上,起始基地址是0x70000000,但是OSPI的库函数使用的地址是不包括基地址的,而在模板中读写函数传入的地址参数是带着基地址的,所以需要与0x0FFFFFFF相与再使用


这三个问题解决好就可以正常读写了,就是感觉速度不快,带校验也就50k/s,可能是HAL库函数注重稳定性和兼容性,代码冗余多,直接操作寄存器可能会快点

关键字:STM32 引用地址:STM32用STLINK烧写外置FLASH遇到的问题

上一篇:STM32f407驱动hc-sr04超声波测距模块
下一篇:如何用ST-LINK给STM32下载HEX文件

推荐阅读最新更新时间:2024-11-11 10:31

再造STM32---第三部分:什么是寄存器?
本系列是基于STM32F429野火库进行学习。 3.1什么是寄存器? 我们经常说寄存器,那么什么是寄存器?这是我们本章需要讲解的内容,在学习的过程中,大家带着这个疑问好好思考下,到最后看看大家能否用一句话给寄存器下一个定义。 3.2 STM32 长啥样? 我们开发板中使用的芯片是 176pin 的 STM32F429IGT6,具体见图 3-1。这个就是我们接下来要学习的 STM32,它讲带领我们进入嵌入式的殿堂。芯片正面是丝印, ARM 应该是表示该芯片使用的是 ARM 的内核, STM32F429IGT6是芯片型号,后面的字应该是跟生产批次相关,最下面的是 ST 的 LOGO。芯片四周是引脚,左下角的小
[单片机]
再造STM32---第三部分:什么是寄存器?
STM32架构受肯定 意法半导体稳居市场龙头
自从苹果电脑与宏达电不约而同于2008年推出划时代的新一代智慧型手机后,不仅引爆了智慧型手机与平板电脑的高度成长,更让行动装置成为消费市场最受欢迎的设备。而在市面上众多架构中,ARM架构处理器由于具备省电、运算速度快,所以自然成为各家厂商推出行动产品的首选。 随着平板电脑、智慧型手机快速普及,具备省电特性的ARM架构处理器,已经成为全球销售量成长速度最快的处理器。根据市场研究机构的调查报告指出,ARM架构处理器从2007年的13.6%,大幅成长到2010年的23.5%,其中以意法半导体STM32晶片为核心的Cortex-M系列,在ARM平台的市场占有率高达45%以上,而且还在持续增加中。 意法半导体产品行销经理杨正
[嵌入式]
stm32实现iap远程固件更新
前提 想来做iap升级了,应该不是什么新手。 下面的程序需要用到一些简单的功能 串口收发数据 开关总中断 虽然本文标题是实现远程固件更新,但是具体远程方案本文不做详细说明,重点在于介绍mcu接收到新的固件后怎么保存更新,以及更新失败回滚等。下面简单说明一下远程的事情。 stm32的通信方式有串口,spi,iic,以及sdio等。也就是说我们的固件可以通过这些方式传输到mcu,不过普遍常用的是串口或者用sdio(外接sd卡)这两种方式。个人觉得用sd卡来回copy也不怎么方便。简单点还是再加一个串口网络模块,然后把固件存到服务器,经由串口网络模块透传到mcu。比如用http协议把固件发送下来。远程下载就这么简单一说。接下来重
[单片机]
怎样在Linux上开发STM32程序
步骤1:下载所需的一切 您需要下载三个部分才能正常工作: 用于ARM的GCC编译器 STM32固件文件 St-link实用程序 Sample Project 编译器是将我们的C代码和所有其他库文件编译成stm32控制器可以理解的机器语言的主要软件。下载此编译器的最新预编译版本。 包含STM32固件的文件夹是保存主处理器运行所需的所有启动文件和核心文件的文件夹。我们将使用HAL已超越的标准外围设备库。我更喜欢StPeriphLibrary,因为使用该处理器的公司都在使用它们,因为它功能强大,更老旧并且受支持。它也更坚固。它不会减少初始化外围设备或打开LED所需的工作,但是会迫使您学习这些处理器的工作方式。这样一来,您将对内部工作
[单片机]
怎样在Linux上开发<font color='red'>STM32</font>程序
关于STM32时钟源及配置等相关知识笔记
1,时钟源 HSI HSE LSI LSE PLL MSI (L系列特有) 2,主要的几个时钟 SYSCLK --- 系统时钟 PLLCLK --- 锁相环时钟 HCLK --- AHB总线时钟 PCLK1 --- APB1总线时钟 PCLK2 --- APB2总线时钟 3,各时钟来源 SYSCLK,系统时钟来源,可直接选择HSI,HSE,MSI直接作为系统时钟源,也可经过PLL倍频输出后的PLL作为系统时钟。 PLLCLK,锁相环时钟,一般是HSI,HSE,MSI时钟经过锁相环倍频后的输出时钟。 HCLK, AHB总线时钟,经过SYSCLK预分频后的输出时钟。 PCLK1,外设低速时钟,经过HC
[单片机]
关于<font color='red'>STM32</font>时钟源及配置等相关知识笔记
STM32的存储分配问题
keil编译后产生下面的信息: Program Size: Code=37970 RO-data=7598 RW-data=212 ZI-data=12340 其中 code ro-data rw-data zi-data分别代表什么意思? 回答: 代码段+初始化数据段=FLASH,数据段+0初始化数据段=RAM; ARM编译中的RO、RW和ZI DATA区段 ARM程序(指在ARM系统中正在执行的程序,而非保存在ROM中的bin文件)的组成 一个ARM程序包含3部分:RO段,RW段和ZI段 RO是程序中的指令和常量 RW是程序中的已初始化变量 ZI是程序中的未初始化的变量 由以上3点说明可以理解为: RO就是readonly
[单片机]
STM32学习笔记:FSMC详述
FSMC(Flexible Static Memory Controller,可变静态存储控制器)是STM32系列采用一种新型的 存储器 扩展技术。在外部存储器扩展方面具有独特的优势,可根据系统的应用需要,方便地进行不同类型大容量 静态存储器 的扩展。 使用FSMC控制器后,可以把FSMC提供的FSMC_A 作为地址线,而把FSMC提供的FSMC_D 作为数据总线。 (1)当存储数据设为8位时,(FSMC_NANDInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_8b) 地址各位对应FSMC_A ,数据位对应FSMC_D (2)当存储数据设为16位时,(FSM
[单片机]
<font color='red'>STM32</font>学习笔记:FSMC详述
STM32 cannot enter debug mode错误
调试STM32时,MDK环境,有的代码下进去后,突然以后再Debug的时候,就会出现:Cannot enter Debug Mode ,显示错误Error:Flash Download failed-Target DLL has been cancalled. 可以尝试着用ISP方式,将片上的FLASH全部擦掉就OK了。 使用先设置跳线boot0 = 1,boot1=0。然后连上串口线,波特率默认即可,读STM32的器件信息,再擦除。。。
[单片机]

推荐帖子

android BLE开发,传输大数据量时,如何控制输出传输速度?
androidBLE每次只能发20字节数据,如果要联系发送几百字节,如果不进行流量控制,就会丢包。根据规范,每次向SDK层写一包数据,SDK发送成功后,会有一个接口通知应用层。但在实际测试发现,某些手机采用这种方式控制流量,还是会丢包,只能在两包数据之间认为延迟50ms左右。androidBLE开发,传输大数据量时,如何控制输出传输速度?楼主问题解决了吗?我们也是设置间隔为50ms,尽管这样,在连续发送数据比如150个字节的过程中还是经常会有发送不成功的情况出现
nanstone RF/无线
关于ADS1115在采样时输入电压接近0却输出值65535或65534
刚才在写ADS1115的程序的时候用硬件仿真发现在有电压的时候是正常的,但如果输入电压基本上为0的时候,仿真出来的值就为65535或65534,这是为什么呀???求指导!!!!关于ADS1115在采样时输入电压接近0却输出值65535或65534肯定是程序出错了~麻烦你把程序亮一下~我帮你查一查“仿真”用的东西不正确呗。但不知道用什么来“仿”这个ADC。你是用的G2553吗?对,我用的也是G2553程序。呵呵呵楼主有程序和原理图可以分享一下吗。?也许是这个原因吧、你给
Mid_summer 微控制器 MCU
快充伤电池?何同学给大家做了对比测试,来看结果呀~~
网上传快充比较伤电池,电量过低过高充电对电池不好,大家觉得有道理吗???如何更好的保护电池,使我们的电池更耐用?何同学给大家多了对比测试,来看看结果吧~关于何同学的测试结果,为什么会是这样子的,有懂的网友来分析分析吗???快充伤电池?何同学给大家做了对比测试,来看结果呀~~快充伤电池么?严格说,确实与慢充相比会对电池不利,但这种不利小到完全可以忽略,需要快充尽管放心快充就是。这个话题在本站都讨论过多次了。材料不一样啦 伤只能伤一点点,不能伤多了其实我
木犯001号 电源技术
LPC2148开发板,全套资料
没什么好发的,把自己最近做的NXPLPC2148开发板资料发上来与大家分享!!!!!!!!先来几张靓照:LPC2148开发板,全套资料上图纸: 31个例程:如果需要,可以:http://shop58582707.taobao.com/ 呵呵,能不能送个板子给俺?这个不能送,投资那不少时间和金钱回复4楼tiankai001的帖子顶顶板子花多少钱买的啊?自
zhaojun_xf 单片机
EEWORLD大学堂----英飞凌XC82x83x系列产品介绍
英飞凌XC82x83x系列产品介绍:https://training.eeworld.com.cn/course/1970英飞凌XC82x83x系列产品介绍EEWORLD大学堂----英飞凌XC82x83x系列产品介绍
chenyy 单片机
“玩板”+ 共享单车控制板-GPS模块ublox MAX-M8Q
这种板子上的GPS模块有两种,一种是ublox的MAX-M8Q,还有一种是LYNQ的N10,调试的时候我还是选择的ublox的MAX-M8Q。.测试的时候使用串口透传模式,打通UART2---UART3,GPS模块是接在UART3上,波特率是9600.上位机使用u-box的u-center软件,还是挺方便的。接下来将考虑一下,如何解析这些数据,继续加油。上传一些MAX-M8Q的参考资料:此内容由EEWORLD论坛网友chenzhufly原创,如
chenzhufly 测评中心专版
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved