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://xiahunao.cn/news/2780694.html

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

相关文章

linux系统下vscode portable版本的python环境搭建003:venv

这里写自定义目录标题 python安装方案一. 使用源码安装(有[构建工具](https://blog.csdn.net/ResumeProject/article/details/136095629)的情况下)方案二.使用系统包管理器 虚拟环境安装TESTCG 本文目的:希望在获得一个新的系统之后&#xff…

Vue核心基础4:绑定样式、条件渲染、列表渲染

1 绑定样式 【代码】 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>绑定样式</title><s…

FL Studio版本升级-FL Studio怎么升级-FL Studio升级方案

已经是新年2024年了&#xff0c;但是但是依然有很多朋友还在用FL Studio12又或者FL Studio20&#xff0c;今天这篇文章教大家如何升级FL Studio21 FL Studio 21是Image Line公司开发的音乐编曲软件&#xff0c;除了软件以外&#xff0c;我们还提供了FL Studio的升级服务&#…

C++11中的简化声明

auto 用于自动类型推断&#xff0c;显示定义变量&#xff1a; typeid typeid推导出来的是字符串&#xff0c;只能看不能用&#xff0c;通过打印来查看变量的类型&#xff0c;用法如上。 decltype 同样是用来自动推导类型&#xff0c;与auto的区别是&#xff0c;auto在定义时必…

MySQL篇----第十四篇

系列文章目录 文章目录 系列文章目录前言一、MySQL 数据库作发布系统的存储,一天五万条以上的增量,预计运维三年,怎么优化?二、锁的优化策略三、索引的底层实现原理和优化四、什么情况下设置了索引但无法使用前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽…

PKI - 借助Nginx实现_客户端使用自签证书供服务端验证

文章目录 Pre概述在 Nginx 中实现客户端使用自签名证书供服务器验证1. 生成客户端密钥对2. 生成自签名客户端证书3. 配置 Nginx4. 重启 Nginx 修5. 验证 在浏览器中安装客户端证书以便进行访问 Pre PKI - 借助Nginx 实现Https 服务端单向认证、服务端客户端双向认证 PKI - 数…

线性代数的本质——1 向量

向量是线性代数中最为基础的概念。 何为向量&#xff1f; 从物理上看&#xff0c; 向量就是既有大小又有方向的量&#xff0c;只要这两者一定&#xff0c;就可以在空间中随便移动。 从计算机应用的角度看&#xff0c;向量和列表很接近&#xff0c;可以用来描述某对象的几个不同…

人力资源智能化管理项目(day05:角色管理)

学习源码可以看我的个人前端学习笔记 (github.com):qdxzw/humanResourceIntelligentManagementProject 搭建页面结构 分页组件&#xff1a;设置layout&#xff0c;表示需要显示的内容&#xff0c;用逗号分隔&#xff0c;布局元素会依次显示。prev表示上一页&#xff0c;next为…

HP Pavilion Laptop 15-cs3xxx原装出厂Win10.20H1系统

惠普笔记本HP Pavilion - 15-cs3030tx原厂Windows10系统镜像下载 链接&#xff1a;https://pan.baidu.com/s/1LmdJoN7F3BGvt49ovq-eww?pwdzgmt 提取码&#xff1a;zgmt 适用型号&#xff1a; 15-cs3001tx&#xff0c;15-cs3030tx&#xff0c;15-cs3031tx&#xff0c;15-cs…

数据结构:并查集讲解

并查集 1.并查集原理2.并查集实现3.并查集应用4.并查集的路径压缩 1.并查集原理 在一些应用问题中&#xff0c;需要将n个不同的元素划分成一些不相交的集合。开始时&#xff0c;每个元素自成一个单元素集合&#xff0c;然后按一定的规律将归于同一组元素的集合合并。在此过程中…

寒假作业2024.2.11

请使用递归实现n! #include <stdio.h> #include <stdlib.h> #include <string.h> #include <math.h> #include <unistd.h> int fun(int n) {if (n0) {return 1;} else {return n*fun(n-1);} } int main(int argc, const char *argv[]) {int n…

Vue核心基础3:计算属性和监视属性

1 计算属性 这边以姓名案例&#xff0c;来介绍计算属性 <body><div id"root"><!-- 姓&#xff1a;<input type"text" v-model:value"firstName"><br>名&#xff1a;<input type"text" v-model:value&…

《CSS 简易速速上手小册》第10章:未来的 CSS(2024 最新版)

文章目录 10.1 CSS 的新特性和趋势10.1.1 基础知识10.1.2 重点案例&#xff1a;使用 CSS Grid 创建响应式图库10.1.3 拓展案例 1&#xff1a;利用 CSS 变量实现主题切换10.1.4 拓展案例 2&#xff1a;使用 lab() 颜色和 layer 规则优化样式 10.2 CSS Houdini&#xff1a;魔法般…

C++进阶(十四)智能指针

&#x1f4d8;北尘_&#xff1a;个人主页 &#x1f30e;个人专栏:《Linux操作系统》《经典算法试题 》《C》 《数据结构与算法》 ☀️走在路上&#xff0c;不忘来时的初心 文章目录 一、为什么需要智能指针&#xff1f;二、内存泄漏1、 什么是内存泄漏&#xff0c;内存泄漏的危…

STM32 7-8

目录 ADC AD单通道 AD多通道 DMA DMA转运数据 DMAAD多通道 ADC AD单通道 AD.c #include "stm32f10x.h" // Device header/*** brief 初始化AD所需要的所有设备* param 无* retval 无*/ void AD_Init(void) {RCC_APB2PeriphClockCmd(RCC_AP…

在程序中使用日志功能

在应用中&#xff0c;需要记录程序运行过程中的一些关键信息以及异常输出等。这些信息用来排查程序故障或者其他用途。 日志模块可以自己实现或者是借用第三方库&#xff0c;之前写过一个类似的使用Qt的打印重定向将打印输出到文件&#xff1a;Qt将打印信息输出到文件_qt log输…

【JavaEE】_HTML常用标签

目录 1.HTML结构 2. HTML常用标签 2.1 注释标签 2.2 标题标签&#xff1a;h1~h6 2.3 段落标签&#xff1a;p 2.4 换行标签&#xff1a;br 2.5 格式化标签 2.6 图片标签&#xff1a;img 2.7 超链接标签&#xff1a;a 2.8 表格标签 2.9 列表标签 2.10 表单标签 2.10…

C++继承(二):菱形继承、virtual菱形虚拟继承

目录 一、了解菱形继承 二、菱形继承的问题 三、虚拟继承virtual 3.1virtual 3.2虚拟继承解决数据冗余和二义性的原理 四、总结/继承和组合 一、了解菱形继承 单继承&#xff1a;一个子类只有一个直接父类时称这个继承关系为单继承 多继承&#xff1a;一个子类有两个或…

C++重新入门-C++ 函数

函数是一组一起执行一个任务的语句。每个 C 程序都至少有一个函数&#xff0c;即主函数 main() &#xff0c;所有简单的程序都可以定义其他额外的函数。 您可以把代码划分到不同的函数中。如何划分代码到不同的函数中是由您来决定的&#xff0c;但在逻辑上&#xff0c;划分通常…

春节折腾了4天,终于用上了win11和matlab2023b

这个春节折腾了4天&#xff0c;终于与时俱进用上了win11和matlab2023b。 新购的硬盘&#xff0c;顺丰快递给力2天半到手。 先折腾硬盘&#xff0c;连线&#xff0c;没有盘符&#xff0c;使用管理&#xff0c;初始化&#xff0c;格式化&#xff0c;新建卷。下载win11&#xff0…