Keil uv5 MDK使用教程

news2024/11/16 7:46:32

目录

  • 前言
  • 一、开发环境搭建
    • 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 其他工具安装

  1. CH340串口驱动安装
    安装方法:直接点击安装(安装失败见readme),提示预安装成功即安装成功
    作用:安装了串口驱动后,电脑就能识别串口
  2. 串口程序下载工具mcuisp(FlyMcu)
    作用:可以将.hex格式程序下载到板子里
  3. 串口调试助手XCOM
    作用:可以通过串口收发数据
  4. STLINK驱动安装
    作用:可以在windows下配合MDK进行程序下载和调试。

1.3 注意事项

  1. STM32的ISP下载,只能使用串口1,也就是对应串口发送接收引脚PA9,PA10。不能使用其他串口 (例如串口2:PA2,PA3)用来ISP下载。
  2. 开发板供电的时候,有如下注意事项
    (1)DC005接口,供电范围是6~24V,请不要违规供电。
    (2)VOUT2(2X3排针)可以做5V输出,也可以做输入。
    (3)当开发板外接负载较重(电流大)时,请提供足够电源。
    (4)开发板不支持JLINK等仿真供电,请不要尝试。
    (5)正常供电后,蓝色电源指示灯,必须亮,才可使用开发板。
  3. 开发板IO使用的时候,有如下注意事项:
    (1)IO口一定不要接超过5V的电压。
    (2)不要用IO口直接驱动感性负载(电机/电磁阀/继电器等)。
    (3)外接其他外设时,请先做好IO选型,选择合适的IO口。
    (4)注意防静电(尤其是冬天)。

二、Keil基本使用

2.1 新建工程模板

