目录
- 前言
- 一、开发环境搭建
- 1.1 Keil的安装
- 1.2 其他工具安装
- 1.3 注意事项
- 二、Keil基本使用
- 2.1 新建工程模板
- 2.1.1 基于固件库(先复制文件夹,后添加文件)
- 2.1.2 基于寄存器
- 2.1.3 基于HAL库
- 2.2 下载与调试
- 2.3 工程目录下简介
- 2.4 MDK使用技巧
前言
介绍一下单片机开发软件Keil的基本使用,平台以STM32f407为准,有机会完善
一、开发环境搭建
1.1 Keil的安装
1.Keil 523版本下载链接
2.选择安装路径,其余默认即可,具体可以参考百度
[注] 汉化会导致部分功能设置不显示
3.基于不同芯片加载包不一样,官网http://www.keil.com/dd2/pack下载 Keil.STM32F4xx_DFP.1.0.8(双击打开安装stm32)
1.2 其他工具安装
- CH340串口驱动安装
安装方法:直接点击安装(安装失败见readme),提示预安装成功即安装成功
作用:安装了串口驱动后,电脑就能识别串口 - 串口程序下载工具mcuisp(FlyMcu)
作用:可以将.hex格式程序下载到板子里 - 串口调试助手XCOM
作用:可以通过串口收发数据 - STLINK驱动安装
作用:可以在windows下配合MDK进行程序下载和调试。
1.3 注意事项
- STM32的ISP下载,只能使用串口1,也就是对应串口发送接收引脚PA9,PA10。不能使用其他串口 (例如串口2:PA2,PA3)用来ISP下载。
- 开发板供电的时候,有如下注意事项
(1)DC005接口,供电范围是6~24V,请不要违规供电。
(2)VOUT2(2X3排针)可以做5V输出,也可以做输入。
(3)当开发板外接负载较重(电流大)时,请提供足够电源。
(4)开发板不支持JLINK等仿真供电,请不要尝试。
(5)正常供电后,蓝色电源指示灯,必须亮,才可使用开发板。 - 开发板IO使用的时候,有如下注意事项:
(1)IO口一定不要接超过5V的电压。
(2)不要用IO口直接驱动感性负载(电机/电磁阀/继电器等)。
(3)外接其他外设时,请先做好IO选型,选择合适的IO口。
(4)注意防静电(尤其是冬天)。
二、Keil基本使用
2.1 新建工程模板
2.1.1 基于固件库(先复制文件夹,后添加文件)
-
在磁盘新建文件夹Template(包含CORE,FWLIB,OBJ, USER,并将SYSTEM复制过来)
-
Project ——New Uvision Project ——Template——USER(工程名取Template)——Device——STM32F407ZG(选择对应芯片型号)——OK——Manage Run-Time Environment——Cancel
-
复制官方源文件到新建文件夹(在参考资料STM32F4固件库里)
(1)删除USER里的Listings和Objects,
(2)将STM32F4固件库\Libraries\STM32F4xx_StdPeriph_Driver里的src,inc文件夹复制到FWLIB(固件库源码)
(3)将STM32F4xx固件库——Libraries——CMSIS——Device——ST——STM32F4xx——Source\Templates\arm里startup_stm32f40_41xxx.s复制到CORE,将STM32F4固件库\Libraries\CMSIS\Includ,将里面core_cm4.h、core_cm4_simd.h、core_cmFunc.h以及core_cmInstr.h同样复制到CORE(启动文件)
(4)将STM32F4固件库\Libraries\CMSIS\Device——ST\STM32F4xx\Include里的stm32f4xx.h和system_stm32f4xx.h复制到USER里。在STM32F4固件库\Project\STM32F4xx_StdPeriph_Templates里将目录下面的5个文件main.c,stm32f4xx_conf.h,stm32f4xx_it.c,stm32f4xx_it.h,system_stm32f4xx.c复制到USER目录下面(复制头文件和源文件)
(5)找到工程源码里的一个SYSTEM复制过来(这一步非必要)
- 将固件库文件复制到工程
(1)右键点击Target1——Manage Project Items——Project Targets(将Target改名为Template,在Groups里删掉Source Group1,建立USER,CORE,FWLIB,SYSTEM)——OK(将上面的文件添加到我们的工程里)
(2)右击Template——Manage Project Items——选择FWLIB——点击ADD Files——选择FWLIB\src全选Ctrl+A——Add——Close(删除stm32f4xx_fmc.c,可以只添加我们用到的库文件)
(3)同样在CORE里添加startup_stm32f40_41xxx.s, 在USER里添加的文件main.c,stm32f4xx_it.c,system_stm32f4xx.c。
(4)右击Template——Manage Project Items——建立SYSTEM——Add Files…(添加delay.c、sys.c、usar.c三个c文件)——Close——OK
- 设置存放路径
(1)设置MDK头文件存放路径
Options for Target…——C/C++——Include Paths…——新建…(分别添加CORE,USER,FWLIB\inc和SYSTEM里的delay、sys、usar三个文件夹)
(2)添加全局定义标识符
Options for Target…——C/C++——Define(添加STM32F40_41xxx,USE_STDPERIPH_DRIVER)
(3)选择编译的中间文件存放目录
①Options for Target…——Output——Select Folder for Objects…(选择新建的OBJ)——将下面三个都勾选(生成HEX文件)
②Options for Target…——Listing——Select Folder for Objects…(选择新建的)
6. 修改代码
(1)将main.c里替换成README里的代码(注意最后一行空白),删除stm32f4xx_it.c里第32行#include "main.h"和第144行TimingDelay_Decrement();
(2)修改System_stm32f4xx.c,把PLL第一分频系数改为8,如#define PLL_M 8(使主频为168MHz)
(3)修改stm32f4xx.h里HSE_VALUE为8MHz,如#define HSE_VALUE ((uint32_t)8000000)(修改外部时钟为8MHz)
7. 调用实验——编译F7
2.1.2 基于寄存器
- Project ——New Uvision Project ——新建TEST,OBJ文件夹,在里面新建USER文件夹,保存名为test——Device——STM32F407ZG(选择对应芯片型号)——OK——Manage Run-Time Environment——Cancel
- 添加启动文件(注意与标准库不同有注释)
(1)将启动文件startup_stm32f40_41xxx.s复制到USER目录下
(2)Options for Target…——Target——修改Xtal为8——OK
(3)Target1——双击Source Group1——选择启动文件Add——Close - Options for Target…——Output/Listings——Select Folder for Objects…(选择新建的OBJ)——将下面三个都勾选(生成HEX文件)
- 将寄存器版里的SYSTEM文件复制到TEST里——右击Template——Manage Project Items——新建组SYSTEM和USER——Add Files将delay.c、sys.c和usart.c添加进SYSTEM——Close——OK
- 新建空文档test.c保存到USER里,双击USER添加,将寄存器版里源文件test.c里内容复制过来
- Options for Target…——C/C++——Include Paths…——新建…——将SYSTEM里三个文件夹添加进去——OK (在Define里添加宏STM32F40_41xxx)
- 调用实验——编译F7
2.1.3 基于HAL库
- 新建文件夹Template,在里面建立文件夹CORE,HALLIB,OBJ和USER
- Project ——New Uvision Project ——Template——USER(工程名取Template))——Device——STM32F407ZG(选择对应芯片型号)——OK——Manage Run-Time Environment——Cancel
- 复制相关文件
(1)将官方包STM32Cube_FW_F4_V1.24.0\Drivers\STM32F4xx_HAL_Driver离得Src和Inc复制到新建的HALLIB里
(2)将STM32Cube_FW_F4_V1.24.0\Drivers\CMSIS\Device\ST\STM32F4xx\Source
\Templates \arm里的启动文件startup_stm32f407xx.s复制到CORE里,同时将\STM32Cube_FW_F4_V1.24.0\Drivers\CMSIS\Include里的cmsis_armcc.h, cmsis_armclang.h,cmsis_compiler.h,cmsis_version.h,mpu_armv7.h,core_cm4.h复制到CORE里
(3)将STM32Cube_FW_F4_V1.24.0\Drivers\CMSIS\Device\ST\STM32F4xx\Include里的stm32f4xx.h,system_stm32f4xx.h和stm32f407xx.h头文件复制到USER中
(4)将STM32Cube_FW_F4_V1.24.0\Projects\STM32F4-Discovery\Templates里Inc文件夹中的stm32f4xx_it.h,stm32f4xx_hal_conf.h,main.h和Src文件夹中的system_stm32f4xx.c, stm32f4xx_it.c, stm32f4xx_hal_msp.c,main.c复制到USER里
(5)将模板里的SYSTEM复制进Template1中
4.在小组里添加相关文件
(1)右键点击Target1——Manage Project Items——Project Targets(将Target改名为Template,在Groups里删掉Source Group1,建立USER,CORE,FWLIB,SYSTEM)——OK(将上面的文件添加到我们的工程里)
(2)将HALLIB\Src添加到HALLIB组里(去掉stm32f4xx_hal_dsi.c,stm32f4xx_hal_lptim.c和stm32f4xx_hal_msp_template.c,此外去掉带ll的和带timebase的),USER里添加main.c,stm32f4xx_hal_msp.c,stm32f4xx_it.c和system_stm32f4xx.c,CORE里添加头文件和启动文件startup_stm32f407xx.s,SYSTEM里添加sys.c,delay.c和usart.c - Options for Target…——C/C++——Include Paths…——新建…——将CORE,USER,HALLIB\Inc和SYSTEM里三个子文件夹添加进去——OK(在Define里添加宏USE_HAL_DRIVER,STM32F407xx用英文逗号隔开,取消勾选Output里的Browse Information)
- 将模板里main.c里的内容复制进工程里的主函数中
2.2 下载与调试
- STM32串口程序下载
(1)连线
①在板子上把RXD和PA9,TXD和PA10通过跳线帽连起来
②把BOOT1和BOOT0都设置为0
③把B0接V3.3,按一下复位键
④在USB_232处插入USB线连接电脑
(2)FlyMcu下载设置——开始编程——成功后显示:共写入…KB,好事…毫秒
①搜索串口,选择虚拟出来的USB:COMx:空闲USB-SERIAL CH340
②勾上“编程前重装文件”、“校验”以及“编程后执行”,其他都不要勾选
③左下方:选择第四个DTR的低电平复位,RTS高电平进bootloader
④联机下载文件选.hex
⑤波特率设置为76800bps
(3)打开串口调试助手(XCOM)设置波特率为115200查看收发信息是否一样 - STLINK下载与调试程序
(1)keil的设置
①目标选项——Debug——Use选择ST-Link Debugger,勾选Run to main()
②目标选项——Debug——Settings——设置Port为SW,Max为4MHz
③目标选项——Utilities——Settings——勾选Reset and Run
(2)开始运行
①点击开始/停止仿真(则会线更新代码在仿真),或者点击下载F8(只下载代码)(注意B0和B1都要设置GND)
②MDK弹出Debug工具条——堆栈局部变量窗口
③把光标放到test.c的第9行左侧左击,可以放置一个红色的断点,再次单击取消,然后点击执行到断点处
④菜单栏外设——USART——USART1——点击执行过去
(3)打开串口调试助手(XCOM)设置波特率为115200和串口号,然后点击执行过去按钮,看t值变化
2.3 工程目录下简介
1.USER
(1)main.c ——主函数来调用其他函数
(2)stm32f4xx_it.c——中断处理文件,stm32f4xx是型号
(3)system_stm32f4xx.c——系统初始化文件
2.CORE包含内核相关的函数和宏定义
(1)startup_stm32f40_41xxx.s——启动文件(不需要动)
3.FWLIB固件库
(1)misc.c——存放头文件
(2)stm32f4xx_gpio.c—— 是处理引脚相关函数的文件
(3)stm32f4xx_rcc.c——是处理内部时钟相关函数文件(不能删除)
(4)stm32f4xx_usart.c——是串口通信的相关函数文件
4.HARDWARE存放和硬件相关的函数
(1)led.c对GPIO引脚的初始化
5.README告诉别人干嘛的
6.SYSTEM
(1)delay.c——存放的是和延时相关的函数。
(2)sys.c——存放的是系统初始化相关的函数,不必深究。
(3)usart.c——存放的和串口通讯时用到的代码
2.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…(跨文件查找)