接上一篇,debug出现问题

1.手动安装STM32 芯片包   Keil.STM32F1xx_DFP.2.2.0.pack;

https://www.keil.com/dd2/Pack/

百度网盘 https://pan.baidu.com/s/1nD-jm2Z81eRlJUpExQB1sQ?errno=0&errmsg=Auth%20Login%20Sucess&&bduss=&ssnerror=0&traceid=

将下载的pack包放在   Keil11\ARM\PACK

然后pack  installer   -> file ->import  刚刚的pack

应该是keil 版本太低...

先卸载511

然后安装 keil 5.18  (软件管家 搜索keil)

然后按照上面安装 STM32F10X的pack

2.然后创建工程

2.1 新的方法创建工程

这里我看到不用模板创建工程的方法,试了一下。参考https://blog.csdn.net/u010973249/article/details/52818753

第一步:新建工程

新建一个工程并选择器件的型号,我选择STM32F103C8

第二步:新建几个文件夹

这步不是必须的,但是可以使工程的结构比较清晰一些,否则几十个文件混杂在一起非常乱,按照我看的教程,在工程的文件夹下再新建三个新的文件夹,CORE、FWLIB、USER文件夹,CORE文件夹用来放启动文件,USER文件夹用来放main文件和其他一些,FWLIB用来放库文件

第三步:准备stm32的固件库

我用的是STM32F10x_StdPeriph_Lib_V3.5.0这个库,在官网中可以下载到各种型号的库

http://www.st.com/en/embedded-software/stm32-standard-peripheral-libraries.html?querycriteria=productId=LN1939

这里我上一篇博客也有地址: https://www.st.com/en/embedded-software/stm32-standard-peripheral-libraries.html

第四步:放置各种文件

在下载了固件库后,需要将固件库中的各种文件放入我们的工程中

首先,将STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\STM32F10x_StdPeriph_Driver\中有两个文件夹inc和src,将这两个文件夹放入我们的FWLIB文件夹中,这就是我们后来用来编程的库文件。

接下来将STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\CoreSupport\下的core_cm3.c  core_cm3.h 复制到我们的CORE文件下

同样将STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm 下的startup_stm32f10x_md.s文件复制到CORE目录下,这里在\startup\arm\下有许多类似的文件,这里需要根据不同的芯片来选择不同的文件。

这里参考博客http://blog.csdn.net/gasbi/article/details/7545568 写的,不同文件对应的型号

startup_stm32f10x_cl.s 互联型的器件,STM32F105xx,STM32F107xx
startup_stm32f10x_hd.s 大容量的STM32F101xx,STM32F102xx,STM32F103xx
startup_stm32f10x_hd_vl.s 大容量的STM32F100xx
startup_stm32f10x_ld.s 小容量的STM32F101xx,STM32F102xx,STM32F103xx
startup_stm32f10x_ld_vl.s 小容量的STM32F100xx
startup_stm32f10x_md.s 中容量的STM32F101xx,STM32F102xx,STM32F103xx
startup_stm32f10x_md_vl.s 中容量的STM32F100xx
startup_stm32f10x_xl.s FLASH在512K到1024K字节的STM32F101xx,STM32F102xx,STM32F103xx

再根据

根据芯片的flash大小选择自己的文件,不同芯片的具体数值都可以在官网上查到

http://www.st.com/content/st_com/en/products/microcontrollers/stm32-32-bit-arm-cortex-mcus/stm32f1-series.html?querycriteria=productId=SS1031

这里我上面选的STM32F103C8,然后这里用了startup_stm32f10x_md.s

接下来将STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x下的stm32f10x.h,system_stm32f10x.c,system_stm32f10x.h复制到USER文件夹下,并将STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Template下的 stm32f10x_conf.h, stm32f10x_it.c, stm32f10x_it.h文件复制到USER文件夹下,接着在USER文件夹下创建一个main.c,这就是我们的主文件了。

接下来点击manage project item,添加3个Group,在USER中添加  main.c stm32f10x_it.c system_stm32f10x.c,在CORE中添加startup_stm32f10x_md.s(不同型号不同),core_cm3.c,FWLIB中将FWLIB中src中的文件都加进来(可选)

添加完成后的工程:

第五步:添加头文件的路径

option-----》c/c++--------》include path 中加入我们三个文件夹的路径,FWLIB的路径要定位到inc文件才行。

下面这里,如果刚刚创建的FWLIB,就直接FWLIB

第六步:在刚才的c/c++下面的Define中填入 STM32F10X_MD(不同器件不同),USE_STDPERIPH_DRIVER,这相当于添加了两个宏

第四步选了stm32f10x_md.s,所以填 STM32F10X_MD(?)

第七步:编写main函数:

#include "stm32f10x.h"

