正点原子基于库和寄存器建立keil的工程文件简单理解(不是具体步骤)

news2025/1/23 10:24:48

下载mdk

个人上传免费的pdf:https://download.csdn.net/download/weixin_43794311/87232741,或直接到正点原子官网下载
https://www.keil.com/download/

两种建立方式的本质理解

  • 库函数是有人基于寄存器已经完成对寄存器的设置,只要根据函数参数意义,调用就可以实现功能
  • 函数库更加节省设置寄存器的时间,但对于控制的本质还是操作寄存器
  • 所以平常都使用库寄存器的方式创建,寄存器的方式了解查看方式就行

依靠库建立工程主要内容

 1. 创建工程文件夹
 2. 准备好需要的固件库,(标准库和HAL库(Hardware Abstraction Layer)),可以参考:https://blog.csdn.net/weixin_42640861/article/details/118355339的文档
 3.  参考pdf中先新建了几个文件夹,(使用过开发版的都知道会用到各种外设的头文件(.h)和编译生成文件),这样做为了方便找到各种功能的文件
 4. 将文件加入到工程中,如果不加入就不会认定这些文件能够使用
 5. 设置输出路径和将头文件加入到c/c++程序路径中,否则编译会报头文件错误

**第2个中的:**和寄存器建立工程最大的不同,不要认为这部分麻烦,在后面大工程调用时就会绝对比操作寄存器方便很多

第3个中的设置的几个文件夹的作用

一个小技巧,使用md命令的bat文件可以快速创建多个文件夹
在这里插入图片描述

第4个 将文件加入到工程中

在这里插入图片描述
添加工程和文件的关联
在这里插入图片描述

第5个,设置输出和头文件路径

在这里插入图片描述
在这里插入图片描述

个人遇到的问题


 1. 编译时发现【Keil5】*** Target ‘xxx‘ uses ARM-Compiler ‘Default Compiler Version 5‘ which is not available.或者是出现编译出现几百上千错误而且添加了头文件,依然报错没有这个函数。这时编译器的问题,参考,https://blog.csdn.net/weixin_45028335/article/details/126291787
 2. 

stm32f1XX固件库中文件内容

在这里插入图片描述

依靠寄存器建立工程步骤

 1. 打开keil5,新建工程,保存到自己建立的工程文件夹user中
 2. 找到寄存器版本中源代码的启动文件,startup_stm32f10x_hs.s,根据实际情况选择启动文件
 3. 找到寄存器版本中的system文件夹,复制到自己建立的工程文件夹中
 4. 在软件打开的工程中建立对应的工作组(下图),user,system,并把c文件添加进去
 5. 打开对工程的配置,两种方式,见下图,设置输出文件位置,生成hex文件,头文件包含等

在这里插入图片描述
在这里插入图片描述
配置输出
在这里插入图片描述
配置头文件
在这里插入图片描述

编译内核文件core_cm3.h出现问题,一般是文件版本太低

参考:https://www.pudn.com/news/62769bb777d3727348bde3f6.html
第一种、修改编译器版本
在这里插入图片描述
第二种修改核心文件

这种方法不建议,6虽然编译快,但有很多兼容性问题。而且可能不知道从哪里拷贝的就文件就是使用了旧版本的函数,例如下面这个就是5编译器中的函数,但在第6编译器中不存在。但随着官方对6编译器的支持和5编译器的不更新,6版的编译器可能慢慢成为主流

Rebuild started: Project: reg
*** Using Compiler 'V6.18', folder: 'D:\Keil_v5\ARM\ARMCLANG\Bin'
Rebuild target 'Target 1'
../SYSTEM/usart/usart.c(40): error: '#pragma import' is an Arm Compiler 5 extension, and is not supported by Arm Compiler for Embedded 6 [-Warmcc-pragma-import]
#pragma import(__use_no_semihosting)              
        ^

hex文件下载烧录

