STM32 新建寄存器版本MDK工程简要步骤

新建工程文件夹

新建一个工程根目录文件夹,并在该文件夹里新建D/M/O/P/U文件夹。

  • Drivers:存放与硬件相关的驱动层文件
  • Middlewares:存放正点原子提供的中间层组件文件和第三方中间层文件
  • Output:存放工程编译输出文件
  • Projects:存放MDK工程文件
  • User:存放HAL库用户配置文件、main.c、中断处理文件以及分散加载文件

Drivers文件夹

  • BSP:存放开发板板级支持包驱动代码,如各种外设驱动
  • CMSIS:存放CMSIS底层代码,如启动文件(.s文件)等
  • SYSTEM:存放正点原子系统级核心驱动代码

在这里插入图片描述
Projects文件夹
该文件夹用于存放编译器(MDK、IAR等)工程文件,为了方便区分,在该文件夹下新建:MDK-ARM文件夹,用于存放MDK的工程文件。

  • DebugConfig:用于存放调试设置信息文件(.dbgconf),不可删除!
  • Listings:用于存放编译过程产生的链接列表等文件
  • Objects:用于存放编译过程产生的调试信息、.hex、预览、.lib文件等

魔术棒设置

在这里插入图片描述
设置全局宏定义:STM32F103xE,用于定义所用STM32型号,在stm32f1xx.h里面会用到该宏定义。

设置优化等级为-O0,可以得到最好的调试效果。
勾选C99模式,即使用C99C语言标准。

AC5和AC6编译器对比

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

CMSIS

CMSIS(微控制器软件接口标准):Cortex Microcontroller Software Interface Standard,是由ARM和其合作的芯片厂商(ST、NXP)、软件工具厂商(KEIL、IAR),共同制定的标准。

在这里插入图片描述

  1. 用户层(用户代码)
  2. 中间层(CMSIS)
  3. 硬件层

HAL库简介

ST公司为了方便用户开发STM32芯片开发,提供了三种库:

  1. 标准外设库(Standard Peripheral Libraries)
  2. HAL库(硬件抽象层):Hardware Abstraction Layer
  3. LL库:Low Layer

不同方式的优缺点:

  1. 直接操作寄存器:执行效率高、时间成本高
  2. 标准库:F0/1/2/3/4L1,目前已停止维护
  3. HAL库:全系列兼容,ST目前主推的库,兼容性、易移植性
  4. LL库:全系列兼容,与HAL库捆绑发布,轻量级,效率高,不匹配部分复杂外设

STM32Cube固件包

STM32Cube固件包是ST公司根据CMSIS开发的固件包。
Drivers文件夹里又包含三个文件夹:

  • BSP:板级支持包,用于适配ST官方的开发板(可参考)
  • CMSIS:符合CMSIS的组件,包括:DSP库、Cortex-M内核及其设备文件、微控制器专用头文件、启动文件、专用系统文件等
  • STM32F1xx_HAL_Driver:HAL库外设驱动源码,包括F1系列HAL库源文件和头文件

CMSIS标准规定软件包目录

在这里插入图片描述

  • Driver:CMSIS驱动程序外设接口API的头文件
  • Include:CMSIS-Core(Cortex-M)和CMSIS-DSP需要包括的头文件等

Device和Include文件夹的关键文件介绍

  • stm32f1xx.h:是所有F1系列的顶层头文件,通过条件编译来包含某个芯片的头文件,定义通用的枚举类型,定义通用的宏定义。
  • stm32f103xe.h:包含中断编号定义、外设寄存器结构体类型定义、寄存器映射、寄存器位定义、外设判定
  • system_stm32f1xx.c/.h:定义了系统初始化函数SystemInit和系统时钟更新函数
  • startup_stm32f103ex.s:大容量F103系列芯片的启动文件

HAL库文件夹结构

在这里插入图片描述

  • HAL库和LL库驱动源码
  • 用户手册

HAL库文件介绍

  • stm32f1xx_hal.c/.h:HAL库初始化、系统滴答、HAL库延时等相关函数
  • stm32f1xx_hal_conf.h:HAL库的用户配置文件,用于裁剪HAL库、配置晶振参数等
  • stm32hxx_hal_def.h:包含HAL库通用的枚举类型数据和宏定义
  • stm32f1xx_hal_cortex.h/.c:内核通用函数定义和声明,如NVIC、MPU、系统软复位、Systick,主要是对core_cm3.h文件的相关函数再次封装
  • stm32f1xx_hal_ppp.c/.h:任意外设驱动源码,PPP表示任意外设
  • stm32f1xx_hal_ppp_ex.c/.h:主要是存放外设的扩展功能的驱动源码,PPP表示任意外设
  • stm32f1xx_ll_ppp.c/.h:LL库驱动源码,在部分stm32f1xx_hal_ppp.c或stm32f1xx_hal_ppp_ex.c中会被调用

HAL库回调函数