2.1.1 基于固件库(先复制文件夹,后添加文件)

  1. 在磁盘新建文件夹Template(包含CORE,FWLIB,OBJ, USER,并将SYSTEM复制过来)
    在这里插入图片描述

  2. Project ——New Uvision Project ——Template——USER(工程名取Template)——Device——STM32F407ZG(选择对应芯片型号)——OK——Manage Run-Time Environment——Cancel
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  3. 复制官方源文件到新建文件夹(在参考资料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. 将固件库文件复制到工程
    (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. 设置存放路径
    (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 基于寄存器

  1. Project ——New Uvision Project ——新建TEST,OBJ文件夹,在里面新建USER文件夹,保存名为test——Device——STM32F407ZG(选择对应芯片型号)——OK——Manage Run-Time Environment——Cancel
  2. 添加启动文件(注意与标准库不同有注释)
    (1)将启动文件startup_stm32f40_41xxx.s复制到USER目录下
    (2)Options for Target…——Target——修改Xtal为8——OK
    (3)Target1——双击Source Group1——选择启动文件Add——Close
  3. Options for Target…——Output/Listings——Select Folder for Objects…(选择新建的OBJ)——将下面三个都勾选(生成HEX文件)
  4. 将寄存器版里的SYSTEM文件复制到TEST里——右击Template——Manage Project Items——新建组SYSTEM和USER——Add Files将delay.c、sys.c和usart.c添加进SYSTEM——Close——OK
  5. 新建空文档test.c保存到USER里,双击USER添加,将寄存器版里源文件test.c里内容复制过来
  6. Options for Target…——C/C++——Include Paths…——新建…——将SYSTEM里三个文件夹添加进去——OK (在Define里添加宏STM32F40_41xxx)
  7. 调用实验——编译F7

2.1.3 基于HAL库

  1. 新建文件夹Template,在里面建立文件夹CORE,HALLIB,OBJ和USER
  2. Project ——New Uvision Project ——Template——USER(工程名取Template))——Device——STM32F407ZG(选择对应芯片型号)——OK——Manage Run-Time Environment——Cancel
  3. 复制相关文件
    (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
  4. Options for Target…——C/C++——Include Paths…——新建…——将CORE,USER,HALLIB\Inc和SYSTEM里三个子文件夹添加进去——OK(在Define里添加宏USE_HAL_DRIVER,STM32F407xx用英文逗号隔开,取消勾选Output里的Browse Information)
  5. 将模板里main.c里的内容复制进工程里的主函数中

2.2 下载与调试

  1. 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查看收发信息是否一样
  2. 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. 文本美化
    (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——输入关键字改变颜色
  2. 语法检查&代码提示
    (1)配置——Text Completion——Symbols after xxx characters(用于开启代码提示功能)
    (2)Strut/Class Members(用于开启结构体/类成员提示功能)
    (3)Dynamic Syntax Checking(则用于开启动态语法检测)
    (4)Function Parameters(用于开启函数参数提示功能)
  3. 代码编辑器技巧
    (1)Tab(或者Shift + Tab)可以使一片代码右移(或左移)
    (2)右击函数或者变量上——Go to Definition Of ‘…’(进行快速定位,注意先编译)
    (3)选中一片代码右击——Advanced——Comment Selection(或取消注释)
  4. 其他小技巧
    (1)右击头文件——Open Document “XXX”可以快速打开文件
    (2)Ctrl + H(查找替换)
    (3)双击头文件——点击上面图标在文件中查找Find in Files…(跨文件查找)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1163813.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

uniapp在APP端使用echarts用formatter设置y轴保留2位小数点不生效

uniapp使用echarts,在内置浏览器中,设置保留2位小数能正常显示(代码如下),但是在APP端这个设置不起作用。 yAxis: {type: value,axisLabel: {formatter: function (val) {return val.toFixed(2); //y轴始终保留小数点…

H桥电机驱动器MS35656可pin对pin兼容DRV8812

MS35656 是一款双通道 DMOS 全桥驱动器,可以驱动一个步进电机或者两个直流电机。每个全桥的驱动电流在 24V 电源下可以工作到 1.4A。MS35656 集成了固定关断时间的 PWM 电流校正器,以及一个 2bit 的非线性 DAC(数模转换器)&#x…

【WinForm详细教程五】WinForm中的MenuStrip 、ContextMenuStrip 、ToolStrip、StatusStrip控件

文章目录 1.MenuStrip2.ContextMenuStrip3.ToolStrip4.StatusStrip 1.MenuStrip MenuStrip作为一个容器可以包含多个菜单项。MenuStrip 的重要属性包括: Name:菜单的名字Dock:菜单的停靠位置Items:菜单项的集合 ToolStripMenuI…

WebDAV之π-Disk派盘 + 一叶日记

推荐一款操作方便、界面简洁,记录生活点滴与心情,具有诗情画意的日记软件。 一叶日记是一款记录日记的手机软件,在这款软件中它里面有着各种不同的工具,可以方便用户去随时随地的记录日记,同时里面还有着各种不同的主题背景,可以供用户去选择使用各种功能,给用户记录带…

精准努力,提升自己的核心竞争力——中国人民大学与加拿大女王大学金融硕士

步入职场,相信大家都想成为职场的宠儿。经过一番摸爬滚打后,在职场稳固了地位。但想叱咤职场,还需要精准努力,提升自己的核心竞争力。中国人民大学与加拿大女王大学金融硕士项目为你补给能量。 任何资产都有贬值的风险&#xff0…

超好用的IDEA插件推荐,写完代码直接调试接口

Apipost推出IDEA插件非常省时高效,写完代码直接可以进行调试,而且支持生成接口文档,真是后端神器啊! 可以点击下方链接安装更新或在插件商店中搜索安装 下载链接:https://plugins.jetbrains.com/plugin/22676-apipos…

解决postman打开一直转圈圈的问题

项目场景: 对于后端开发来说,Postman是经常使用的。特别是一些前后端分离的项目,后端开发测试接口就需要一款好用的接口测试工具,postman就是一款使用方便功能比较齐全的测试工具 问题描述 最近使用postman进行接口测试&#xf…

矢量图编辑_Inkscape裁剪与蒙版

文章目录 一、简介二、示例三、裁剪 Clipping四、蒙版 Masking 一、简介 裁剪(Clipping) 和 蒙版/遮罩(masking) 是限制对象(或对象组)哪一部分可见的方法。对于裁剪, 裁剪路径(cli…

window安装不同版本的mysql

引用:https://blog.csdn.net/weixin_45151960/article/details/113537526 当安装第二个的时候,,会有问题,, 下载mysql8 和 mysql5.7 : https://downloads.mysql.com/archives/community 下载之后&#xff…

项目实战:通过axios加载水果库存系统的首页数据

1、创建静态页面 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title><link rel"stylesheet" href"style/index.css"><script src"script/axios.mi…

python调用飞书机器人发送文件

当前飞书webhook机器人还不支持发送文件类型的群消息&#xff0c;可以申请创建一个机器人应用来实现群发送文件消息。 创建机器人后&#xff0c;需要开通一系列权限&#xff0c;然后发布。由管理员审核通过后&#xff0c;才可使用。 包括如下的权限&#xff0c;可以获取群的c…

项目实战:封装响应结果以及抽取响应代码到工具类

1、创建GsonUtil工具类&#xff0c;封装把java对象转成json字符串方法 package com.csdn.fruit.util; import com.google.gson.Gson; public class GsonUtil {public static String toJson(Object obj) {//java object -> java json stringGson gson new Gson();return gs…

Kibana中使用Dev Tools控制台创建索index引同时添加date类型的时间参数(用于根据时间序列展示数据)

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

Jmeter参数化 —— 循环断言多方法

1、参数化接口测试数据 注意&#xff1a;csv文档参数化&#xff0c;里面有多少条数据&#xff0c;就要在线程组里循环多少次&#xff0c;不然就只执行一次 2、添加配置元件-计数器 关于计数器&#xff1a; ①Starting Value&#xff1a;给定计数器的初始值; ②递增&#xff1a…

listFiles()为null原因

调用listFiles为null原因 前言一、错误原因二、正确使用方法 前言 今天笔者在对File文件进行listFiles方法调用时&#xff0c;发现报错返回空指针异常&#xff0c;下面是列举的可能出现的错误的原因。 一、错误原因 不能对文件进行listFiles方法调用 二、正确使用方法 对文件夹…

TSINGSEE青犀景区AI智慧监管平台,赋能文旅行业高质量发展

一、背景需求分析 随着我国旅游经济的蓬勃发展&#xff0c;旅游行业逐渐成为国民经济增长的支柱性产业。“十四五”期间&#xff0c;国内旅游业将从高速增长阶段转向高质量发展阶段&#xff0c;与此同时&#xff0c;旅游景区的安全生产工作也迎来了新的挑战和需求。尤其是节假…

Ceph:关于Ceph 中创建和管理自定义 CRUSH Map

写在前面 准备考试&#xff0c;整理 Ceph 相关笔记博文内容涉及&#xff0c;管理和定制CRUSH Map以及管理OSD Map理解不足小伙伴帮忙指正 对每个人而言&#xff0c;真正的职责只有一个&#xff1a;找到自我。然后在心中坚守其一生&#xff0c;全心全意&#xff0c;永不停息。所…

python requests模块的使用以及网页信息爬取

python requests模块的使用以及网页信息爬取 文章目录 python requests模块的使用以及网页信息爬取网页信息爬取REQUEST模块模块中的请求方法请求方法中的参数响应对象中属性 获取网站中的源代码获取图片地址匹配单个字符匹配一组字符其他元字符核心函数 图片下载 requests 模块…

经验总结2023-11-2

axios发起post请求的方式&#xff1a; 要解决跨域问题&#xff0c;后端要加&#xff0c;指定支持的方法是Pos还是get&#xff1a;

leetCode 198.打家劫舍 动态规划入门:从记忆化搜索到递推

leetCode 198.打家劫舍 198. 打家劫舍 - 力扣&#xff08;LeetCode&#xff09; 你是一个专业的小偷&#xff0c;计划偷窃沿街的房屋。每间房内都藏有一定的现金&#xff0c;影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统&#xff0c;如果两间相邻的房屋在同一…