stm32 485和232可以用同一个串口吗_STM32的复用时钟何时开启?

STM32的AFIO时钟真的是在开启引脚复用功能的时候开启吗?其实并不是~

什么是复用?

我们知道,STM32有很多外设,这些外设的外部引脚都是与GPIO共用的。我们可以通过软件来配置引脚作为GPIO引脚还是作为外设引脚。当引脚配置为外设引脚时就叫做复用。如串口默认复用的引脚为:

a3bdb6737d2fbe076b17e3cc15c07e5a.png

PA9、PA10引脚可配置为普通IO,也可配置为串口引脚(PA9为TX,PA10为RX)。

例子:串口1为例

关于外设的配置可查阅:《STM32参考手册》关于通用和复用功能I/O(GPIO和AFIO) 的章节,如串口引脚配置如下:

ff2e1b509075faf8cdb08ae88fb33f1e.png

我们可能经常看到一些代码(基于STM32F103ZET6)的串口配置如下:

b2ead49746d56abce8e69a7043f17d3f.png

看到这里开启了AFIO时钟,让我疑惑了一下,为什么SPI相关的引脚也配置为复用但并没有开启APIO时钟也能正常工作。所以AFIO时钟应该什么时候开呢?

我们回顾一下,我们为什么要开启时钟呢?因为我们要对芯片内部的硬件进行控制(读写其寄存器),要控制哪一部分,就要开启那一部分的时钟。

本例中,使能GPIOA、USART1的时钟是因为我们要对GPIOA、USART1相关的寄存器进行操作。那么AFIO呢?其管理的寄存器有哪些呢?从参考手册关于通用和复用功能I/O(GPIO和AFIO)这一章节可以看到AFIO管理的寄存器如下:

92cb316fc63e0536a351adc7bb9f90d7.png

可以知道,本例对USART1进行配置,并没有涉及到AFIO相关的寄存器,所以并不需要打开AFIO时钟!

所以这里的第7行代码可以删掉。当然不删也可以正常工作,但是会白白增加能耗、写无用代码(白白浪费程序存储器空间)而已!

何时开启AFIO时钟?

按照上面分析的,当然是要操作AFIO相关的寄存器的时候才开启AFIO时钟。此处依旧以串口为例。我们看到AFIO管理的寄存器中有复用重映射和调试I/O配置寄存器(AFIO_MAPR) 这一寄存器,这个寄存器怎么用呢?

首先,我们要知道什么是重映射。

使用重映射功能可以把一些复用功能重新映射到其他引脚上,在某些时候可以方便板级硬件的布局设计。设置AFIO_MAPR寄存器实现引脚的重新映射。此时,复用功能不再映射到它们的原始分配上。 可以重映射到任意引脚吗?其实是有规定的,可查阅参考手册,如串口1的重映射:

ab4af7042ce55bfe2feb92d75c3ca75d.png

我们可以配置PB6、PB7作为串口1的TX、RX引脚,具体配置代码如下:

4ded16123aa7da6e9f313be0e9b83485.png

这里得调用一个重映射配置函数GPIO_PinRemapConfig,可在这个函数在stm32f10x_gpio.c中,如下:

5d58ee16e8d53798509dd868d417ff81.png

其中第一个参数为要重映射的外设,可在stm32f10x_gpio.h中查看:

0df1f4f7042d8a08e899ed7309ed15de.png

其中重映射又分为部分重映射和完全重映射,区别就是要重映射全部的引脚还是部分引脚,这也是有规定的。比如定时器1:

58b8f0fb8a1230d15456603255b8dd18.png

我们从GPIO_PinRemapConfig函数的实现中可以看到我们需要操控AFIO_MAPR寄存器,所以需要开启AFIO时钟。

综上,需要操控AFIO管理的寄存器才需开启AFIO时钟,否则不需要开启。

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

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

相关文章

php 简析对象,PHP白盒审计工具RIPS源码简析

RIPS是一款对PHP源码进行风险扫描的工具,其对代码扫描的方式是常规的正则匹配,确定sink点;还是如flowdroid构建全局数据流图,并分析存储全局数据可达路径;下面就从其源码上略探一二。1、扫描流程分析其源码前&#xff…

左右伸缩_冬季装修为啥要留伸缩缝?等到天热地板开裂就晚了!合肥人注意下...

后台有粉丝问:冬天真的不适合做装修吗?假的,这句话不要再传了。每个季节都会有利有弊,只不过冬季施工过程中干燥的比较快,装修的时候对施工要求的更严格。就拿伸缩缝来说吧,冬天装修时不注意,等…

红色警戒2修改器原理百科(七)

(十五)科技全开——前方高能,BOOM 其实这一小节,最晚应该在第四篇的十小节来讲述的,这样是按照一条线索来讲的,容易理解和把握笔者修改时的思路,以一点逐渐扩大。由于笔者的一些原因&#xff08…

wpf click事件在触摸屏上点击第一次没反应_你的PLC和你的触摸屏为什么总是通讯不上?...