使用flymcu,isp下载

F4波特率不超过76800,F1可以支持到最高
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

【Uni-App】vscode 开发uni-app 配置eslint、prettier 实现代码检查和代码自动格式化

目录一:前言二、利用HBuilderX创建uni-app项目三、配置代码检查和代码自动格式化1. 在vscode中打开项目2. 创建package.json3. 添加eslint、prettier相关依赖4. 配置.eslintrc.js5. 配置.prettierrc.json6. 配置.editorconfig7. 配置.eslintignore如果以上还不生效&…

USB——域,包,事务及传输

USB 域,包,事务及传输 域组成包包组成事务事务组成传输 字节序 LSB 概览 域通常来说有八个 SYNCPIDADDRENDP:FRAMEDATACRCEOP 多个域组成包,USB 的包分为四大类 token:令牌包data:数据包handshake&…

centos7安装samba

关闭防火墙 [rootlocalhost ~]# systemctl stop firewalld.service [rootlocalhost ~]# systemctl disable firewalld.service Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service. Removed symlink /etc/systemd/system/basic.target.wants/f…

单目测距(yolo目标检测+标定+测距代码)

单目测距(目标检测标定测距)** 实时感知本车周围物体的距离对高级驾驶辅助系统具有重要意义,当判定物体与本车距离小于安全距离时便采取主动刹车等安全辅助功能,这将进一步提升汽车的安全性能并减少碰撞的发生。上一章本文完成了目…

Shell 标准输入和输出

无论是要交给程序处理的数据,还是控制脚本的简单命令,都少不了输入和输出。程序要做的第一件事就是处理如同一阴一阳的“输入与输出”。 1 、从文件获取输入 当我们希望向文件输出内容时,我们可以通过符号 > 或 >> 实现。而用代表…

[ Linux ] 线程独立栈,线程分离,Linux线程互斥

目录 1.线程栈 1.1pthread_t 1.2用户级的线程id与内核LWP的对应关系 2.分离线程 2.1 pthread_detch 3.线程互斥 3.1互斥相关概念 3.2 互斥量mutex 3.3 售票系统案例验证共享变量会有问题 3.4 解决抢票问题 3.5互斥量的接口 3.5.1初始化互斥量 3.5.2 销毁互斥量 3…

MSF之ssh_login漏洞

ssh_login准备实操准备 目标机:windows xp 攻击机:kali 工具:metasploit framework 实操 先查看两机器的ip kali的ip为172.17.0.1 xp的ip为192.168.17.130 互相ping一下 没问题。 打开msf search ssh_login 爆出模块 use 0 show o…

vue项目打包流程与反向代理Nginx的使用

目录 前言 参考文章 正文 1.打包前的配置工作 做反向代理的原因(Vue项目打包后Proxy失效的问题): 2.Nginx使用 前言 突发灵感想学习下打包,第一反应是学习webpack,翻找一通后发现用不着webpack,因为…

ORB-SLAM2 --- Tracking::UpdateLocalPoints函数

目录 1.函数作用 2.函数流程 3.code 4.函数解析 1.函数作用 更新局部关键点。先把局部地图清空,然后将局部关键帧的有效地图点添加到局部地图中。 2.函数流程 这是更新局部地图中的一个小函数,我们在Tracking::UpdateLocalKeyFrames更新了局部关键…

C++ Reference: Standard C++ Library reference: Containers: map: map: value_comp

C官网参考链接&#xff1a;https://cplusplus.com/reference/map/map/value_comp/ 公有成员函数 <map> std::map::value_comp value_compare value_comp() const;返回值比较对象 返回一个比较对象&#xff0c;该对象可用于比较两个元素&#xff0c;以获得第一个元素的键…

Python 基础| Python 直接赋值、深拷贝和浅拷贝

