【STM32】一些外设通用内容

news2024/9/22 21:28:08

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

目录

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.coloradmin.cn/o/2068690.html

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

相关文章

SpringCache源码解析(一)

一、springCache如何实现自动装配 SpringBoot 确实是通过 spring.factories 文件实现自动配置的。Spring Cache 也是遵循这一机制来实现自动装配的。 具体来说,Spring Cache 的自动装配是通过 org.springframework.boot.autoconfigure.cache.CacheAutoConfiguration 这个类来…

文件树控件开发

文件树控件和获取驱动信息功能 然后添加上查看文件信息的按钮 双击这个按钮添加上如下代码 void CRemoteClientDlg::OnBnClickedBtnFileinfo() {int ret SendCommandPacket(1);if (ret -1) {AfxMessageBox(_T("命令处理失败!!!"));return;}ClientSocket* pClient…

c++每日练习记录5-(链表的结尾指向nullptr)

解题方法&#xff1a;双指针法 ListNode *partition(ListNode *head, int x){ListNode *head1 new ListNode(0);ListNode *head2 head1;ListNode *head3 new ListNode(0);ListNode *head4 head3;while (head! nullptr){if (head->val < x){head1->next head;head…

成品CNC外壳的巧妙使用

有些时候10块买一个CNC外壳&#xff0c;钻个孔&#xff0c;比单独的3D打印更能提升板子的档次感&#xff1a; 这个CNC是真的好看&#xff0c;再加上3D打印辅助设计&#xff0c;堪称精美&#xff1a;

k8s安装Metabase开源报表系统

metabase是什么&#xff1f; metabase是一款开源的简易但强大同时又无缝兼容大数据和传统数据库的分析工具&#xff0c;帮助公司每一个人对企业数据的学习挖掘&#xff0c;进而达到更好的数据化运营和决策。 Metabase is a simple and powerful analytics tool which lets anyo…

热血传奇1.76版本完美仿官单机版安装教程+GM工具+无需虚拟机

今天给大家带来一款单机游戏的架设&#xff1a;热血传奇1.76版本完美仿官。 另外&#xff1a;本人承接各种游戏架设&#xff08;单机联网&#xff09; 本人为了学习和研究软件内含的设计思想和原理&#xff0c;带了架设教程仅供娱乐。 教程是本人亲自搭建成功的&#xff0c;…

软件上显示“mfc140.dll丢失”错误信息?那么mfc140.dll丢失该如何修复

mfc140.dll是 Microsoft Foundation Class (MFC) 库的一部分&#xff0c;这个库被用于基于 C 的 Windows 应用程序的开发。当 Windows 或软件上显示“mfc140.dll丢失”或“找不到 mfc140.dll”这类错误信息时&#xff0c;表示你的系统可能缺少与 Visual C 相关的组件或这些组件…

软考:软件设计师 — 14.算法基础

十四. 算法基础 1. 算法的特性 算法是对特定问题求解步骤的描述&#xff0c;它是指令的有限序列&#xff0c;其中每一条指令表示一个或多个操作。 有穷性&#xff1a;执行有穷步之后结束&#xff0c;且每一步都可在有穷时间内完成。确定性&#xff1a;算法中每一条指令必须有…

代码随想录算法训练营第三十五天 | 416. 分割等和子集

416. 分割等和子集 题目链接&#xff1a;力扣题目链接 文章讲解&#xff1a;代码随想录 视频讲解&#xff1a;动态规划之背包问题&#xff0c;这个包能装满吗&#xff1f;| LeetCode&#xff1a;416.分割等和子集 给定一个只包含正整数的非空数组。是否可以将这个数组分割…

面向对象01:类和对象的创建

本节内容视频链接&#xff1a;面向对象04&#xff1a;类与对象的创建_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV12J41137hu?p63&vd_sourceb5775c3a4ea16a5306db9c7c1c1486b5 1.类、对象定义及关系 类&#xff08;‌Class&#xff09;‌是一个模板或蓝图&#…

如何规避DDoS攻击带来的风险?服务器DDoS防御软件科普

DDoS攻击是目前最常见的网络攻击方式之一。其见效快、成本低的特点&#xff0c;使它深受不法分子的“喜爱”。对于未受保护的企业来说&#xff0c;每次DDoS攻击的平均成本为20万美元&#xff0c;当DDoS攻击汹涌而至&#xff0c;缺失详细的保护预案&#xff0c;企业很可能会陷入…

erlang学习:gen_server书上案例22.6练习题4

昨天没有输出Fun中的io的原因是因为在任务函数中没有调用Fun方法&#xff0c;相当于只传了Fun函数但是没有进行调用&#xff0c;因此没有执行Fun函数&#xff0c;所以控制台中没有进行io的输出&#xff0c;今天在add_job中调用了Fun方法并执行&#xff0c;所以输出了相应的io。…

图像数据处理22

五、边缘检测 5.4 Hough变换 该技术主要用于检测图像中的基本形状&#xff0c;如直线、圆、椭圆等。 Hough变换的基本原理 Hough变换的基本原理是将图像空间中的直线或曲线变换到参数空间中&#xff0c;通过检测参数空间中的极值点&#xff08;局部最大值&#xff09;&…

自制镜像(贫穷版)

在装了docker的机子root目录操作 mkdir -p docker-images/tomcat-image/ cd docker-images/tomcat-image/ 把这两个红框的拉到docker-images/tomcat-image/ vim Dockerfile #导入基础镜像 from centos:7 #定义作者 maintainer GGBond<2958458916qq.com&…

SpringCloudGateway重写负载均衡策略

背景 gateway中多实例请求转发&#xff0c;默认采用轮训转发策略。在有些场景下&#xff0c;某些请求想固定到某一台实例上&#xff0c;这里通过重写默认负载均衡策略的方式实现。 以下代码为&#xff0c;大文件分片上传&#xff0c;多实例场景&#xff0c;根据文件md5和实例…

OpenCV c++ 实现图像马赛克效果

VS2022配置OpenCV环境 关于OpenCV在VS2022上配置的教程可以参考&#xff1a;VS2022 配置OpenCV开发环境详细教程 图像马赛克 图像马赛克&#xff08;Image Mosaic&#xff09;的原理基于将图像的特定区域替换为像素块&#xff0c;这些像素块可以是纯色或者平均色&#xff0c…

行业智能化的“火车头效应”,由星河AI金融网络启动

相信大多数人都认可&#xff0c;在行业智能化的列车中&#xff0c;金融是毋庸置疑的“火车头”。 有数据显示&#xff0c;目前AI整体渗透率只有4%&#xff0c;不同行业的AI渗透度有极大差异。其中&#xff0c;金融由于数字基础好&#xff0c;拥抱新技术的意愿强烈&#xff0c;成…

QT中通过Tcp协议的多线程的文件传输(服务器)

首先新建一个项目命名为SendClientSever 因为要进行网络通信&#xff0c;在pro文件的第一行代码中添加network 一、窗口设计 拖一个Widget里面放入label,lineEdit,pushbutton&#xff0c;名称如图修改 程序设计 子线程recvfile类 新建一个类用来执行子线程 将新建的类的头…

2-74 基于matlab的图像k-means聚类GUI

基于matlab的图像k-means聚类GUI&#xff0c;可对彩色图像进行Kmeans和meanshift进行聚类分析&#xff0c;生成最后的聚类图像以及聚类中心的迭代轨迹。程序已调通&#xff0c;可直接运行。 2-74 matlab GUI - 小红书 (xiaohongshu.com)