【STM32】一些外设通用内容

在学习各种外设的过程中,发现外设有一些通用的东西可以总结一下,后面发现再继续更新。图来源于正点原子的学习视频和PPT。

 专栏目录:记录自己的嵌入式学习之路-CSDN博客


目录

1    外设的时钟的开启

2    外设初始化的回调机制

3    外设的中断服务函数

4    HAL库中断回调机制

5    函数的常见传入参数类型

5.1    PPP_TypeDef*

5.2    PPP_InitTypeDef*

5.3    PPP_HandleTypeDef*

5.4    XXX_IRQn

6    标志位操作

6.1    获取标志位

6.2    清除标志位

7    外设源文件的导入

8    中断发生后需要手动重新开启中断的外设

9    外设引脚的极性判断(高/低电平有效)

10    外设引脚的编号


1    外设的时钟的开启

每个外设要使用,就必须开启其时钟,开启时钟的函数调用格式为:

__HAL_RCC_PPP_CLK_ENABLE();

平时也可以随用随查,在stm32f1xx_hal_rcc.h中。


2    外设初始化的回调机制

初始化回调函数的一般定义格式:

void HAL_PPP_MspInit(…);

可以从外设的库.c文件中找。

在使用HAL库的外设初始化函数时,其会默认调用其对应的MSP回调函数。默认情况下MSP回调函数内容为空,且被__weak修饰,其作用是让用户对其进行重写,以实现用户的自定义配置功能。

在STM32官方例程(不是正点原子的例程)中,其在USER文件夹中有一个stm32f1xx_hal_msp.c专门用于存放重写的各外设MSP回调函数。但实际上这样做的话,该文件会过于臃肿,因此一般在外设的BSP文件夹对应的外设.c文件中进行重写。


3    外设的中断服务函数

在遇到外设中断时系统会自动调用,中断服务函数的一般定义格式是:

void PPP_IRQHandler(void);

在芯片的启动文件(如startup_stm32103xe.s)中从中断向量表中找。

而在中断服务函数中,用户需要调用HAL库公共中断数据处理函数,其一般调用格式为:

HAL_PPP_IRQHandler();

可以从外设的库.c文件中找。


4    HAL库中断回调机制

中断回调函数的一般定义格式:

HAL_PPP_xxxCallback(…);

可以从外设的库.c文件中找。

外设的中断服务函数中,同样调用了一个__weak修饰的回调函数,这个回调是系统用来给用户重写然后实现其在中断过程中执行的一些自定义操作的。如果觉得不方便重写,就直接在重写中断服务函数的时候调用自己的处理逻辑就行了,不重写回调也可以。
在官方例程(不是正点原子的例程)中,各外设的中断服务函数及其回调函数都是统一放在stm32_f1xx_it.c中。一般自己写项目也不放在这个文件中,太庞大和混乱了。


5    函数的常见传入参数类型

5.1    PPP_TypeDef*

外设PPP的基地址,如GPIO_A,可在芯片型号.h(如stm32f103xe.h)文件中找到。

5.2    PPP_InitTypeDef*

用于外设初始化的结构体指针,其中一般包含了该外设初始化所需要的参数和配置,需要用户对结构体中所有需要配置的成员进行配置(部分成员可能根据模式的不同,无需配置)。可在外设.h文件找到。

5.3    PPP_HandleTypeDef*

外设句柄,一般包含了一些初始化时需要用到的东西以及外设工作过程中的可变参数(Maybe)。可在外设.h文件找到。

一般句柄的结构体中只有前两个成员是需要进行手工初始化的,第一个是外设的基地址PPP_TypeDef,另一个是初始化结构体PPP_InitTypeDef。其他的有可能和外设工作过程中的东西有关。

5.4    XXX_IRQn

中断名称,可以去芯片名.h文件(如stm32f103xe.h)中找。


6    标志位操作

一般用于获取状态和清除状态。

6.1    获取标志位

__HAL_PPP_GET_FLAG()

用法如:

__HAL_RCC_GET_FLAG(RRC_FLAG_WWDGRST);

6.2    清除标志位

__HAL_PPP_CLEAR_FLAG

用法如:

__HAL_TIM_CLEAR_FLAG(&tim_ic_handle, TIM_FLAG_CC2);

7    外设源文件的导入

若需要使用某个库的时候发现Keil的Function(如下)没有对应的.c文件,那就意味着需要手动添加了。