先看这三个词的意思我觉得菜鸟的总结就很好 Python 直接赋值、浅拷贝和深度拷贝 | 菜鸟教程 直接赋值&#xff1a;其实就是对象的引用&#xff08;别名&#xff09;。 浅拷贝(copy)&#xff1a;拷贝父对象&#xff0c;不会拷贝对象的内部的子对象。 深拷贝(deepcopy)&#xf…

采购过程中会遇到的四种风险!如何管理和控制?

采购风险通常是指采购过程可能出现的一些意外情况&#xff0c;这些情况都会影响采购预期目标的实现。采购风险通常是由管理不善引起的&#xff0c;本文解释了采购过程中会遇到的四种风险&#xff0c;并介绍通过正确实施8Manage SRM采购管理系统&#xff0c;可以有效管理和控制它…

说说Python程序的执行过程

1. Python是一门解释型语言&#xff1f; 我初学Python时&#xff0c;听到的关于Python的第一句话就是&#xff0c;Python是一门解释性语言&#xff0c;我就这样一直相信下去&#xff0c;直到发现了*.pyc文件的存在。如果是解释型语言&#xff0c;那么生成的*.pyc文件是什么呢&…

工程项目管理的特点

工程项目管理是一种只关注工程项目的项目管理。它使用与任何其他类型的项目管理相同的标准方法和流程。这种专业化可能会吸引任何想要进入项目管理领域的具有工程背景的人。 工程项目管理与工程管理 工程管理侧重于对具有以下特点的工程师和工程任务的管理&#xff1a; 1、…

java UDP通信程序DatagramSocket数据接收

在查看本文前 您可以先看看我的文章 java UDP通信程序DatagramSocket数据发送 对UDP有一个基本的了解 然后这里我们就直接看代码了 我们先创建一个包 包下创建两个类 分别是 sendOut 发送类 参考代码如下 import java.io.IOException; import java.net.DatagramPacket; impo…

【Flutter 笔记系列 第 3 篇】如何正确对待Name source files using `lowercase with underscores`

相信很多安装了一些提示插件的小伙伴都遇见过 Name source files using lowercase with underscores flutter 提示 如下图 此时会有两种选择 1.能跑就行&#xff0c;无视它 2.好烦&#xff0c;我也没干什么怎么就提示不规范了。 3.一定是哪里出了问题&#xff0c;我要找到…

高通Ride软件开发包使用指南(8)

高通Ride软件开发包使用指南&#xff08;8&#xff09;6.9跟踪6.10 基础感知延迟分析6.10.1生成CSV6.9跟踪 用户可以使用Google Chrome中的跟踪功能分析代码的执行浏览器以下步骤中的示例显示如何分析Foundation SDK相机知觉 必须启用相关日志条目&#xff0c;因为跟踪使用SD…

说说Spring事件发布机制

文章目录前言一、 使用到事件发布机制的源码二、Springboot启动过程中用到的部分事件三、Springboot中的监听器四、自定义事件源&#xff0c;事件监听器和事件发布器4.1 目录结构4.2 事件源4.3 事件监听器4.4 事件帮助器4.4.1 事件发布帮助接口4.4.2 事件发布帮助接口实现类4.4…

运维就业现状怎么样?技能要求高吗?

运维至少需要知道哪些知识才可以去面试&#xff1f; 有一个答案对这一话题的解读非常深入&#xff0c;体系化的分析了所需掌握的技术、工作内容、性质及可发展的方向等等&#xff0c;今天特别分享给大家&#xff0c;按照这个发展&#xff0c;运维则已不需担心就业、薪酬等问题了…

MySQL -2 指令

客户端SQL指令记录&#xff1a; -- 针对 数据库和针对数据表 &#xff08;一&#xff09;数据库 1. 查看当前所有数据库&#xff1a;show databases; 2. 创建数据库&#xff1a;create database 数据库名 DEFAULT CHARSET utf8 COLLATE utf8_general_ci; 3. 删除数据库&#…