STM32基础篇:AFIO × 查表重映射 × AFIO库函数

news2024/12/26 0:57:47

AFIO简介

AFIO,直译为:复用输入输出,是STM32上众多的片上外设之一;我们知道当IO引脚复用功能冲突时,可以通过重映射来解决这个问题,而AFIO就是专门用来执行"复用功能的重映射"的模块(可以看出其名字与功能并不一致)。

注意,IO重映射只是重映射的一种。


查表重映射(流程)

在STM32的芯片上有许许多多的片上外设,其中有一部分片上外设能够使用AFIO模块,对它的复用功能进行重映射。因此,在STM32的参考手册(RM0008)中,不同模块的重映射使用方法分别用一个小节来解释(共12小节,即12个模块的重映射功能),并且是我们编程AFIO的依据。

1、分配引脚功能

假如我们要同时使用定时器1与串口通信(如下图所示),在分配IO引脚时就会发现冲突:定时器1的四个通道(CH1、CH2、CH3、CH4)所对应IO引脚分别为PA8、PA9、PA10、PA11;而串口通信的Px、Tx所对应IO引脚为PA10、PA9,因此两组引脚冲突

此时要通过AFIO解决引脚冲突(重新分配引脚功能),分别查一下这两个片上外设的IO重映射表。如下图所示,为定时器1的重映射表。


2、定时器重映射表

可以看出有3个映射方案:

方案一无重映射重映射值=00使用默认(通用)情况下的IO引脚
方案二部分重映射重映射值=01对模块的一部分引脚重映射
方案三完全重映射重映射值-11对模块的所有引脚重映射

可以看出在此工程下,定时器1无法使用重映射:方案1、2不改变对应的IO引脚;方案3虽然能改变引脚,但对于C8T6芯片而言,不存在GPIOE,故无法使用重映射。


3、串口重映射表

其表格分为两列:

第一列REMAP=0,即无重映射,使用默认的IO引脚;

第二列REMAP=1,进行重映射,IO引脚被改变;

因此可以使用USART1的重映射,来解决引脚冲突的问题。


AFIO的标准库函数

AFIO的驱动程序

在STM32的标准库的文件夹中存在一个一个的模块(h和c文件),例如:GPIO模块的驱动就位于stm32f10x_gpio.h(头文件)和stm32f10x_gpio.c(源文件)这两个文件中。

值得注意的是,AFIO的编程接口同样放在stm32f10x_gpio.h和stm32f10x_gpio.c这两个文件中,也就是说和GPIO驱动放在了一块


AFIO编程接口

AFIO一共有4个编程接口(库函数),如下图所示:


GPIO_PinRemapConfig

要想实现上例工程,需要配置IO引脚的重映射,故使用GPIO_PinRemapConfig函数即可。对于GPIO_PinRemapConfig函数,有两个参数,第一个为需要配置重映射的具体模块和方案;第二个为开启/关闭选择

以定时器1为例:参数GPIO_PartialRemap_TIM1是指定时器1模块、方案2;GPIO_FullRemap_TIM1指定时器1、方案3。


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

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

相关文章

Qt 线程同步机制 互斥锁 信号量 条件变量 读写锁

qt线程同步 Qt提供了丰富的线程同步机制来帮助开发者更高效和安全地进行多线程编程。其主要包括: QMutex:为共享数据提供互斥访问能力,避免同时写入导致的数据冲突。利用lock()/unlock()方法实现锁定和解锁。 QReadWriteLock:读写锁,允许多个读线程同时访问,但写操作需要独占…

pytest-yaml-sanmu(六):YAML数据驱动测试

如果说 pytest 中哪些标记使用得最多,那无疑是 parametrize 了, 它为用例实现了参数化测试的能力,进而实现了数据驱动测试的能力。 1. 使用标记 parametrize 的使用需要提高两个内容: 参数名 参数值 pytest 在执行用例时&…

MemFire Cloud: 一种全新定义后端即服务的解决方案

在这个快节奏的互联网时代,开发者们最希望的就是能够省时省力地完成项目,快速上线。然而,搭建服务、开发接口API、处理各种后端问题,往往让人头疼不已。别担心,现在有了MemFire Cloud,一款为懒人开发者量身…

Java并发关键字

并发关键字 关键字: synchronized详解关键字: volatile详解关键字: final详解 # Synchronized可以作用在哪里? 对象锁方法锁类锁 # Synchronized本质上是通过什么保证线程安全的? 加锁和释放锁的原理 深入JVM看字节码,创建如下的代码: public cl…

C#中简单Socket编程

C#中简单Socket编程 Socket分为面向连接的套接字(TCP套接字)和面向消息的套接字(UDP 套接字)。我们平时的网络编程是对Socket进行操作。 接下来,我用C#语言来进行简单的TCP通信和UDP通信。 一、TCP通信 新建项目SocketTest,首先添加TCP通信的客户端代…

