本帖最后由 ychf0000 于 2018-3-2 22:58 编辑 3 Q- z, @- L8 G+ \- n* V" } B 9 i9 r& D4 `( |& ?% R% g 在之前的学习中,一直用外部SPI Flash存放字库文件,之前的数据下载方法是用SD卡拷贝到SPIFLASH中,一直觉得在开发板上学习还算方便,如果在项目中应用,不是很方便,偶然机会,发现ST官方工具STM32 ST-LINK Utility可对外部SPIFLASH直接进行读写。于是尝试在原子精英板STM32 ST-LINK U上进行实验,并成功将字库文件下载到外部SPIFLASH,现把实现方法分享出来,方便大家共同学习,不完善之处还请多多指教!$ y$ l& d& x1 T! _; q9 [( z 平台:原子精英开发板(SPIFLASH芯片型号W25Q128),STM32F103,ST-LINK/V2* M& O- J2 c# D! x$ Q5 E# M' _1 l1 H4 p ( M4 |4 y; k& f( x2 k9 H 准备工作 1. 官网或社区下载软件STM32 ST-LINK Utility v4.2.0 setup.exe,并安装 2. W25Q128_STM32F1_Elite.stldr文件制作8 t. b# E* X. s! k8 Y) E1 U& S6 L 源码见附件,该文件需要根据自己的硬件平台做出相应的修改, x/ |2 l0 S" j5 v 3.将制作好的文件放在 安装目录\STMicroelectronics\STM32 ST-LINK Utility\ST-LINK Utility\ExternalLoader下 4.添加LOADER文件( i6 E0 {5 W$ b$ | s6 X 5.在ExternalLoader菜单先对外部SPIFLASH进行读、写、擦除等操作。, L4 B+ S/ @6 p3 J6 Q/ A 6 y- x9 c' v% j$ t+ m. a+ l + W' O, y( p {9 I# x & G) ^2 {6 t9 T. j% g+ ] 7 U6 s' {0 l# ]( ?* y- V8 F6 ] |
参与人数 4 | ST金币 +30 | 收起 理由 |
---|---|---|
songshiqun2010 | + 4 | 赞一个! |
tiantiandayou | + 1 | 很给力! |
wofei1314 | + 20 | 很给力! |
toofree | + 5 | 赞一个!(拿自己的金币为你点赞). |
这些代码应该是ST-LINK写外部FLASH的时候临时装入CPU运行的,效率最重要,可能直接操作寄存器最快
第一次发帖,折腾的比较费劲,先将就看吧。
正在尝试基于HAL库实现工程编写,进展不是很顺利,实现了再和大家分享吧。。。
( ~7 \) Q% D! W0 v! H3 s1 V: r
2018年3月15日 经测试 基于HAL,对外挂SPIflash的下载速度较慢,时间差一倍以上,就不发源码了,推荐用标准库或直接操作寄存器方式。6 Q8 ], [" i( n1 W- U
2018年3月10日最新进展 在规避全局变量的情况下,基于HAL库已实现对外挂SPIflash的读写擦除等操作。8 e; |0 u6 ^+ J+ q8 B
1 U; t$ a# h7 c a: ~
2018年3月8日进展' G$ W* G6 p6 S% s/ J
经过一段时间的排查发现代码中不能有全局变量,不知道什么原因?实在是没头绪了,希望有各位网友给予指点,实在不行就只有规避全局变量了; _$ A1 g/ V& t% g0 m& ?2 Y! f
为查找原因,编写了测试代码,当在软件ST-LINK Utility开始执行读取外部SPIFLASH时,从Init()函数,为此编写了测试代码,正常情况下,开始读时,开发板先看到红灯闪烁5次,紧接着绿灯闪烁5次,再红绿灯同时闪烁(表示进入read()函数),属正常现象。& V e7 z$ M( U
当加入全局变量赋值语句tempdata_test=1后,先是红灯闪烁,间隔约6秒后(程序运行不正常),再红灯闪烁5次,绿灯闪烁5次,再红绿灯同时闪烁。- E. L& m9 ], k1 o5 a" A4 d
(1)测试代码如下:
) p X P d5 l7 i. j3 T2 v4 e# U* i
谢谢大师的热心帮助和鼓励
https://www.stmcu.org.cn/module/forum/thread-615031-1-1.html
1分钟差不多
查查spi接口配置和时钟使能对不对
先在你的应用中验证你的spiflash读写正常,再移植过来