目录
前言
介绍一下单片机开发软件Keil的基本使用,以STM32f4固件库为基础创建工程模板
一、开发环境搭建
1.1 Keil的安装
下载链接:https://download.youkuaiyun.com/download/weixin_44567668/85561379
选择安装路径,其余默认即可,具体可以参考百度,安装包在附件
注意:汉化会导致部分功能设置不显示
不同芯片加载包不一样,官网http://www.keil.com/dd2/pack下载 Keil.STM32F4xx_DFP.1.0.8,双击打开安装stm32,或者附件下载
1.2 其他工具安装
下载链接:https://download.youkuaiyun.com/download/weixin_44567668/88503033
- CH340串口驱动安装
安装方法:直接点击安装(安装失败见readme),提示预安装成功即安装成功
作用:安装了串口驱动后,电脑就能识别串口 - 串口程序下载工具mcuisp(FlyMcu)
作用:可以将.hex格式程序通过串口下载到板子里 - 串口调试助手XCOM
作用:可以通过串口收发数据 - STLINK驱动安装
作用:可以在windows下配合MDK进行程序下载和调试。
1.3 官方固件库
下载链接:https://download.youkuaiyun.com/download/weixin_44567668/88633544
二、新建工程
2.1 文件移植
- 在磁盘新建文件夹Template,在其中创建包含Driver, Middlewares,Projects, User子文件夹
- Driver:存放驱动文件,如BSP、CMSIS等
- Middlewares:存放中间件,如RTOS、GUI等
- Projects:存放Keil工程文件,及编译链接文件等
- User:存放用户文件,即应用层文件
- readme.txt:说明文件
-
将官方库文件目录STM32F4xx_DSP_StdPeriph_Lib_V1.4.0\Libraries里的CMSIS和STM32F4xx_StdPeriph_Driver文件夹复制到Driver文件夹里,然后再新建BSP文件夹,如下:
-
User文件添加
将官方库目录Project\STM32F4xx_StdPeriph_Templates里的stm32f4xx_it.c、stm32f4xx_it.h、stm32f4xx_conf.h这3个文件复制过来,然后再新建inc和src两个文件夹
2.2 创建项目
-
工程创建
打开Keil,点击Project ->New Uvision Project
工程命名为Template,保存路径为上面建立的Projects文件夹里
在对话框里Device->STM32F407ZG(选择对应芯片型号),之后点击OK,然后弹出对话框Manage Run-Time Environment点击OK
-
项目管理
右击Target1->Manage Project Items打开项目管理
在Project Targets里将Target改名为Template,在Groups里删掉Source Group1,建立Startup,User,Fwlib,Driver分组
选择FWLIB,点击ADD Files
选择之前添加的的Template\FWLIB\STM32F4xx_StdPeriph_Driver\src,对.c源文件全选Ctrl+A,Add后点击Close(可以选择添加我们需要的库文件)
注意:不要添加stm32f4xx_fmc.c
,否则会报错
同样在Startup里添加startup_stm32f40_41xxx.s、system_stm32f4xx.c(在工程文件夹Template\Drivers\CMSIS\Device\ST\STM32F4xx\Source\Templates\arm里), 在User里添加的文件stm32f4xx_it.c,完成后点击OK,如下
2.3 选项配置
对项目右击,点击Options for…打开选项配置
-
设置编译存放路径
Options->Output,Select选择编译输出文件(这里默认)
勾选Create HEX File,这样就可以在编译后生成.hex文件,可以用来烧录,勾选Browse Information就可以在编译后使用go to definition
-
C/C++设置
在Define添加全局定义标识符
STM32F40_41xxx,USE_STDPERIPH_DRIVER
在Include Paths里添加.h头文件存放路径,分别有USER、CORE、inc文件夹
- Debug设置
选择St-Link,勾选Run to main0,点击Settings
在新对话框里,选择Flash Download,勾选Reset and Run
2.4 添加文件
新建一个文件,保存为main.c
,保存路径为User
对User组右击,点击Add Existing…
找到main.c
添加
最后在main.c里输入下面代码:
#include "stm32f4xx.h"
int main(void)
{
while(1);
}
由于stm32f4xx_it.h
是官方库文件,和我们不一样,所以需要屏蔽下面两处
点击编译提示0 Error(s), 0 Warning(s)就没问题,如果有报错根据附录报错解决对应问题
- Code:即代码域,它指的是编译器生成的机器指令,这些内容被存储到ROM区。
- RO-data:Read Only data,即只读数据域,它指程序中用到的只读数据,这些数据被存储在ROM区,因而程序不能修改其内容。例如C语言中const关键字定义的变量就是典型的RO-data。
- RW-data:Read Write data,即可读写数据域,它指初始化为“非0值”的可读写数据,程序刚运行时,这些数据具有非0的初始值,且运行的时候它们会常驻在RAM区,因而应用程序可以修改其内容。例如C语言中使用定义的全局变量,且定义时赋予“非0值”给该变量进行初始化。
- ZI-data:Zero Initialie data,即0初始化数据,它指初始化为“0值”的可读写数据域,它与RW-data的区别是程序刚运行时这些数据初始值全都为0,而后续运行过程与RW-data的性质一样,它们也常驻在RAM区,因而应用程序可以更改其内容。例如C语言中使用定义的全局变量,且定义时赋予“0值”给该变量进行初始化(若定义该变量时没有赋予初始值,编译器会把它当ZI-data来对待,初始化为0);
至此配置结束
三、程序下载调试
3.1 编译下载
点击Rebuild
编译结束后在OBJ文件夹里生成.hex文件
打开STM32串口程序下载FlyMcu,首先找到对应的串口号,这里是COM3
勾上“编程前重装文件”、“校验”以及“编程后执行”,其他都不要勾选。最后选择第四个DTR的低电平复位,RTS高电平进bootloader。之后,就可以点击开始编程下载程序
注意:FlyMcu的使用,需要板子上有对应的串口转USB,一键下载电路
3.2 STLINK下载与调试程序
-
Keil设置,即上面2.3小节的Options->Debug设置,然后连接板子SWD口后,点击Download,即可通过ST-Link下载
-
运行仿真
1)点击开始/停止仿真F5,则会在线更新代码在仿真,需要先编译
2)MDK弹出Debug工具条——堆栈局部变量窗口,其他调试窗口都在View里
3)Debug工具条
4)在程序调试前,把光标放到左侧左击,可以放置一个红色的断点,再次单击取消,然后点击执行到断点处
四、MDK使用技巧
- 文本美化
1)Configuration——Editor——选择Encoding为Chinese GB2312(Simplified),设置Tab size为4(设置注释关键字字体)
2)Colors & Fonts——C/C++ Editor Files——Number(修改字体颜色和大小,或者Ctrl+鼠标滑轮进行放大或者缩小)
3)User Keywords——C/C++ Editor Files——输入关键字改变颜色
-
语法检查&代码提示
1)配置——Text Completion——Symbols after xxx characters(用于开启代码提示功能)
2)Strut/Class Members(用于开启结构体/类成员提示功能)
3)Dynamic Syntax Checking(则用于开启动态语法检测)
4)Function Parameters(用于开启函数参数提示功能) -
代码编辑器技巧
1)Tab(或者Shift + Tab)可以使一片代码右移(或左移)
2)右击函数或者变量上——Go to Definition Of ‘…’(进行快速定位,注意先编译)
3)选中一片代码右击——Advanced——Comment Selection(或取消注释) -
其他小技巧
1)右击头文件——Open Document “XXX”可以快速打开文件
2)Ctrl + H(查找替换)
3)双击头文件——点击上面图标在文件中查找Find in Files…(跨文件查找)
附录
1、C语言基础
https://blog.youkuaiyun.com/weixin_44567668/article/details/129003611
2、MDK编译报错解决方式
https://blog.youkuaiyun.com/weixin_44567668/article/details/129003692
3、基于HAL库创建工程
这边建议直接使用STM32CubeMX软件生成Keil工程,见下链接:
https://blog.youkuaiyun.com/weixin_44567668/article/details/133170724
4、寄存器版工程创建
基本与固件库类似,去掉STM32F4xx_StdPeriph_Driver文件夹即可