Keil uv5 MDK使用教程

目录

  • 前言
  • 一、开发环境搭建
    • 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.mzph.cn/news/128302.shtml

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

相关文章

JavaScript

文章目录 1、JavaScript 的历史1.1 JavaScript 的历史1.2 JavaScript与ECMAScript的关系1.3 JavaScript与Java的关系1.4 JavaScript的版本 2、JS的引入方式3、ECMAScript基本语法3.1 变量3.2 注释3.2 语句分隔符 4、ECMAScript 基本数据类型4.1 数字类型4.2 字符串4.2.1 创建4.…

【计算机网络】运输层

概述运输层服务 运输层协议为运行在不同主机上的应用程序提供了逻辑通信功能。 运输层协议是在端系统中而不是在路由器中实现的。 运输层和网络层的关系: 网络层提供主机之间的逻辑通信,而运输层为**运行在不同主机上的应用程序(进程&#…

python爬虫利用代理IP分析大数据

目录 前言 一、什么是代理IP? 二、为什么需要使用代理IP? 1.突破访问限制 2.提高访问速度 3.保护隐私 三、代理IP的分类 1.高匿代理IP 2.普通代理IP 3.透明代理IP 四、如何获取代理IP? 1.免费代理IP网站 2.付费代理IP服务商 五…

前端基础之CSS

目录 一、CSS介绍 CSS语法 CSS注释 CSS的几种引入方式 二、CSS选择器 基本选择器 组合选择器 属性选择器 分组和嵌套选择器 伪类选择器 伪元素选择器 选择器的优先级 三、CSS属性相关 宽和高 字体属性 文字属性 背景属性 边框 border-radius display属性 …

常见接口测试面试题

1、按你的理解,软件接口是什么? 答: 就是指程序中具体负责在不同模块之间传输或接受数据的并做处理的类或者函数。 2、HTTP和HTTPS协议区别? 答: https协议需要到CA(Certificate Authority,证书…

物联网整体框架有哪些层面?

物联网是当前非常火热的话题,各个行业对物联网的关注和投入力度也很大,一些互联网巨头都在紧锣密鼓的布局物联网产业,抢占市场先机。 物联网的整体构架大致可以分为以下四个层面: 1.感知识别层 感知层是物联网整体架构的基础&…

HTML标题、段落、文本格式化

HTML标题&#xff1a; 在HTML文档中&#xff0c;标题是很重要的。标题是通过<h1> - <h6标签进行定义的&#xff0c;<h1> 定义最大的标题&#xff1b;<h6>定义最小的标题。 <hr> 标签在HTML页面中用于创建水平线&#xff0c;hr元素可用于分隔内容。…

【Linux】Nginx安装使用负载均衡及动静分离(前后端项目部署),前端项目打包

一、Nginx导言 1、引言 Nginx 是一款高性能的 Web 服务器和反向代理服务器&#xff0c;也可以充当负载均衡器、HTTP 缓存和安全防护设备。它的特点是内存占用小、稳定性高、并发性强、易于扩展&#xff0c;因此在互联网领域得到了广泛的使用。 总结出以下三点: 负载均衡&#x…

CN考研真题知识点二轮归纳(4)

持续更新&#xff0c;上期目录&#xff1a; CN考研真题知识点二轮归纳&#xff08;4&#xff09;https://blog.csdn.net/jsl123x/article/details/134135134?spm1001.2014.3001.5501 1.既可以扩展网段又是二层的设备 网段一般指一个计算机网络中使用同一物理层设备&#xff…

小程序如何设置自动使用物流账号发货

小程序支持自动使用物流账号发货并生成运单号。商家需要与物流公司合作&#xff0c;获取物流账号&#xff0c;支持快递物流和同城外卖配送平台。具体方法请参考公众号之前发布的文章&#xff0c;例如可以搜索“快递账号”。 导入物流账号后&#xff0c;在小程序管理员后台->…

出海营销必看:如何避免邮件被识别为垃圾邮件

对于现在的商业环境来说&#xff0c;邮件通信已经成为企业与客户、合作伙伴以及员工之间沟通和交流的重要方式。然而&#xff0c;尽管企业发送的邮件通常都是正常的、合规的&#xff0c;有时候却会被系统错误地标记为营销邮件。这个情况给企业带来了很多困扰。 如果企业的邮件…

如何使用内网穿透远程访问Linux SVN服务?

文章目录 前言1. Ubuntu安装SVN服务2. 修改配置文件2.1 修改svnserve.conf文件2.2 修改passwd文件2.3 修改authz文件 3. 启动svn服务4. 内网穿透4.1 安装cpolar内网穿透4.2 创建隧道映射本地端口 5. 测试公网访问6. 配置固定公网TCP端口地址6.1 保留一个固定的公网TCP端口地址6…

使用vue3+vite+elctron构建小项目介绍Electron进程间通信

进程间通信 (IPC) 是在 Electron 中构建功能丰富的桌面应用程序的关键部分之一。 由于主进程和渲染器进程在 Electron 的进程模型具有不同的职责&#xff0c;因此 IPC 是执行许多常见任务的唯一方法&#xff0c;例如从 UI 调用原生 API 或从原生菜单触发 Web 内容的更改。 在 …

input 调起键盘 ,键盘距离输入框底部太近

input 调起键盘 &#xff0c;键盘距离输入框底部太近 解决方法 cursorSpacing‘20’ 单位是 ‘px’ <input cursorSpacing20 type"text" v-model"replyMain" />距离底部距离 20px &#xff0c;输入框距离键盘距离是20px

centos7 配置搭建 wordpress 博客

环境配置 系统:centos7 CPU:2核 内存:4G 硬盘:40G 一、登录云服务器器 1.单击实例--实例名称 2. 选择安全组页签,单击安全组操作列的管理规则, 3.在入方向添加需要放行的端口。本教程中,在安全组入方向放行SSH默认22端口、Apache默认80端口 4.登录服务器 5.更改主…

oracle如果不适用toad或者plsql工具如何获取索引建表语句

select dbms_lob.substr(dbms_metadata.get_ddl(INDEX,INDEX_NAME,DIXON))||; from dba_indexes where ownerDIXON这个语句可以获取dixon用户的所有索引创建语句&#xff0c;sql脚本形式呈现 点开一个语句查看 如果不使用dbms_lob.substr这个函数最后得到是一个clob selec…

USART HMI串口屏+单片机通讯上手体验

USART HMI串口屏单片机通讯上手体验 &#x1f516;本文采用淘晶驰4.3寸IPS串口屏实物验证&#xff0c;HMI串口屏经简单配置即可快速实现&#xff0c;串口通讯效果。串口屏上手简单&#xff0c;有独立的开发套件&#xff0c;容易上手&#xff0c;驱动显示和功能代码独立。本文仅…

2021上半年下午网络工程师试题

2021上半年下午网络工程师试题 试题一(共20分) 阅读以下说明&#xff0c;回答问题1至问题4&#xff0c;将解答填入答题纸对应的解答栏内。 【说明】 某企业网络拓扑图如图1-1所示。该网络可以实现的网络功能有: 1.汇聚层交换机A与交换机B采用VRRP技术组网&#xff1b; 2.…

PerfectPixel 插件,前端页面显示优化工具

1.简介 PerfectPixel 插件是一款适用于 Chrome 浏览器的网页前端页面显示优化工具&#xff0c;该插件能够帮助开发人员和标记设计人员在开发时将设计图直接加载至网页中&#xff0c;与已成型的网页进行重叠对比&#xff0c;以规范网页像素精度 作为一款可以优化前端页面显示的…

VSCode 设置平滑光标

1.点击左下角的设置按钮&#xff0c;再点击设置 2.点击文本编辑器&#xff0c;点击光标&#xff0c;勾选控制是否启用平滑插入动画。 3.随便打开一个文件&#xff0c;上下左右移动光标时&#xff0c;会发现非常的流畅。 原创作者&#xff1a;吴小糖 创作时间&#xff1a;2023…