stm32的afio初始化代码_STM32-IO-AFIO(复用功能IO和调试配置)

最近在学习STM32,在BZ上一篇关于的串口通信文章里有这么一段代码:RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD| RCC_APB2Periph_AFIO,ENABLE);

当初是参考开发的里子写的一直对GPIOD或上“RCC_APB2Periph_AFIO”这句话的意思没搞懂,通过这几天在网上查找资料和看手册,终于高清楚了,不敢独享,希望能对跟我一样的新手有所帮助吧o(∩_∩)o...

STM32上有很多I/O口,也有很多的内置外设想I2C,ADC,ISP,USART等,为了节省引出管脚,这些内置外设基本上是与I/O口共用管脚的,也就是I/O管脚的复用功能。但是STM32还有一特别之处就是:很多复用内置的外设的I/O引脚可以通过重映射功能,从不同的I/O管脚引出,即复用功能的引脚是可通过程序改变的。知道了这些我们就不难理解上面代码的意思了,程序中用到的USART2外设的TX,RX分别对应PA2,PA3,但是我的学习板上的PA2,PA3引脚接了其他设备,但是为了还要用USART2,“RCC_APB2Periph_GPIOD|RCC_APB2Periph_AFIO”就打开了GPIOD重映射功能把USART2设备的TX,RX映射到PD5,PD6上,我们在这两个引脚上接上MAX232串口芯片就可以使用USART2串口通信了。那为看官该问:“USART2是不是可以映射到任意管脚呢?”答案是否定的,它只能映射到固定的管脚,下图是USART2重映射表

其他外设的重映射可以参考STM32100X手册。

为了节省IO资源单片机会在一个IO上复用很多功能,一般的单片机用到 一个功能后就能再用两外复用的功能了,这就体现出了STM32GPIO的强大功能了,我们用重映射的方法把其中一个外设映射到其他IO脚上,这样就可以充分利用片内资源!

也许你以为IO和AFIO是很简单的,事实上有几个误区可能很多人都没注意过,当你只用现成的开发板来学习的时候,别人已经帮你做好了资源分配,所有的外设功能学习都是照着别人给你的例程去做的,这才没让你觉得奇怪。

先问自己一个问题:STM32中,USART2和TIM2是共用相同IO的,你如何决定这几个IO到底是做USART2还是做TIM2呢?如果你要同时使用USART2和TIM2,该怎么办?

1、不是说使用了IO的复用功能就一定要启动RCC_APB2Periph_AFIO的Clock的,参考下图

只有使用了AFIO的事件控制寄存器、AFIO的重映射功能以及外部中断(EXTI)控制寄存器才需要开启AFIO的时钟,STM32参考手册从来没说过使用IO的复用功能就一定要开启AFIO时钟,这是个误区。

例如下面的,最常用的USART1,如果你的板子上,默认用的就是PA9和PA10这两个IO作为USART1的TX和TX,那么也就是没有重映射,NoRemap,这种情况下根本不需要开启AFIO时钟,只要开启USART1的外设时钟就行了。这个实验很简单,自己试试就知道了。

2、从上面的图你可以看到,原来USART1是可以放在PB6和PB7上面的,只不过几乎所有的原理图封装中都不会在PB6和PB7的复用功能上标出它可以当USART1用,毕竟这种重映射的情况太多,几乎所有外设都可以重映射,每个都标出来会非常混乱。

STM32中,USART2的CTS、RTS、TX、RX和TIM2的CH1~CH4都在PA0~PA3上面,具体要如何选择这两个功能呢?

如果要使用USART2,就开始USART2的外设时钟,如果要使用TIM2,就开启TIM2的外设时钟,如果你同时开启,我也不知道会怎么样,你可以自己试试,我觉得应该是两个都不能用。如果你一定要在PA0~PA3上使用这两个功能,只能是时分复用。

正确的同时使用USART2和TIM2,应该是使用上面提到的AFIO_Remap寄存器,将其中的一个重映射到其他IO上去,当然这样其他IO的本身的复用功能你就不能开启了。

回到前面的问题,如果你不做Remap,你根本不可能同时在PA0~PA3上同时使用这两个外设,现在你的方案有两种:

一、保留USART2在PA口上,将TIM2完全重映射(FullRemap)到其他IO上,或者,如果你不用RTS和CTS的硬件流控制,PA0(CTS)和PA1(RTS)上对应的CH1和CH2是可以不用重映射的,只需要将Bit9:8改成10,也就是将CH3和CH4部分重映射到PB10和PB11上去,而CH1和CH2继续保留在PA0和PA1上。但这种情况下,PB10和PB11上的I2C2和USART3就不能用了。

二、保留TIM2在PA口,将USART2重映射到PD口上,很明显,当TIM2完全不重映射时,USART2必须的信号线只有Clock不受影响,这种情况下也没有部分映射可言了,必须将USART2完全重映射到PD3~PD7上,同样的,这种情况下FSMC就不能用了。

