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

什么是复用?

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

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

例子:串口1为例

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

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

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

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

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

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

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

何时开启AFIO时钟?

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

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

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

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

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

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

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

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

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

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

  1. stm32 引脚功能重复_STM32的复用时钟何时开启?

    STM32的AFIO时钟真的是在开启引脚复用功能的时候开启吗?其实并不是~ 什么是复用? 我们知道,STM32有很多外设,这些外设的外部引脚都是与GPIO共用的.我们可以通过软件来配置引脚作为GPIO ...

  2. Modbus RTU 51单片机从机工程源码与昆仑通泰触摸屏测试工程文件。支持485和232串口通信

    Modbus RTU 51单片机从机工程源码与昆仑通泰触摸屏测试工程文件.支持485和232串口通信,该从机源码支持51系列和STC12系列单片机,支持功能码01,02,03,04,05,06,15, ...

  3. Modbus RTU 51单片机从机源码与组态软件通信支持485和232串口通信,该从机源码可直接用于51系列和STC12系列单片机的

    Modbus RTU 51单片机从机源码与组态软件通信支持485和232串口通信,该从机源码可直接用于51系列和STC12系列单片机的,支持功能码01,02,03,04,05,06,0F,10等常用功 ...

  4. USB转网口转485转232转TTL等多接口互转调试工具,无需拨动开关自动切换连接

    USB转网口转485转232转TTL等多接口互转调试工具,无需拨动开关自动切换连接 多接口数据转换器 **本次工具是由博主自主研发的的多接口互转调试工具.主要通讯模式有USB.网口.485.232.T ...

  5. 485转232转换器产品介绍及性能参数介绍

    配有不同标准串行接口的计算机.外部设备或智能仪器之间进行远程数据通信,需要进行标准串行接口的相互转换.485转换器将单端的RS-232信号转换为平衡差分的RS-485或RS-422信号.RS-485. ...

  6. 【STM32学习笔记】(9)——串口通讯(USART)详解

    本文主要参考了野火的零死角玩转STM32和正点原子的STM32F1 开发指南 V1.1(精英板-库函数版本),文章中大部分知识都是从两本书中提取出来,串口通信协议的知识主要参考野火的书籍,而串口实验部 ...

  7. 关于西门子1200使用485或232模块通信问题

    关于西门子1200使用485或232模块通信问题 关于西门子1200使用485或232模块通信问题 模块选用 关于西门子1200使用485或232模块通信问题 西门子1200是西门子PLC系统中取代以 ...

  8. linux 串口读取陀螺仪,stm32读取陀螺仪MPU6050发送数据到串口

    [实例简介] IAR环境下,stm32读取MPU6050数据,发送到串口. [实例截图] [核心代码] 6b42b05e-a094-444f-b033-eda513b6cc49 └── tly01 ├ ...

  9. CreateFile系类异步、并行(同一个串口发送接收)

    在Windows系统下,串口数据收发CreateFile系类方法对于我来说是最好用的方法,采用异步机制保证了串口读或写入不会使代码停在串口函数内(停在串口函数内原因可能是串口线的原因,或者串口没打开( ...

最新文章

  1. Mustache.js和Handlebars.js有什么区别?
  2. Python: max和min函数的高级使用
  3. Nginx——域名|端口|目录请求转发配置DEMO
  4. 10个相见恨晚的 Java 在线练手项目
  5. linux系统登陆问题,Linux之登陆问题
  6. CygWin遇到WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED解决方法
  7. php校企合作综合实习管理系统的设计与实现
  8. java 验证码 库_iCaptcha-Java验证码库
  9. java myqq ui_GitHub - 744184755/myqq: Java版SWing“高”仿QQ即时通聊天系统
  10. TeamViewer远程控制软件,让你享受远程办公的便利
  11. java开发自学怎么样_Java工程师的薪资待遇怎么样,自学Java开发可以吗?
  12. 医疗器械安规三项是什么?1、漏电流测试 IEC60950-1 2、电介质强度测试=耐压测试?GB9706 3、保护接地电阻测试=保护接地 ?GB9706
  13. 转载Flickr 网站架构分析
  14. kalibr_calibrate_cameras 卡在 Extracting calibration target corners
  15. 朱松纯团队工作登上 Science 头条—AI“读懂”人类价值观
  16. python画五角星代码_Python GUI 编程tkinter--画五角星和简单的动画制作
  17. codeigniter linux url 大写,CodeIgniter中使用Smarty3基本配置
  18. 144G在线网页制作html系统源码下载
  19. 屏蔽拦截广告(二、Android软件推荐)
  20. 关于图片存储格式的整理(BMP)

热门文章

  1. Android 6.0及以上版本动态申请权限,11权限
  2. mpvue 从零开始 女友初成长 0
  3. 11G数据库导入10G的操作实践
  4. html不支持ie7,解决IE6/IE7/IE8不支持before,after问题
  5. centos7 firewall防火墙实现映射其他机器的端口
  6. java 正则表达式的使用
  7. java命令行 引用jar包_java命令行引用jar包
  8. IT职业就业-学长有话说(二)
  9. freeRTOS V10.0.1移植到STM32F407标准库 - 环境Keil5
  10. Java基础_0206:方法的定义与使用