目录
前言
一、新建工程
二、ISP串口程序下载
三、LINK程序下载与在线调试
3.1 程序下载
3.2 在线调试
该文档主要讲解内容有:
找到刚才建立的工程文件种的USER文件,选中并保存:
这里本人使用的信号型号为:STM32F407ZGT6,找到点击ok选择即可。
如果没有找到相应的芯片请安装支持包:安装Keil.STM32F4xx_DFP.1.0.8.pack 资源链接:
keil软件STM32系列芯片支持包-嵌入式文档类资源-CSDN下载请按如下顺序安装:1,安装mdk_514.exe2,安装Keil.STM32F4xx_DF更多下载资源、学习资料请访问CSDN下载频道.https://download.csdn.net/download/ARM_qiao/85498259
这里会提示你是否添加功能组件,由于这里是建立工程,先不需要添加直接关闭即可。
关于启动文件详细介绍推荐大家看一下链接里的介绍,非常细致极力推荐:
STM32启动文件详解 | 技术部落
启动代码是一段和硬件相关的汇编代码,主要作用:1、堆栈(SP)初始化;2、初始化程序计数器(PC);3、设置向量表异常事件的入口地址;4、调用函数main函数。
ST公司对于STM32F40X和STM32F41X系列统一使用:startup_stm32f40_41xxx.s启动文件。
由于使用STM32F407ZGT6开发板因此上述启动文件正常使用,但是需要对启动文件做一下修改,这里将寄存器版本代码用不到的代码屏蔽掉,主要是Reset_Handler函数修改。
Reset_Handler PROC
EXPORT Reset_Handler [WEAK]
;IMPORT SystemInit ;寄存器代码,不需要在这里调用 SystemInit 函数,
;故屏蔽掉,库函数版本代码,可以留下
;不过需要在外部实现 SystemInit 函数,否则会报错.
IMPORT __main
LDR R0, =0xE000ED88 ;使能浮点运算 CP10,CP11
LDR R1,[R0]
ORR R1,R1,#(0xF << 20)
STR R1,[R0]
;LDR R0, =SystemInit ;寄存器代码,未用到,屏蔽
;BLX R0 ;寄存器代码,未用到,屏蔽
LDR R0, =__main
BX R0
ENDP
上述代码:
1、开启了STM32F4硬件FPU的代码,以使能浮点运算单元。其中0xE000ED88就是协处理器控制寄存器(CPACR),该寄存器第20~23位用来控制是否支持浮点运算,这里全部设置为1。
2、由于使用的是寄存器版本的代码,这里屏蔽了SystemInit函数。
由于使能了FPU,在MDK里也需要对FPU进行设置,否则代码无法运行,设置方式:打开Options for Target,如图进行设置
由于开发板上晶振为8MHz所以这里将其改为8
将启动文件startup_stm32f40_41xxx.s启动文件拷贝到刚刚新建立的USER文件里面。
1、目标编译,只编译打开的文件;2、全部编译,编译整个工程文件(事件较长)
在USER文件种MDK5会自动生成2个文件,用来存放MDK编译过程中产生的文件,在正点原子中会建立OBJ 文件夹单独存放,这里我们不对其进行调整,仅给出调整方式。
将系统代码(即 SYSTEM 文件夹,该文件夹由 ALIENTEK 提供,可以在光盘任何一个实例的工程目录下找到,不过不要拷贝错了!不要把库函数代码的系统文件夹拷贝到寄存器代码里面用,反之亦然!这些代码在任何 STM32F40x/STM32F41x 的芯片上都是通用的,可以用于快速构建自己的工程,后面会有详细介绍)
MDK中添加相关文件
还需要再USER目录下添加main函数文件,test.c文件。
建立完成后双击1,可以添加建立的test.c文件。
再编写test.c文件后会发现有错误,这是由于还没有添加.c的头文件.h文件
添加完成后重新进行代码编译,如果代码编译出现错误提示:..\SYSTEM\usart\usart.c(38): error: #260-D: explicit type is missing ("int" assumed)
双击打开定位到38行,这里由于形参为int,且没有返回值,所以添加一个void即可。
再使用串口下载之前需要再电脑上安装串口驱动:CH340G,链接后任务管理可进行查看。
在安装好USB串口驱动后,打开串口下载软件FlyMcu,该软件是 mcuisp 的升级版本(flymcu 新增对 STM32F4 的支持),由 ALIENTEK提供部分赞助,mcuisp 作者开发,该软件可以在 www.mcuisp.com 免费下载。
在介绍一建下载之前首先介绍一下STM32的三种启动方式:
[Skill] STM32的启动方式、启动文件、程序下载方式和下载电路——深度解读(全网最全最详细)_追逐者-桥的博客-CSDN博客深度解读启动方式及启动文件https://blog.csdn.net/ARM_qiao/article/details/125049804由于使用传统串口方式下载需要调整BOOT[1:0]的状态,比较繁琐。所以采用了一键下载电路。
一键下载电路利用了串口的DTR和RTS信号,分别控制STM32的复位和B0,配合串口上位机软件FlyMcu,设置:DTR的低电平复位,RTS高电平进入BootLoader,这样,B0和STM32的复位,完全可以由下载软件自动控制,从而实现一键下载。
说明程序已经下载到板卡内,且正常运行
由于串口只能实现下载程序功能,而不能实现跟踪调试,而调试工具,JLINK/ULINK/STLNK等实现程序的跟踪。SWD下载调试仅需要占用两条IO口
本人使用的是STLINK进行在线调试。
上图中我们还勾选了 Run to main(),该选项选中后,只要点击仿真就会直接运行到 main 函数,如果没选择这个选项,则会先执行 startup_stm32f40_41xxx.s 文件的 Reset_Handler,再跳到main 函数。
使用SWD接口方式,右边已经显示检查到SWDIO接口
重新编译后直接点击下载按钮就可以了
下载完成
MCU内部已经被下入程序,接下来可以点击(开始/暂停仿真按钮)进行在线仿真。,点击
后出现仿真界面,其中上面由调试的工具条:
该文档到这里就结束了主要讲了如何建立工程、下载程序和程序的在线调试