STM32上有很多I/O口,也有很多的内置外设想I2C,ADC,ISP,USART等,为了节省引出管脚,这些内置外设基本上是与I/O口共用管脚的,也就是I/O管脚的复用功能。但是STM32还有一特别之处就是:很多复用内置的外设的I/O引脚可以通过重映射功能,从不同的I/O管脚引出,即复用功能的引脚是可通过程序改变的.读到这里相信大家都应该了解了端口重映射的一些概念了.原理上的东西不细说了,大家可以看手册或者网上查,这方面的资料还是很多的.下面说说我的调试经历.

上面说过,我用的CPU是STM32F103VCT6,说到这儿跟大家提一个小插曲.当时在老板让我换方案也就是CPU时,只说用VC的CPU,让我把要买的CPU告诉负责买器件的人,由于我是第一次做,所以傻乎乎的写了张纸给了对方.内容是"STM32F103VC 10PCS"对方看了一眼就给我退了回来并加一句"型号不对,没写全".我没明白,便也不好继续问白痴问题,所以跑网上查,原来光这个CPU就不止一种.我们选用的是T6也就是LQFP封装的工作环境为-40C -- 80C.所以说大家以后小心点儿 ..言规正传.不知道是什么原因PCB制图时把串口接到USART1上了,当时也没在意,等我把USART测试程序写好烧进去硬件仿真时,串口给的是乱码,我当时就觉得奇怪.把程序检查了好几遍就是查不出问题来,以为是硬件有问题,但突然想到了STM有复用功能,心想会不会是这里有鬼?于是找来datasheet一看 ,真相大白

三个红框交汇处.STM32F103VCT6 这个CPU的USART1接的是PB6/PB7 但是上电初始化后默认功能并非是USART1.所以想要用串口功能 .必须用端口重映射..

大家知道,STM32的单片机每个功能模块有自己的时钟系统,所以要想要调用STM32单片机的功能模块时必须先配置对应时钟,然后才能去操作相应的功能模块.端口重映射也一样.如图示:

重映射步骤为:

1.打开重映射时钟和USART重映射后的I/O口引脚时钟,

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB |RCC_APB2Periph_AFIO,ENABLE);

2.I/O口重映射开启.

GPIO_PinRemapConfig(GPIO_Remap_USART1,ENABLE);

3.配制重映射引脚, 这里只需配置重映射后的I/O,原来的不需要去配置.

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;

GPIO_InitStructure.GPIO_Mode =GPIO_Mode_AF_PP;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOB, &GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;

GPIO_Init(GPIOB,&GPIO_InitStructure);

只需要这三步,串口就可以正常使用了,简单吧? 但是我纠结了大半个小时才搞定的,好多事情都是说起来容易做起来难的,希望我以后多多进步.不要眼高手低,嗯 我正朝这个方向前进.

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

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

相关文章

js获取dom html元素属性,JS如何通过元素的CLASS属性得到对应的DOM对象?

非IE6,7,8可以直接用自带的属性 getElementsByClassName,如果需要考虑兼容,就需要自己写了。下面是自己写的:function getClassName(obj,sName) //-->obj是要获取元素的父级{ //-->sName是class名字if(document.getElementsByClassName){return ob…

feign调用多个服务_spring cloud各个微服务之间如何相互调用(Feign、Feign带token访问服务接口)...

1、首先先看什么是Feign。2、若其他服务的接口未做权限处理,参照上文第1点的博文即可。3、若其他服务的接口做了权限的处理(例如OAuth 2)时该如何访问?a、有做权限处理的服务接口直接调用会造成调用时出现http 401未授权的错误,继而导致最终服务的http …

html项目列表页面源码,HTML 列表

HTML 列表HTML 支持有序、无序和定义列表:HTML 列表有序列表第一个列表项第二个列表项第三个列表项无序列表列表项列表项列表项在线实例无序列表本例演示无序列表。有序列表本例演示有序列表。(可以在本页底端找到更多实例。)HTML无序列表无序列表是一个项目的列表,…

vue 实现数据滚动显示_vue实现动态添加数据滚动条自动滚动到底部的示例代码...

在使用vue实现聊天页面的时候,聊天数据动态加到页面中,需要实现滚动条也自动滚动到底部。这时我找到网上有个插件 vue-chat-scroll但是安装后发现是用不了的,报错信息如下:VM14383:27 [Vue warn]: Failed to resolve directive: c…

linux关机方法有哪些?有何区别_Linux关机命令大全:Linux各关机命令之间的区别和用法...

Linux怎么用命令来进行关机/重启呢?Linux是一套免费使用和自由传播的类Unix操作系统,想使用Linux系统的关机命令必须要拿到root权限,下面给大家介绍一些Linux常用的关机命令以及各关机命令之间的区别和用法。Linux系统下常用的一些关机命令&a…

html5 canvas裁剪图片,html5-canvas 使用画布裁剪图像

