刚买了 STM32F446 但 STM32IDE 没有达到我的预期
Posted
技术标签:
【中文标题】刚买了 STM32F446 但 STM32IDE 没有达到我的预期【英文标题】:Just bought STM32F446 but the STM32IDE is not doing what I expect 【发布时间】:2020-05-08 04:57:00 【问题描述】: while (1)
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
我安装了STMCubeMX并为STM32IDE构建了一个项目
在 IDE 中,我使用以下方法成功构建了项目:project -> build all
鉴于我的 while 循环完全空白,我希望看到默认导致停止闪烁,但它仍然像疯了一样闪烁。
【问题讨论】:
如果这是您的全部代码,那么不,它不会做任何事情。您需要将代码闪存到控制器中,并且代码必须不仅仅是一个空的 while 块。 请显示您的整个代码,因为这不可能。此外,您确实必须刷新您的代码 【参考方案1】:试试这个,非常简单,将测试你的工具和将文件复制到板上的能力。我假设这是一个 NUCLEO 板。
.cpu cortex-m0
.thumb
.thumb_func
.global _start
_start:
stacktop: .word 0x20000100
.word reset
.word reset
.word reset
.word reset
.thumb_func
reset:
b .
构建
arm-none-eabi-as flash.s -o flash.o
arm-none-eabi-ld -Ttext=0x08000000 flash.o -o flash.elf
arm-none-eabi-objdump -D flash.elf > flash.list
arm-none-eabi-objcopy -O binary flash.elf flash.bin
检查构建
cat flash.list
Disassembly of section .text:
08000000 <_start>:
8000000: 20000100
8000004: 08000015
8000008: 08000015
800000c: 08000015
8000010: 08000015
08000014 <reset>:
8000014: e7fe b.n 8000014 <reset>
看起来不错,正是我们想要的。
现在复制命令行或将 flash.bin 拖放到插入 NUCLEO 板时安装的虚拟驱动器。它将把它加载到板上的目标单片机中。 STM32F446,应该重置它,你最终会进入这个循环,没有闪烁的用户指示灯。
当您制作更复杂的项目时,您只需在此基础上扩展一个引导程序、一个程序、链接(检查)并复制到虚拟闪存驱动器。
当我得到一个新的 NUCLEO 板时,我通常会进行调试端的固件升级(stlink 加拇指驱动器的东西)。 ST 提供了一个基于 Java 的工具,它本身并不经常更新,但它会检查板与我猜他们网站上的数据库,并可以升级你的闪存。根据您的主机操作系统,我有 NUCLEO,您只能复制几次或一次,您必须拔下并重新插入,更新的固件版本和更新的主板,问题几乎消失了。它会说设备上没有剩余空间,拔掉/重新插入就可以了。
还提供 stlink 功能,您可以使用 openocd 或其他工具来停止和检查设备,例如使用 openocd 当您 telnet 到 openocd 服务器时,您可以使用 mdw 0x08000000 20 并检查用户 flash 的启动以查看是否它与您认为已在设备上加载的二进制文件相匹配。根据部件的不同,您还可以通过 openocd 写入/擦除闪存,但不要假设所有 ST 或其他品牌部件始终支持。写入 ram 并从那里运行(不同的启动不是向量表)当然,但闪烁需要有人将每个部分或系列的支持添加到 openocd 中。
正如 cmets 中所指出的,要么您没有构建您所想的,要么您实际上并没有将程序加载到闪存中。检查二进制检查闪存以查看实际发生的情况(如果有的话)。以上应该避免所有成功的障碍,CMSIS,IDE工具,STMCubeMX等。一旦你能够成功,然后从两端(在这个简单的例子和你的项目之间)到中间,找到真正的问题是/曾经。例如,您应该能够使用 IDE 和所有这些东西来构建二进制文件,使用 gnu 工具检查该二进制文件,使用 hexdump/whatever 检查 .bin 文件,然后拖放到 IDE 之外进行编程。
【讨论】:
以上是关于刚买了 STM32F446 但 STM32IDE 没有达到我的预期的主要内容,如果未能解决你的问题,请参考以下文章
使用显示总线接口将 TFT 屏幕与 STM32F446 连接