HAL_PPP_MspInit()/_DeInit()
该函数主要用于存放外设使用到的GPIO、CLOCK、NVIC、DMA等初始化代码

HAL_PPP_ProcessCpltCallback()
由于外设中断或DMA中断调用,HAL库中断公共处理函数已经实现对中断标记位读取、判断和清除操作,用户只需要专注于中断逻辑功能的实现即可

HAL_PPP_ErrorCallback()
外设或DMA中断中发生的错误,用于发生错误处理

HAL库的用户配置文件(stm32f1xx_hal_conf.h)

  1. 裁剪HAL库外设驱动源码(不进行编译)
  2. 设置外部高速晶振频率
  3. 设置外部低速晶振频率

stm32f1xx_hal.c文件

HAL_StatusTypeDef HAL_Init(void)
{__HAL_FLASH_PREFETCH_BUFFER_ENBALE();//使能FLASH预取缓冲HAL_NVIC_SetPrioorityGrouping(NVIC_PRIORITYGROUP_2);/*配置中断优先级分组*//*使用滴答定时器作为时钟基准,配置1ms滴答(时钟源为HSI)*/HAL_InitTick(TICK_INT_PRIORITY);HAL_MspInit();/* 初始化其它底层硬件(如果必要) */return HAL_OK;
}

设置全局宏定义:USE_HAL_DRIVER和STM32F103xE
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

CVE-2018-19518 漏洞复现

CVE-2018-19518 漏洞介绍 IMAP协议(因特网消息访问协议)它的主要作用是邮件客户端可以通过这种协议从邮件服务器上获取邮件的信息,下载邮件等。它运行在TCP/IP协议之上,使用的端口是143。在php中调用的是imap_open函数。 PHP 的…

C++ vector用法

目录 1. vector: 1.1 vector 说明 1.2 vector初始化: 方式1. 方式2. ​编辑方式3. 方式4. 方式5. 1.3 vector对象的常用内置函数使用(举例说明) pop_back() 2. 顺序访问vector的几种方式&#x…

基于数据挖掘的微博事件分析与可视化大屏分析系统

设计原理,是指一个系统的设计由来,其将需求合理拆解成功能,抽象的描述系统的模块,以模块下的功能。功能模块化后,变成可组合、可拆解的单元,在设计时,会将所有信息分解存储在各个表中&#xff0…

基于PHP的学生管理系统

前言 基于PHP的学生管理系统; 实现 登录、注册、学生信息、修改学生、删除学生、查询学生、添加学生等功能 ; 环境准备 开发平台:PhpStrom2022.1.2 、Phpstudy_pro 数据库:MySQL5.7.26 技术架构 Bootstrap PHP7.3.4html5css3 项目…

CentOS7集群安装JDK1.8

准备工作 1、提前安装三台虚拟机,可以参考:https://mp.csdn.net/mp_blog/creation/editor/136010108 2、三台虚拟机分别配置免密登录,参考:https://blog.csdn.net/LSW_JAVADP/article/details/121757927 安装 JDK 一、官网下载对应JDK 自…

Xray 工具笔记

Xray 官方文档 扫描单个url(非爬虫) 并输出文件(不同文件类型) .\xray.exe webscan --url 10.0.0.6:8080 --text-output result.txt --json-output result.json --html-output report.html默认启动所以内置插件 ,指定…

python 基础知识点(蓝桥杯python科目个人复习计划37)

今日复习内容:DFS--回溯 1.介绍 回溯:就是DFS是一种,在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就“回溯”返回,尝试别的路径。 回溯更强调:此路不通,另寻他路&…

计算机毕业设计SSM基于的奶茶店预约订单系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: vue mybatis Maven mysql5.7或8.0等等组成,B…

手把手教你开发Python桌面应用-PyQt6图书管理系统-图书信息表格数据显示及搜索实现

锋哥原创的PyQt6图书管理系统视频教程: PyQt6图书管理系统视频教程 Python桌面开发 Python入门级项目实战 (无废话版) 火爆连载更新中~_哔哩哔哩_bilibiliPyQt6图书管理系统视频教程 Python桌面开发 Python入门级项目实战 (无废话版) 火爆连载更新中~共计24条视频&…

钓鱼邮件便捷发送工具(GUI)

简介 本程序利用Python语言编写,使用Tkinter实现图形化界面,可使用Pyinstaller进行exe打包,程序主界面截图如下: 功能 支持腾讯企业邮、网易企业邮、阿里企业邮、自建邮服SMTP授权账号(其他邮服,可在自建…

leetcode(二分查找)35.搜索插入位置(C++详细解释)DAY6)

文章目录 1.题目示例提示 2.解答思路3.实现代码结果 4.总结 1.题目 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。…

hook函数——useRef

useRef useRef 是一个 React Hook,它能帮助引用一个不需要渲染的值。也就是说useRef可以存储一个值,但是不被组件渲染,仅仅只是引用,主要包括两个方面,例如使用ref引用一个值,使用ref引用一个dom节点&…