示例本示例显示了一个简单的图像裁剪功能,该功能获取图像和裁剪坐标并返回裁剪后的图像。function cropImage(image, croppingCoords) {var cc croppingCoords;var workCan document.createElement("canvas"); // 创建一个画布workCan.width Math.floor…

html用转义字符画菱形,JavaScript生成字符画(ASCII Art)

今天玩一些新的东西,大家都没有看过这样的视频:或者 这样的图片:网上有很多生成这种图片/视频的工具,但是每个程序员都有一颗造轮子的心,我们当然要玩出自己的花样啦。老规矩,还是先讲原理,建议…

大数据职业理解_大数据带给我们职业三大根本改变

那么,大数据为什么成为所有人关注的焦点?大数据带来了什么样的本质性改变?为此,我们与中国计算机学会大数据学术带头人、中国人民大学信息学院院长杜小勇教授进行了访谈。大数据(Big data)通常用来形容数字化时代下创造出的大量非结构化和半结构化数据…

微信更新对html影响,微信再次大更新 将极大影响用户使用习惯

[导读]微信再次迎来历史性大更新,小程序终于展露腾讯野心!微信再次迎来历史性大更新,小程序终于展露腾讯野心!...微信小程序桌面在昨日1月22日晚,微信更新7.0.3版本,腾讯在App Store中只表示:本次是一次小更…

什么叫pmt测试分析_RVS — 面向目标硬件的软件性能测试工具

Rapita Verification Suite(简称:RVS),为英国Rapita Systems公司提供的一款嵌入式系统在板测试套件。其产品符合ISO-26262、IEC-61508等行业标准,兼容Vxworks、Linux、SYSBIOS 等操作系统,支持C、C、Ada多种语言,多方位…

matlab2019b 深度学习_Matlab 2019b 数据标注问题、工具与自动标注

从影像中自动提取目标,并进行稳定跟踪,是自动驾驶感知系统的重要目标。本技术博文,介绍了基于卷积神经网络技术(CNN)的图像目标识别的全过程,包括:l FasterCNN中影响标注的数据格式l imageLabeler的结果,非…

帕斯卡三角形html,04_帕斯卡三角形

# 用时0msclass Solution(object):def generate(self, numRows):""":type numRows: int:rtype: List[List[int]]"""# 第 n 行要用到 n-1 行的数据,应该是个动态规划吧# n [1 n-1[0]n-1[1] .... n-1[n-2]n-1[n-1]]if numRows 0:retu…

版本不见了_王者荣耀复古版本来袭?第四代主宰形象回归!可以给小兵加速

山河不足重,重在遇知已。好久不见,别来无恙来自小助理的文章推送~时值中秋,先祝大家中秋节快乐!王者荣耀的新版本即将上线,不知道大家还记不记得新版本将会上线很多新的东西,峡谷路线更改,鼓励同…

jxl读取html格式excel,基于Java+Selenium的WebUI自动化测试框架(十)-----读取Excel文件(JXL)...

packagewebui.xUtils;importjava.io.File;importorg.testng.Reporter;importjxl.Cell;importjxl.Sheet;importjxl.Workbook;public classExcelReadJXL {/***jxl读取Excel*指定文档路径及名称* 指定开始及结束行,开始及结束列*paramsheet_name 为sheet工作表名称&…

sqlserver垮库查询_SQLServer跨库查询--分布式查询

--用openrowset连接远程SQL或插入数据--如果只是临时访问,可以直接用openrowset--查询示例select * from openrowset(SQLOLEDB,sql服务器名;用户名;密码,数据库名.dbo.表名)在跨库查询时需要启用Ad Hoc Distributed Queries启用Ad Hoc Distributed Queries:exec sp_…

360产品演示代码 css3 html5,HTML5 CSS3代码的三维展示

CSS语言:CSSSCSS确定body {background-color: #ececec;}pre {white-space: pre-wrap;}#perspective {position: relative;width: 560px;height: 446px;margin: 80px auto 0;z-index: 1;user-select: none;cursor: default;transform-style: preserve-3d;}#perspecti…

js原生后代选择器_CSS 后代选择器

具体应用后代选择器的功能极其强大。有了它,可以使 HTML 中不可能实现的任务成为可能。假设有一个文档,其中有一个边栏,还有一个主区。边栏的背景为蓝色,主区的背景为白色,这两个区都包含链接列表。不能把所有链接都设…

计算机组装没步的组件,计算机组装教案.doc

计算机组装教案计算机基础—组装计算机襄城职高 崔红燕一、教案背景1、面向学生:■职业技术学校2、学科:计算机信息技术3、课时:2课时4、课前准备:①利用网络搜集计算机各部件的图片及组装视频。②准备计算机主机的各个实物部件(主…

冷藏温度范围_食品冷藏冷冻温度要求与管理规范

食品冷链物流中各类商品温度要求(一)1、冷却畜禽肉、冰鲜水产品、植脂奶油蛋糕、配餐、果汁、酸(冻结点以上——4℃);鲜鱼最佳冷藏温度为零下3度,可以贮存7-10天。温度在-1-0℃之间,鲜肉可保存5~7天。鲜虾贮存条件和贮存期&#x…

计算机英语audios啥意思,2020考研英语词汇:audio是什么意思

对于考生而言,考研英语5500词并不陌生,但如何有效的记忆这些词汇确实关键。你是一视同仁的从头背到尾吗?其实这些词是分三种类型的,分别是核心级词汇、拔高级词汇和基础级词汇,下面中公考研小编一起来看看各种词汇之间的区别及对…