int main(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOC,&GPIO_InitStructure);
GPIO_ResetBits(GPIOC,GPIO_Pin_13);
while (1)
{
}
}

这里简单的实现了stm32板上的一个led的点亮

第八步:编译

这里点击左上角的按钮

没任何问题的话,就不会报错了

2.2debug

上面编译完debug出错

参考https://blog.csdn.net/qlexcel/article/details/54949093

点击project,选项卡debug使用 simulator

2.3 使用上一篇博客介绍的template

https://www.cnblogs.com/lqerio/p/12514261.html

打开template工程提示

参考 https://blog.csdn.net/qq_38410730/article/details/79742065

选择第二种方式安装Legacy support for ARM Cortex-M devices。

MDK Version 5 uses Software Packs to support a microcontroller device and to use middleware. To maintain backward compatibility with MDK Version 4 you may install Legacy Support. This might be necessary for two reasons:

To maintain projects created with MDK Version 4 without migrating to Software Packs.
To use older devices that are not supported by a Device Family Pack.

下载地址 注意我安装的是mdk518,所以选择下面的518版本

http://www2.keil.com/mdk5/legacy/

下载完成后复制到MDK安装目录安装

再打开项目选择

2.4 2.2 中debug参考的博客内容,贴在这里

开始仿真之前,先配置一些选项。

1.在工程设置里设置好芯片型号和晶振频率。

2.在“Debug”选项卡中选择“Use Simulator”,表示使用软件仿真;选择“Run to main()”则表示跳过汇编代码,直接跳转到main函数开始仿真。设置下面的“Dialog DLL”项为“DARMSTM.DLL”和“TARMSTM.DLL”;parameter项为“-pSTM32F103C8”,用于设置支持STM32F103C8的软硬件仿真。

3.点击开始仿真,这个时候会多出来一个工具条,就是Debug工具条。

1:复位,其功能等同于硬件上按复位按钮,相当于实现了一次硬复位。按下该按钮后,代码会重新从头开始执行。

2:执行到断点处,按按钮用来快速执行到断点处,有时候并不需要观看每步时怎么执行的,而是想快速执行到程序的某个地方看结果,这个按钮就可以实现这样的功能,前提是已在查看的地方设置了断点。

3:停止运行,此按钮在程序一直执行的时候变为有效,可以使程序停止下来进入到单步调试状态。

4:执行进去,该按钮用来实现执行到某个函数里面去的功能,在没有函数的情况下等同于执行过去按钮。

5:执行过去,在碰到有函数的地方,通过该按钮就可以单步执行过这个函数,而不进入这个函数单步执行。

6:执行出去,该按钮是进入了函数单步调试的时候,有时候可能不必再执行该函数的剩余部分了,通过该按钮就直接一步执行完函数余下的部分,并跳出函数回到函数被调用的位置。

7:执行到光标处:该按钮可以迅速使程序运行到光标处,与执行到断点处按钮功能类似。

8:汇编窗口,通过该按钮可以查看汇编代码,这对分析程序很有用。

9:堆栈局部变量窗口,通过该按钮可以显示Call Stack+Locals窗口,显示当前函数的局部变量及其值,方便查看。

10:观察窗口,MDK5提供2个观察窗口(下拉选择),该按钮按下则弹出一个显示变量的窗口。输入想观察的变量或表达式,即可查看其值,是很常用的调试窗口。

11:内存查看窗口,MDK5提供4个内存查看窗口,按下按钮,则弹出一个内存查看窗口,可以在里面输入要查看的内存地址,然后观察这一片内存的变化情况。

12:串口打印窗口,MDK5提供4个串口打印窗口。按下该按钮,则弹出一个类似串口调试助手界面的窗口,用来显示从串口打印出来的内容。

13:逻辑分析窗口,该图标下面有3个选项,一般用第一个,也就是逻辑分析窗口。通过SETUP按钮新建一些IO口,于是可以观察这些IO的电平变化情况,并以多种形式显示出来,比较直观。

14:系统查看窗口,该按钮可以提供各种外设寄存器的查看窗口(通过下拉选择),选择对应外设即可调出该外设的相关寄存器表,并显示这些寄存器的值,方便查看设置是否正确。

二、硬件仿真

硬件仿真则是程序下载到单片机中,进行的仿真,是程序实际在单片机中运行的情况。

需要选择后面那个选项,然后在下拉单里选择自己的仿真器。然后后面步骤和软件仿真一样。

注:要在逻辑硬件仿真里使用逻辑分析仪之类的工具,要开“Trace”

————————————————
版权声明:本文为CSDN博主「qlexcel」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qlexcel/article/details/54949093