手动添加步骤如下:

  1. Project中双击HAL_Driver文件夹(如下)
  2.  在真正的电脑文件夹中选中项目目录中HAL_Driver文件夹中需要用到的外设对应的.c文件,如下:

8    中断发生后需要手动重新开启中断的外设

  1. U(S)ART的Receive_IT中断
  2. DMA的传输完成中断

9    外设引脚的极性判断(高/低电平有效)

在原理图中,若引脚后有#号或者引脚名上有横线,就意味着该引脚低电平有效,如下图为低电平有效的写保护引脚以及低电平有效的片选引脚:


10    外设引脚的编号

一般切角、有小圆点(同时有一大一小的看小的那个)的为1号引脚,其他引脚按照逆时针顺序排列。还有一些特殊情况,参见这位大佬的文章: 芯片引脚1的识别方法和技巧_tps565201芯片 如何通过丝印确定第一脚-CSDN博客

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

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

相关文章

【HuggingFace Transformers】LlamaDecoderLayer源码解析

LlamaDecoderLayer源码解析 1. LlamaDecoderLayer 介绍2. LlamaDecoderLayer 类源码解析 1. LlamaDecoderLayer 介绍 LlamaDecoderLayer 是 LLaMA 模型中的一个关键组件,它结合了自注意力机制、全连接层和残差连接,以及对输入数据的归一化。主要流程为&…

使用 树莓派3B+ 对日本葡萄园进行经济实惠的环境监测

对于 菊岛邦夫—Vineyard Kikushima 而言,Raspberry Pi 生态系统提供了支持和信息,通过基于温度和湿度监测的有针对性的最低限度杀虫剂方案,来提高葡萄的健康产量。 Vineyard Kikushima:http://vykikushima.greater.jp/vineyards…

Ps:工具预设面板

Ps菜单:窗口/工具预设 Window/Tool Presets 工具预设 Tool Presets面板可以为 Photoshop 的图像编辑工作带来极大的便利。 定义好相关的工具预设后,可以直接调用,而不管现在处于什么工具或什么样的参数状态,省去了再次设置参数的麻…

Spring Boot简介与体系知识导图

Spring Boot是Spring开源组织下的一个子项目,是一个基于Spring框架的快速开发脚手架,它极大地简化了Spring应用的初始化和搭建过程,为开发者提供了快速、简单的方式来开发、部署和管理Spring应用。以下是关于Spring Boot的详细介绍&#xff1…

【MRI基础】对比度噪声比CNR概念

​ CNR代表 MRI 中的对比度噪声比。它是通过测量不同组织或感兴趣区域 (ROI) 相对于背景噪声的对比度来评估 MRI 图像质量的指标。更高的 CNR 表示更好的图像质量,因为它表示被比较的区域之间的区别更清晰。 CNR,contrast to noise ratio 基本概念 对比…

【数据结构】-----哈希

目录 一、哈希表概念 二、哈希函数 三、哈希冲突 Ⅰ、定义 Ⅱ、解决 ①闭散列--开放定址法 线性探测 二次线性探测 ②开散列--链地址法(哈希桶) 问题:哈希表何时扩容? 一、哈希表概念 哈希表又称散列表,它是一…

暄桐教室分享“闲人”指南

一种理想的生活状态,叫“做个闲人”,如苏东坡《行香子述怀》那般,“对一张琴,一壶酒,一溪云”,放下纷扰,好自在。然而,闲并不是简单的无事可做,让自己时光充沛、能量聚集…

【JavaEE初阶】HTTP请求(Request)