三菱PLC全系列资料免费送啦!想要撩我(点击上方红字,免费领资料)很多师傅有以下这些问题,其实除去厂家自行定义的通讯方式外,我们在做项目的时候最常用的通讯方式,通讯不上无非就是这几个原因是否选择正确通讯协议(modb…

ubuntu 开放端口_Masscan端口扫描工具使用小手册

1Masscan介绍1.1 Masscan简介1) nmap是端口扫描仪的合法王位,而今天仍然是最通用的选择。但对于纯粹的速度也有一些已经超越了它,包括scanrand,unicornscan,zmap,和现在的masscan(https://github.com/robertdavidgraha…

hdu4277 暴力

hdu4277 暴力 USACO ORZ Time Limit : 5000/1500ms (Java/Other) Memory Limit : 32768/32768K (Java/Other) Total Submission(s) : 4 Accepted Submission(s) : 2 Problem DescriptionLike everyone, cows enjoy variety. Their current fancy is new shapes for pastu…

多线程设置操作时间间隔_听说,有位Java程序员学完这59道多线程面试题之后,直接面上阿里...

前言多线程是指从软件或者硬件上实现多个线程并发执行的技术。具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程,进而提升整体处理性能。具有这种能力的系统包括对称多处理机、多核心处理器以及芯片级多处理或同时多线程处理器。软件多线程&…

svm多分类代码_监督学习——分类算法I

本文是监督学习分类算法的第一部分,简单介绍对样本进行分类的算法,包括判别分析(DA)支持向量机(SVM)随机梯度下降分类(SGD)K近邻分类(KNN)朴素贝叶斯分类(NaiveBayes)判别分析(Discriminant Analysis) 判别分析是基于条件概率的分类方法,可以…

oracle awr报告提取,Oracle AWR报告提取方法

默认情况下,oracle是启用数据库统计收集这项功能(AWR)通过show parameter statistics_level来判断是否启用值为TYPICAL或者ALL表示启用AWR值为BASIC,表示禁用AWR1.当前连接实例的AWR报告提取:?/rdbms/admin/awrrpt以sysdba身份登录。SQL>…

关键词组合工具_SEO学习:如何挖掘行业关键词?关键词挖掘策略和工具推荐

关键词是驱动流量增长的基础!挖掘关键词是SEO工作的重中之重。如何快速挖掘到行业相关的所有关键词?我们一起了解下。本文大纲如下:拓展和筛选网站主词挖掘搜索引擎推荐关键词业务相关词的挖掘同行关键词的挖掘关键词组合拓展1、拓展和筛选网…

活体检测python_活体检测很复杂?仅使用opencv就能实现!(附源码)!

摘要: 活体检测在各行各业应用比较广泛,如何实现一个活体检测系统呢?早期实现很困难,现在仅使用opencv即可实现,快来尝试一下吧。什么是活体检测,为什么需要它?随着时代的发展,人脸识…

oracle安装命令大全,oracle安装教程及常用命令

虽然网上已经有很多安装教程了,但还是写一个记录一下自己的安装过程以及遇到问题的解决办法1 安装包下载:去oracle的官网 选择DownLoads->database->oracle database:选择接受选择Windows 64的下载,选择file1,和file2,注意两个文件都要下载,下载时要求登录,有oracle账户的…

规格选择_日常使用的拉杆箱脚轮选择哪种规格最合适?

大家可能在采购拉杆箱脚轮的时候,都会有一个问题,拉杆箱脚轮规格选择哪种比较好呢?万向轮好还是单向轮?是万向轮还是单向轮比较耐磨?脚轮厂家诺贝小编接收到大家的疑问,接下来将告诉大家拉杆箱脚轮选择的规…

ERROR: JDWP Transport dt_socket failed to initialize, TRANSPORT_INIT(510)

1   ERROR: transport error 202: bind failed 2 ERROR: JDWP Transport dt_socket failed to initialize, TRANSPORT_INIT(510) 3 JDWP exit error AGENT_ERROR_TRANSPORT_INIT(197): No transports initialized [../../../src/share/back/debugInit.c:690] 4 …

php session存到redis,php Session存储到Redis的方法

php Session存储到Redis的方法当然要写先安装php的扩展,可参考这篇文章:Redis及PHP扩展安装修改php.ini的设置复制代码 代码如下:session.save_handler redissession.save_path “tcp://127.0.0.1:6379″修改后重启php-fpm或nginx,phpinfo(…

ajax ssm 页面跳转_SSM框架的面试常见问题

阅读文本大概需要9分钟。一、Spring面试题1、Spring 在ssm中起什么作用?Spring:轻量级框架作用:Bean工厂,用来管理Bean的生命周期和框架集成。两大核心:IOC/DI(控制反转/依赖注入) :把dao依赖注入到service…

运维工程师绩效考核表_IT运维存在问题及改进

欢迎大家一起学习交流https://t.zsxq.com/imimAYF​t.zsxq.com1.1 IT运维机制不完善,流程操作层面缺乏统一 没有建立起稳定、规范的IT运维机制。现有的IT运维流程的操作层面缺乏统一。如事件单提交之后,事件预判和优先级的设定缺少统一、规范的指导文档&…

在linux中 要删除abc目录,操作系统原理与应用(linux)A卷

福州外语外贸职业技术学院2010-2011学年第一学期(期末)试卷09 级网络系统管理专业操作系统原理与应用(linux)科目(A )卷课程代码考试形式闭卷考试时量 120 分钟姓名__ _______ _级班学号____ __1.操作系统是一种( )A.系统软件B.系统硬件C.应用软件D.支援软件2.MS—DOS的存贮管理…

数据产品经理修炼手册pdf_【尼读书】数据产品经理修炼手册(附思维导图)

前言:进入一个行业,除了要多在工作中实践和思考之外,还需要多读书。这样能够站在一个更高的角度去看问题,往往会对问题有更全面的掌握和新的认知。在【尼读书】这个栏目中,尼同学通过自己读书后的理解和整理与大家分享…

WebStorm 预览时把浏览器地址localhost 改成IP

最近在使用WebStorm时,预览网页时地址总是显示的 http://localhost:63342/... ,如果要调试其它设备感觉很不方法,此时肯定首先想到的亲爱的度娘,但是貌似没有真正很解决问题的(可能是我搜索方法不对)。最后…