while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
我安装了STMCubeMX并构建了一个STM32IDE项目
在 IDE 中,我使用以下方法成功构建了项目:项目 -> 全部构建
我希望看到默认导致停止闪烁,因为我的 while 循环完全空白,但它仍然疯狂闪烁。
尝试一下,非常少,将测试您的工具和将文件复制到板的能力。 我假设这是一个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
检查构建
猫闪光灯列表
Disassembly of section .text:
08000000 <_start>:
8000000: 20000100
8000004: 08000015
8000008: 08000015
800000c: 08000015
8000010: 08000015
08000014 <reset>:
8000014: e7fe b.n 8000014 <reset>
看起来不错正是我们想要的。
现在,将命令行或拖放闪存.bin复制到插入 NUCLEO 板时安装的虚拟驱动器。 它会将其加载到板上的目标 MCU 中。 STM32F446,应该重置它,你最终将进入这个循环,没有闪烁的用户领导。
当您制作更复杂的项目时,您只需扩展引导程序,程序,链接(,选中(并复制到虚拟闪存驱动器。
我通常会在获得新的 NUCLEO 板时对调试端进行固件升级(stlink 加拇指驱动器(。 意法半导体提供了一个基于Java的工具,它本身不会经常更新,但它检查开发板与我猜是他们站点上的数据库,并可以升级您的闪存。 根据您的主机操作系统,我有 NUCLEOs,您只能复制到几次或一次,您必须拔下并重新插入,这些和更新的主板的较新固件版本问题几乎已经消失了。 它会说设备上没有空间,拔下/重新插入就可以了。
此外,还提供 stlink 功能,您可以使用 openocd 或其他工具来停止和检查设备,例如,当您远程登录到 openocd 服务器时,您可以使用 mdw 0x08000000 20 并检查用户闪存的启动,以查看它是否与您认为已在设备上加载的二进制文件匹配。 根据部件的不同,您还可以通过openocd写入/擦除闪存,但不要假设所有ST或其他品牌部件始终支持。 写入 ram 并从那里运行(不同的启动而不是矢量表(,但闪烁需要有人将每个部分或系列的支持添加到 openocd 中。
正如评论中指出的那样,您要么没有构建您的想法,要么您实际上没有将程序加载到闪存中。 检查二进制检查闪存以查看实际发生了什么(如果有的话(。 以上应该避免所有成功的障碍,CMSIS,IDE工具,STMCubeMX等。 一旦你能够成功,然后从两端(在这个微不足道的例子和你的项目之间(努力到中间,找到真正的问题在哪里。 例如,您应该能够使用 IDE 和所有这些东西来构建二进制文件,使用 gnu 工具来检查该二进制文件,使用 hexdump/any 检查.bin文件,然后拖放到 IDE 之外进行编程。