STM32学习笔记(2)——熟悉工作环境

  首先你要熟悉你的开发板由哪几个部分组成,如何使用你的开发板。我使用微雪的F429的开发板,这是一块由母板和最小系统板构成的开发板:(受疫情原因,手上几块正点原子的开发板无法展示出来,只能拿这块板子了,这块板子严格意义上来说不算一块好的开发板)

  要使用开发板就得知道开发板的供电接口和下载接口,这块微雪的板子左上角DC 5V就是供电接口,最小系统板上20Pin的JTAG口就是下载接口,通过这两个接口,开发板才能按照开发者的意愿运转起来。

  接着讲如何新建一个STM32的软件工程,打开STM32CubeMX软件,选择New Project,在弹出的搜索框里输入你的芯片型号,这里以F429IGT6为例:

     

 在以下界面选择好下载方式:

  接着配置好工程的一些细节:

   注意:路径、名称不要有特殊符号或者中文等出现。

  还有一些细节:

   勾选这两个有助于减少工程体积以及模块化编程。

  最后生成代码即可:

  

  可以看到对应的文件夹内已经生成了Project01:

  进入工程目录:

  inc是存放头文件(head file)的目录,系统自动生成的头文件都在inc中,用户后期自己的头文件也可以放在inc中(当然也可以不)。

  src是存放源文件(source file)的目录 ,系统自动生成的源文件都在src中;

  MDK-ARM存放有keil工程文件,在这个里面打开keil工程文件来打开整个工程:

  

  keil打开后如图显示:

  首先关注project区:这个区域显示的是工程里的代码文件,Project01中有四个目录,其中的三个目录都是驱动代码,即不用看系列,对于这个Project01工程我们只用看Application/User这个目录下main.c:

   打开main.c可以看到里面生成了许多代码,并且标注有许多注释,开头的一大串版权声明、免责声明不用看系列。接着往下看,会发现这个注释十分的有规律:首先注释了includes,即头文件,然后添加了gpio.h和main.h。接着注释了private includes,然后是USER CODE BEGIN includes 和USER CODE END includes,翻译过来就是私有头文件,用户私有头文件定义代码开始,用户私有头文件定义代码结束。根据这个注释我们就可以知道,我们如果要在main.c中添加头文件就需要写在USER CODE BEGIN includes和USER CODE END includes这两个注释之间。接下来还有结构体定义,预定义,宏定义,变量定义等等。从这里就可以看得出来生成的代码是按照模块化思维来的,因此在编写程序的时候,需要按照ST的注释来写,即相应代码写在相应代码区间中。如果没有按照注释来写,分为两种情况:第一种恰好写在了上一个END和下一个BEGIN之间,那么下次使用CubeMX生成代码时,写错位置的代码将会被清除,这种情况常常出现在新手调试程序的时候随手一写,然后出现BUG,最后重生成代码,越生成BUG越离谱;第二种,写错不同类别的,比如将头文件声明写在了结构体定义的区间里,这样子不会出现第一种的问题,但是从习惯上来说建议写在对应区间中,这是对代码风格的一种磨砺。

  常需要了解的代码区间有:

  USED CODE 2 : 这个区间通常书写用户的初始化代码;

  USER CODE 3 : 这个区间是While大循环中的代码;

  USER CODE 4  :这个区间通常书写中断回调函数代码。

  以上就是对工程的一个大致了解,完成这些之后就开始编译工程吧:

  编译区有三个按钮从左往右依次为:转译、编译、重编译。

  转译就是将代码转化为汇编,这一步骤会检查代码的语法错误,如果代码能够通过,转译就不会报错,并且相应的汇编代码会生成但是不会生成可执行文件,在仿真时常常使用转译;

  编译就是只编译工程中上次修改的文件及其它依赖于这些修改过的文件的模块,同时重新链接生成可执行文件。如果是一个新工程,第一次编译操作就是重编译;

  重编译,将所有文件都编译一遍并且生成可执行文件。重编译的耗时比编译要长,尤其是使用CubeMX生成的代码,因此在需要反复修改代码并且下载调试的时候千万不要点错成重编译了。

  然后调整下载设置:

  

   默认生成的工程下载器为ST-Link,如果使用的是Jlink 或者Jlink OB则需要修改下载器。

  连接上下载器与开发板后点击Setting,修改下载配置:

  这个窗口显示了下载器以及芯片的信息,左边是下载器的SN码,注意Project配置的是SWD下载模式,因此下载端口也要配置为SW。右边的是芯片的序列号。如果连接正确设备正常就应该如上图显示一样,通常缺少芯片的序列号可能是芯片损毁或者下载器SWD接线不良。

  设置一下下载后自动复位,如果不设置每次下载完成后需要手动复位,不然运行的依旧是老程序,有的时候以为修改的代码没有效果可能是复位原因造成的:

   然后点击下载:

   出现左下角字样证明下载成功。完成到这里你已经掌握了STM32最基本的开发手段,但是别着急,要走的路还长着呢。

  

 

猜你喜欢

转载自www.cnblogs.com/Wishengine/p/12670883.html