📕引言 HTTP 请求报文由请求行、请求头部、空行 和 请求包体 4 个部分组成 本片文章将从以下四个方面对HTTP请求报文进行解析 URL方法请求报头正文 🎄认识URL 我们先抓一个包来看一下URL在包里面的位置 平时我们俗称的 “网址” 其实就是说的 URL (…

SVN提取子目录到新库(附带提交历史)方法

plan-A: 以下命令需要直接在服务器上操作&#xff1a; 1、转存test_repo仓库 svnadmin dump test_repo > test_repo.dump 2、筛选指定子目录 svndumpfilter --drop-all-empty-revs include test_dir <test_repo.dump> test_repo_test_dir.dump --drop-all-empty…

MacOS通过Docker部署安装zookeeper、dubbo-admin,以及Docker Desktop进行管理

1.建立一个网络桥接zk docker network create -d bridge zk我们通过docker安装dubbo-admin和zookeeper,为了保证他们能够正常通信,需要使用同一个网络 2.创建zookeeper的docker卷 docker volume create zookeeper_data 3.启动zookeeper,并指定网络和卷 docker run -d \--n…

互联网热门项目聚合系统,集中热门互联网项目开发的小程序,支持H5,小程序

目录 前言&#xff1a; 一、互联网热门项目聚合系统模式&#xff1f; 二、怎么搭建自己的聚合cps联盟cpa平台 三、操作方式 四、模板 前言&#xff1a; 小程序平台上包含了CPA拉新 、短剧、小说&#xff0c;外卖&#xff0c;打车&#xff0c;旅游&#xff0c;话费充值&…

Qt调用外部exe并嵌入到Qt界面中(验证成功的成功)

http://t.csdnimg.cn/CDsqQ 原作者在这里 本文章主要介绍如何用Qt调用其他应用的exe,并将窗口嵌入到Qt界面中。很多人查到的代码都能成功的将exe调用起来&#xff0c;但是嵌入不到窗口中。主要有两种原因&#xff0c;现在从头到尾的梳理一下。 1.主要代码 1.1启动exe //包含…

vulhub xxe靶机

先用御剑扫描出ip然后进入网页 进入robots.txt里面会发现俩个目录然后我们进去xxe里面 进入xxe页面进行登录&#xff0c;burp抓包 然后进入重放器 可以看到关于密码和用户名的是xml,那么就可以考虑用xxe注入 <?xml version"1.0" ?> <!DOCTYPE r [ <!…

杰发科技AC7801——Flash模拟EEP内存(2)_备份

1. 默认配置在1000个地址存储1000个数据 配置如下 计算地址 查看地址内容&#xff0c;等到打印完成 计算符合&#xff0c;从0-999共计1000 2. 修改配置在65536地址存储65536个数据 配置还是这个 因为传进去的地址是uint16_t&#xff0c;因此最大值是65536&#xff0c;写65536…

Nvidia主导AI推理竞赛,但新兴对手纷纷崭露头角

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

软考 -- 软件设计师 -- 二轮复习(1) -- 计算机系统基础知识错题集和重点知识(持续更新)

软考 – 软件设计师 – 二轮复习(1) – 计算机系统基础知识错题集和重点知识(持续更新) 文章目录 软考 -- 软件设计师 -- 二轮复习(1) -- 计算机系统基础知识错题集和重点知识(持续更新)前言一、CPU二、内存编址计算三、原码、反码、补码、移码计算四、浮点数 前言 考试时间&a…

给Ubuntu添加硬盘之后,该如何使用

当你给Ubuntu系统添加了新的硬盘后&#xff0c;你需要按照以下步骤来识别、分区、格式化和挂载新硬盘&#xff1a; 1. 检查新硬盘是否被系统识别 首先确认新硬盘已经被系统识别&#xff1a; lsblk 2. 分区新硬盘 如果硬盘没有分区或者需要重新分区&#xff0c;可以使用fdis…

Efficient LoFTR论文阅读(特征匹配)

Efficient LoFTR论文阅读&#xff08;特征匹配&#xff09; 摘要1. 引言2. 相关工作基于检测器的图像匹配无检测器图像匹配 3. 方法3.1. 局部特征提取3.2. 高效的局部特征变换3.3. 准备工作3.4. 聚合注意力机制3.5 粗级匹配模块有效推理策略子像素级细化模块有效的精细特征提取…

【vue、Electron】搭建一个Electron vue项目过程、将前端页面打包成exe 桌面应用

文章目录 前言使用 electron-vue 创建项目1. 安装 vue-cli&#xff08;如果未安装&#xff09;2. 使用 electron-vue 模板创建项目3. 安装和配置 electron-builder4. 运行Electron项目5. 打包应用 可能遇到的问题解决Electron vue首次启动巨慢无法加载执行npm run electron:bui…

数据结构与算法 第3天(栈和队列)

栈和队列也是线性表&#xff0c;限制插入和删除的位置只能在端点 栈&#xff08;stack&#xff09; 后进先出 LIFO 表尾进入&#xff0c;表尾删除 一、案例 案例一&#xff1a;进制转换 例子 159转换成八进制 159/819...7 19/82...3 2/80...2 结果为237 案例二&#xff1a;括…