AWS 云安全性:检测 SSH 暴力攻击

由于开源、低成本、可靠性和灵活性等优势,云基础设施主要由基于linux的机器主导,然而,它们也不能幸免于黑客的攻击,从而影响云的安全性。攻击Linux机器最流行的方法之一是通过SSH通道。 什么是 SSH 安全外壳协议(Sec…

区域特征检测工具的使用

区域特征检测工具的使用 选择区域-》右键-》工具->特征检测

Java核心技术【二十二】Java的I/O流处理:深入文件读写操作、缓冲流、序列化与NIO

Java的I/O流处理:深入文件读写操作、缓冲流、序列化 在Java编程中,I/O流是处理输入输出操作的基础,特别是在文件读写、网络通信等领域。本文将在前文的基础上,进一步探讨缓冲流、序列化以及NIO(New I/O)在…

机器人伦理分析:从扫地机器人到智能伙伴

我发过一个泡泡:机器人和扫地机器人。 意犹未尽,我觉得这是一个值得讨论下去的话题。或者是未来话题 在科技迅猛发展的今天,机器人已经从简单的执行工具演变为能够执行复杂任务的智能实体。特别是在家庭环境中,扫地机器人已经成为…

6.MkDocs附录

安装插件 在 MkDocs 中,插件通常是通过 pip​ 工具安装的。你可以使用以下步骤来安装和配置 MkDocs 插件。 1.使用 pip​ 命令安装你需要的插件。例如 pip install pymdown-extensions‍ 2.更新 mkdocs.yml​ 文件。 ‍ 3.使用 mkdocs serve​ 命令本地预览你…

Python30 使用Gensim库实现Word2Vec对文本进行处理

1.Word2Vec Word2Vec 是一种将词语表示为向量的技术,能够捕捉词语之间的语义关系。它由 Google 的 Tomas Mikolov 等人在 2013 年提出,广泛应用于自然语言处理任务中。其核心概念主要包括: 词嵌入(Word Embeddings) …

如何通过文件分发系统,实现能源电力企业文件的安全分发流转?

随着企业业务的快速发展,能源电力企业会在全国乃至全球,设立总部-分部-办事处/网点等多层级的结构,因此会涉及自动化的文件分发的业务场景。文件分发系统是一种将文件从一个地方自动传输到多个接收者的过程,可以提高工作效率&…

寂静孤独的404页面源码

寂静孤独的404页面源码,灯光闪烁动态效果,源码由HTMLCSSJS组成,记事本打开源码文件可以进行内容文字之类的修改,双击html文件可以本地运行效果,也可以上传到服务器里面,重定向这个界面 寂静孤独的404页面源…

禁用华为小米?微软中国免费送iPhone15

微软中国将禁用华为和小米手机,要求员工必须使用iPhone。如果还没有iPhone,公司直接免费送你全新的iPhone 15! 、 这几天在微软热度最高的话题就是这个免费发iPhone,很多员工,收到公司的通知。因为,登录公司…

24/7/10总结

flex布局 父项常见属性 justify-content:设置主轴上的子元素排列方式 flex-wrap:设置子元素是否换行 align-items:设置侧轴上的子元素的排列方式(单行) 拉伸要把子盒子里的高度给去掉 如果两个align-items都是center并且主轴是y轴就是这种效果…

FullCalendar的使用,react日历组件

1.下载 yarn add fullcalendar/core fullcalendar/react fullcalendar/daygrid 2.运行 import React from react; import FullCalendar from "fullcalendar/react"; import dayGridPlugin from "fullcalendar/daygrid";const ExperimentalSchedule () …

matlab仿真 信道(下)

(内容源自详解MATLAB/SIMULINK 通信系统建模与仿真 刘学勇编著第四章内容,有兴趣的读者请阅读原书) 之前的内容还剩下simulink的仿真过程。 3.simulink中的AWGN模块仿真 系统框图如图所示,TX和RX 模块需要单独实现…

使用esptool工具备份ESP32的固件(从芯片中备份下来固件)

本文以Windows电脑为例 板子为esp32-c3 1下载python 可在官网中下载,此处不进行讲解 使用如下代码查看是否安装了 Python(终端输入) python 2下载esptool 在终端输入如下代码即可下载 使用 pip(推荐): 在你已经安装的 Pyth…

【面试题】正向代理和反向代理的区别?

正向代理(Forward Proxy)和反向代理(Reverse Proxy)是两种常见的代理服务器类型,它们在网络通信中扮演着不同的角色,具有不同的功能和应用场景。 一、正向代理 1. 定义与位置 正向代理是位于客户端和目标…

Python基础知识——(003)

文章目录 P12——11. 保留字和标识符 1. 保留字 2. Python标识符的命名规则(必须遵守) 3. Python标识符的命名规范(建议遵守) P13——12. 变量与常量 变量的语法结构 变量命名应遵循以下几条规则 常量 P14——13. 数值类型…