• KEIL + STM32 续


    接上一篇,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包放在   Keil11ARMPACK

    然后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.0LibrariesSTM32F10x_StdPeriph_Driver中有两个文件夹inc和src,将这两个文件夹放入我们的FWLIB文件夹中,这就是我们后来用来编程的库文件。

    接下来将STM32F10x_StdPeriph_Lib_V3.5.0LibrariesCMSISCM3CoreSupport下的core_cm3.c  core_cm3.h 复制到我们的CORE文件下

    同样将STM32F10x_StdPeriph_Lib_V3.5.0LibrariesCMSISCM3DeviceSupportSTSTM32F10xstartuparm 下的startup_stm32f10x_md.s文件复制到CORE目录下,这里在startuparm下有许多类似的文件,这里需要根据不同的芯片来选择不同的文件。

    这里参考博客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.0LibrariesCMSISCM3DeviceSupportSTSTM32F10x下的stm32f10x.h,system_stm32f10x.c,system_stm32f10x.h复制到USER文件夹下,并将STM32F10x_StdPeriph_Lib_V3.5.0ProjectSTM32F10x_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

  • 相关阅读:
    怎么查看京东店铺的品牌ID
    PPT编辑的时候很卡,放映的时候不卡,咋回事?
    codevs 1702素数判定2
    codevs 2530大质数
    codevs 1488GangGang的烦恼
    codevs 2851 菜菜买气球
    hdu 5653 Bomber Man wants to bomb an Array
    poj 3661 Running
    poj 1651 Multiplication Puzzle
    hdu 2476 String Painter
  • 原文地址:https://www.cnblogs.com/lqerio/p/12556235.html
Copyright © 2020-2023  润新知