STM32复习笔记(一) —— 建立固件库工程模板
芯片型号: | STM32F407VET6 |
---|
MDK版本: | MDK 5.35.0.0 | 固件库版本: | STM32F4xx_DSP_StdPeriph_Lib_V1.8.0 |
1.建立文件夹用于存放源码
Libraries | 库文件 |
---|
Outputs | Output and Listing 文件 | Project | 工程文件 | Readme | Readme.txt | User | 用户编写的 inc and src 文件 |
2.向文件夹添加文件
Libraries | CMSIS and STM32F4xx_StdPeriph_Driver |
---|
User - inc | stm32f4xx_conf.h and stm32f4xx_i.h | User - src | main.c and stm32f4xx_it.c | Readme | Readme.txt | Outputs | 无 | Project | 无 |
3.主要文件夹展示 ![SSS1.001](https://img-blog.csdnimg.cn/4d86dbb54e2f43f7aaaedcefd189dfeb.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAU1NTJjEwJjAx,size_17,color_FFFFFF,t_70,g_se,x_16) 4.新建工程 新建工程 ![SSS1.002](https://img-blog.csdnimg.cn/1f36a8375a644fceb2480d9522636214.png) 保存工程并选择芯片型号 ![SSS1.003](https://img-blog.csdnimg.cn/59efad5464ba4460b910f2f43d79cb92.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAU1NTJjEwJjAx,size_17,color_FFFFFF,t_70,g_se,x_16) 关闭 Manage Run-Time Environment 对话框并右击 Target 1 选择 Manage Project Items … ![SSS1.004](https://img-blog.csdnimg.cn/bee2ea652952488cb785308cb29144af.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAU1NTJjEwJjAx,size_17,color_FFFFFF,t_70,g_se,x_16) 建立文件夹用于管理代码 ![SSS1.005](https://img-blog.csdnimg.cn/38241f705b984de3ad769c54e3989564.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAU1NTJjEwJjAx,size_17,color_FFFFFF,t_70,g_se,x_16) 向文件夹添加文件 ![SSS1.006](https://img-blog.csdnimg.cn/549a7cb44bea4756ac1c9b48924325ef.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAU1NTJjEwJjAx,size_17,color_FFFFFF,t_70,g_se,x_16) 分别右击选择 stm32f4xx_:dma2d.c fmc.c ltdc.c (STM32F407 无此功能) 执行以下步骤 ![SSS1.007](https://img-blog.csdnimg.cn/fc5e8f91a4ab4fd79d25443a960ee921.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAU1NTJjEwJjAx,size_17,color_FFFFFF,t_70,g_se,x_16) 取消 Include in Target Build (即不编译此文件) 选项并点击 OK ![SSS1.008](https://img-blog.csdnimg.cn/cd54aa0f395043ad97fe7ac76ef1a49c.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAU1NTJjEwJjAx,size_17,color_FFFFFF,t_70,g_se,x_16) 5.主要文件夹展示 ![SSS1.009](https://img-blog.csdnimg.cn/7e1e2e572178434abf21b9cbea3ed16f.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAU1NTJjEwJjAx,size_17,color_FFFFFF,t_70,g_se,x_16) ![SSS1.010](https://img-blog.csdnimg.cn/20e1287974e545f0ab40a7c1bb36ea1b.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAU1NTJjEwJjAx,size_17,color_FFFFFF,t_70,g_se,x_16) 6.文件路径 (自定义的存放路径)
STARTUP | …\Libraries\CMSIS\Device…\Source…\arm\ |
---|
CMSIS | …\Libraries\CMSIS\Device…\Source…\ | STM32F4xx_StdPeriph_Driver | …\Libraries\STM32F4xx_StdPeriph_Driver\src\ | USER | …\User\src\ |
7.配置 Options for Target … 选择 Use MicroLIB ![SSS1.011](https://img-blog.csdnimg.cn/d1ab392ec42d45a78b2b4e67dc5f2d46.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAU1NTJjEwJjAx,size_17,color_FFFFFF,t_70,g_se,x_16) 选择 Output 文件夹于Outputs - Objects 文件夹下 (Create HEX File 根据需求选择) ![SSS1.012](https://img-blog.csdnimg.cn/850fefd5a2a446e88b85c04ef22d8062.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAU1NTJjEwJjAx,size_17,color_FFFFFF,t_70,g_se,x_16) 选择 Listing 文件夹于Outputs -Listings 文件夹下 ![SSS1.013](https://img-blog.csdnimg.cn/be634dadd83b41dd939fed5a40a2247c.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAU1NTJjEwJjAx,size_17,color_FFFFFF,t_70,g_se,x_16) 添加宏定义 USE_STDPERIPH_DRIVER,STM32F40_41xxx
添加头文件路径 (根据自定义存放路径) ![SSS1.014](https://img-blog.csdnimg.cn/8058eaa7578b480c94b14d0384cebbd2.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAU1NTJjEwJjAx,size_17,color_FFFFFF,t_70,g_se,x_16) ![SSS1.015](https://img-blog.csdnimg.cn/1e577c0011ae4a8babbc281ee0ec23f9.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAU1NTJjEwJjAx,size_17,color_FFFFFF,t_70,g_se,x_16) 这里 Debug 先选择软件仿真 ![SSS1.016](https://img-blog.csdnimg.cn/ed6efe6960654c83a8bfc7f14f7bbf4e.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAU1NTJjEwJjAx,size_17,color_FFFFFF,t_70,g_se,x_16) 若 Debug 选择仿真器,将其连接芯片到电脑,选择匹配的选项 (或须先安装仿真器驱动) ![SSS1.017](https://img-blog.csdnimg.cn/bf1a70449d7543cea6d0d1cc4f312d37.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAU1NTJjEwJjAx,size_17,color_FFFFFF,t_70,g_se,x_16) 选择 Use Debug Driver ![SSS1.018](https://img-blog.csdnimg.cn/c83353ef92e247d7aa546cbc9c7f2c38.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAU1NTJjEwJjAx,size_18,color_FFFFFF,t_70,g_se,x_16) 配置 configuration options ![SSS1.019](https://img-blog.csdnimg.cn/627dc4a3af044cc7b9417f7ae6f0c8a5.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAU1NTJjEwJjAx,size_17,color_FFFFFF,t_70,g_se,x_16) 根据需求选择 Erase Full Chip or Erase Sectors 根据需求选择 Reset and Run,根据芯片内部 ROM (即 FLASH)选择 Programming Algorithm ![SSS1.020](https://img-blog.csdnimg.cn/c6cb2bcde0bd47a78a8b4f7c5518047f.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAU1NTJjEwJjAx,size_17,color_FFFFFF,t_70,g_se,x_16) 仿真器相关配置 (以 SW 接口为例,SW 接口勾选 SWJ,Max Clock 选择 5MHz) ![SSS1.021](https://img-blog.csdnimg.cn/6fa2c2613b42472ba2182fc3672d8e5e.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAU1NTJjEwJjAx,size_17,color_FFFFFF,t_70,g_se,x_16) ![SSS1.022](https://img-blog.csdnimg.cn/c1faec23da2440cdb419661561b02299.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAU1NTJjEwJjAx,size_17,color_FFFFFF,t_70,g_se,x_16) 至此,固件库工程模板配置完成
8.修改并编译文件 将 USER - stm32f4xx_it.c 中 #include “main.h” 去掉 (约第 32 行) 将 USER - stm32f4xx_it.c 中 TimingDelay_Decrement(); 去掉 (SysTick_Handler() 函数内部) 于 USER - main.c 中添加 main 函数,注意每个文件最后留出一行空行 ![SSS1.023](https://img-blog.csdnimg.cn/9a7be5f2fb1049099512bfca8526c5c0.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAU1NTJjEwJjAx,size_17,color_FFFFFF,t_70,g_se,x_16) 编译如遇不通过 ![SSS1.024](https://img-blog.csdnimg.cn/cac716fe19484e09b42500ea0e51c7d3.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAU1NTJjEwJjAx,size_17,color_FFFFFF,t_70,g_se,x_16) 打开 Options for Target …
查看 ARM Compiler 是否为 Use default compiler version 6 将其替换为 Use default compiler version 5
点击 OK 返回,重新编译 ![SSS1.025](https://img-blog.csdnimg.cn/2652a096c8dc4908b87b981648ff5de0.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAU1NTJjEwJjAx,size_17,color_FFFFFF,t_70,g_se,x_16) Use default compiler version 6 替换为 Use default compiler version 5 ![SSS1.026](https://img-blog.csdnimg.cn/a133876ea7434bf586e2b390cf94532d.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAU1NTJjEwJjAx,size_17,color_FFFFFF,t_70,g_se,x_16) 重新编译 ![SSS1.027](https://img-blog.csdnimg.cn/cca7a0df21cb4051aca223d0275327fa.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAU1NTJjEwJjAx,size_17,color_FFFFFF,t_70,g_se,x_16) 9.程序下载 (点击 Download 下载) ![SSS1.028](https://img-blog.csdnimg.cn/91322bf393454e2bb2f29bdda090739e.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAU1NTJjEwJjAx,size_18,color_FFFFFF,t_70,g_se,x_16) Program Size: Code=500 RO-data=408 RW-data=0 ZI-data=1024
Code | 程序代码 |
---|
RO-data | 常量 | RW-data | 初值非0的全局变量 | ZI-data | 初值为0的全局变量 and 局部变量(栈) and 使用 malloc 动态分配的空间(堆) |
STM32 内部 ROM (即 FLASH) 占用空间 | Code + RO-data + RW-data |
---|
STM32 内部 SRAM 占用空间 | RW-data + ZI-data |
至此,固件库工程模板建立完成
|