环境

Keil是一款强大的Debug软件,尤其适用于stm32还有其他一系列32、8系的处理器标准库、寄存器开发。但是少有的缺点是从头新建一个工程配置需要的步骤和细节也比较多,日子长了脑袋也不好使,每次都要查几次,就有了这篇文章作为参考记录;更换stm系列芯片例程也可以参考这篇文章。

环境:

  • Win10
  • Keil MDK 5/Keil MDK+C51 5
  • stm32f103c8t6
  • ST-Link

后两者不是必须,相应调整部分内容即可。

新建工程

  1. 新建一个文件夹,Project项新建项目指定该文件夹,然后会进入芯片选型;芯片选型来自在线下载(弹窗)或者手动导入(厂商提供的工具包);这里选择对应的芯片信号即可,OK完成创建;

  2. 在文件夹下可以看到新建的工程文件,创建新文件夹Start,存放stm32系统启动文件,包含:

  • core_cm3.c/core_cm3.h:提供了Cortex-M3内核的相关函数,例如中断、异常处理;

  • startup_stm32f10x_md.s:汇编语言编写的启动文件,设置堆栈指针、数据段等,后缀md代表中密度型号,(Medium-density),还有一些hd、ld、xl等后缀,主要是按Flash容量划分,不同的芯片对应不同,性能有所差异,用到查一下即可;

  • stm32f10x.h:描述了stm32f10x芯片的外设寄存器地址的映射关系;

  • system_stm32f10x.c/system_stm32f10x.h:系统时钟配置和初始化相关,例如设置PLL、总线时钟(72M)主频等;

    这些文件要么来自例程,要么来自官方ST库,强制不让用户修改;

  1. 新建User文件夹,创建main.c函数,包含头文件,同时在魔术棒——C/C++的Include Path一栏添加包含StartUser头文件;

    1
    2
    3
    4
    #include "stm32f10x.h"
    int main(void){
    while(1);
    }

    至此,编译就可以通过了,此时可以阅读数据手册进行寄存器层面的开发,但是要使用标准库,还需要以下步骤,所谓标准库是ST官方将寄存器配置都封装成了函数,因此初始化时钟、SPI、I2C、DMA、中断、定时器等等直接调用函数即可,无需从寄存器层面考虑。

  2. 新建Library文件夹,复制库函数的头文件和源文件,还是要么来自ST官方/例程;这些文件是最常查阅的文件,当调用定时器、中断、串口等特性时,就需要在这里查找相关的函数;这些文件强制不能修改; Library库文件

  3. User目录添加三个文件,这三个函数很少被修改,但是是可以根据用户修改的,因此我们放在User

  • stm32f10x_it.c/stm32f10x_it.h:定义了各种中断的处理函数,当程序发生了特定的中断事件会跳转至这些函数执行;

  • stm32f10x_conf.hstm32f10x的配置头文件,例如头文件包含、参数检查等;

  1. 此时编译发现是不通过的,因为对于stm32f103c8stm32f10x_conf.h文件是一个条件编译,查看stm32f10x.h,大概8296行会出现:

    1
    2
    3
    #ifdef USE_STDPERIPH_DRIVER
    #include "stm32f10x_conf.h"
    #endif

     因此要define这个`USE_STDPERIPH_DRIVER`,点击魔术棒——C/C++——Define添加USE_STDPERIPH_DRIVER;不同的芯片这个地方也要对应修改,具体参照例程即可。
    
     至此,一个完整的stm32程序就创建成功了,点击编译即可通过。
  2. DownLoad:将程序下载到单片机,取决于你的下载器类型,通过魔术棒——Debug右栏的USE可以选择,比较常用的有ULink、ST-Link和J-Link,查看手册或者咨询卖家即可,为了方便,往往我们需要复位再下载程序,Keil5提供了这个选项,在下载器选项旁边的SettingsFlash Download勾选Reset and Run即可;其他下载方法通过一些串口下载工具(如FlyMcu)也可;

  3. 字体、自动补全、编码:扳手——Colors&Fonts——C/C++ Editor files改变Text大小;Text Completion设置自动补全相关。经常有的工程是中文注释,ANSI下虽然显示是正常的,但是复制到粘贴板可能就成为乱码了,可以尝试Chinese GB2312编码。

至此,完整的配置基本已经描述完了,祝开发顺利~~