KEIL + STM32 续的更多相关文章

  1. 【转】keil+stm32+jlink利用swd方式进行printf输出

    出处:http://www.douban.com/note/248637026/ ----------------------------------------------------------- ...

  2. Keil STM32调试,使用ST-Link下载程序时提示“flash timeout.reset the target and try it again”

    参考: 很郁闷,买来没多久的 STM32F4-DISCOVERY 就挂了? STM32F103RB   Jlink调试的时候出现flash timeout.reset the target and t ...

  3. Keil stm32 printf到Debug窗口

    使用JlinkV8+Keil41.在main.c输入以下代码 #include <stdio.h> #define ITM_Port8(n) (*((volatile unsigned c ...

  4. 结构体 内存对齐 keil & STM32

    直接 上图 不废话: 第二张图:  把16位 类型的数据 换成 数组 ,这样 达到 节约内存和  方便处理  缓冲区数据

  5. keil中出现Undefined symbol FLASH_PrefetchBufferCmd (referred from main.o)等问题解决办法

    在keil中仿照别人的程序写了RCC初始化的程序,编译后出现以下问题 .\obj\pro1.axf: Error: L6218E: Undefined symbol FLASH_PrefetchBuf ...

  6. 甲骨文推动Java进军“物联网”

    该公司希望在嵌入式设备开发项目上Java可以取代C     随着周二宣布对嵌入式的Java版本进行升级,甲骨文希望扩展该平台到新一代连接设备,又名物联网.甲骨文还希望,Java可以在一些嵌入式开发项目 ...

  7. 使用keil建立标准STM32工程模版(图文详细版!)

    1.   模板工程的创建(超级详细版,使用的是keil 4.5版本) 1.1创建工程目录 良好的工程结构能让文件的管理更科学,让开发更容易更方便,希望大家养成良好的习惯,使用具有合理结构的工程目录,当 ...

  8. FreeModbus for stm32(Keil工程)——精简Modbus slave协议【worlsing笔记】

    FreeModbus For stm32:点击下载源码 1.测试环境Keil MDK 4.7a  stm32f103c8, PB12为输出线圈,    可以通过Modbus Poll来控制线圈的输出状 ...

  9. Keil uCos 2.52 stm32 【worldsing笔记】

    1.uCOSii V2.52    a.加了7个可以配置的钩子函数宏     #define OS_TASK_CREATE_HOOK_EN    0    /* 任务创建时调用钩子函数      使能 ...

随机推荐

  1. dubbo快速入门demo

    参考文章 https://blog.csdn.net/abcwanglinyong/article/details/81906027 该demo包含三个项目,分别是: 服务提供端项目:provider ...

  2. 词嵌入之Word2Vec

    词嵌入要解决什么问题 在自然语言系统中,词被看作最为基本的单元,如何将词进行向量化表示是一个很基本的问题,词嵌入(word embedding)就是把词映射为低维实数域向量的技术. 下面先介绍几种词的 ...

  3. Linux内核[CVE-2016-5195] (dirty COW)原理分析

    [原创]Linux内核[CVE-2016-5195] (dirty COW)原理分析-二进制漏洞-看雪论坛-安全社区|安全招聘|bbs.pediy.com https://bbs.pediy.com/ ...

  4. 大型 web 前端架构设计-面向抽象编程入门

    https://mp.weixin.qq.com/s/GG6AtBz6KgNwplpaNXfggQ 大型 web 前端架构设计-面向抽象编程入门 曾探 腾讯技术工程 2021-01-04   依赖反转 ...

  5. The Go Blog Getting to Go: The Journey of Go's Garbage Collector

    Getting to Go: The Journey of Go's Garbage Collector https://blog.golang.org/ismmkeynote

  6. 【算法】深度优先搜索(dfs)

    突然发现机房里有很多人不会暴搜(dfs),所以写一篇他们能听得懂的博客(大概?) PS:万能 yuechi ---- 大法师怎么能不会呢?! 若有错误,请 dalao 指出. 前置 我知道即使很多人都 ...

  7. XV6学习(9)Lab cow: Copy-on-write fork

    代码在github上.总体来说如果理解了COW机制的话,这个实验的完成也没有很复杂. 这一个实验是要完成COW(copy on write)fork.在原始的XV6中,fork函数是通过直接对进程的地 ...

  8. Windows VS Code 配置 Java 开发环境

    Windows VS Code 配置 C/C++ 开发环境 准备 Windows [这个相信大家都有 笑: )] VS Code JDK 建议 JDK8以上(不包含JDK8,关于 Windows环境下 ...

  9. 分布式缓存 — redis

    redis是一种支持Key-Value等多种数据结构的存储系统.可用于缓存,事件发布或订阅,高速队列等场景.该数据库使用ANSI C语言编写,支持网络,提供字符串,哈希,列表,队列,集合结构直接存取, ...

  10. Linux下部署tp5项目如何隐藏URL中index.php

    找到nginx配置文件,加入以下代码: location / { if (!-e $request_filename){ rewrite ^/(.*)$ /index.php?s=/$1 last; ...