stm32 某个io引脚不能拉高_【stm32f407】IO引脚复用和映射
一. 什么叫管脚复用
STM32F4有很多的内置外设,这些外设的外部引脚都是与GPIO复用的。也就是说,一个GPIO如果可以复用为内置外设的功能引脚,那么当这个GPIO作为内置外设使用的时候,就叫做复用。
STM32F4系列微控制器IO引脚通过一个复用器连接到内置外设或模块。该复用器一次只允许一个外设的复用功能(AF)连接到对应的IO口。这样可以确保共用同一个IO引脚的外设之间不会发生冲突。每个IO引脚都有一个复用器,该复用器采用16路复用功能输入(AF0到AF15),可通过GPIOx_AFRL(针对引脚0-7)和GPIOx_AFRH(针对引脚8-15)寄存器对这些输入进行配置,每四位控制一路复用:
1)完成复位后,所有IO都会连接到系统的复用功能0(AF0)。
2)外设的复用功能映射到AF1到AF13。
3)Cortex-M4EVENTOUT映射到AF15。
如图:
上图是针对引脚0-7,对 于引脚8-15,控制寄存器为GPIOx_AFRH。从图中可以看出。当需要使用复用功能的时候,我们配置相应的寄存器GPIOx_AFRL或者GPIOx_AFRH,让对应引脚通过复用器连接到对应的复用功能外设。这里我们列出GPIOx_AFRL寄存器的描述,
GPIOx_AFRH的作用跟GPIOx_AFRL类似,只不过GPIOx_AFRH控制的是一组IO口的高八位,GPIOx_AFRL控制的是一组IO口的低八位
寄存器分别如下:
二. USART实例讲解
以usart2的TX,RX为例
USART2的TX,RX对应的PIN脚分别为:PD5,PD6
1) 首先,我们要使用IO复用功能外设,必须先打开对应的IO时钟和复用功能外设时钟。
/*使能GPIOD时钟*/
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD,ENABLE);
USART2在APB1总线上
/*使能USART2时钟*/
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE);
这里需要说明一下,官方库提供了五个打开GPIO和外设时钟的函数分别为:
void RCC_AHB1PeriphClockCmd(uint32_t RCC_AHB1Periph,FunctionalState NewState);
void RCC_AHB2PeriphClockCmd(uint32_tRCC_AHB2Periph, FunctionalState NewState);
void RCC_AHB3PeriphClockCmd(uint32_tRCC_AHB3Periph, FunctionalState NewState);
void RCC_APB1PeriphClockCmd(uint32_tRCC_APB1Periph, FunctionalState NewState);
void RCC_APB2PeriphClockCmd(uint32_tRCC_APB2Periph, FunctionalState NewState);
这五个函数分别用来打开相应的总线下GPIO和外设时钟。比如我们的串口2是挂载在APB1总线之下,所以我们调用对应的APB1总线下外设时钟使能函数RCC_APB1PeriphClockCmd来使能串口2时钟。对于其他外设我们调用相应的函数即可。
2) 其次,我们在GIPOx_MODER寄存器中将所需IO(对于串口2是PD5,PD6)配置为复用功能(ADC和DAC设置为模拟通道)。
3)再次,我们还需要对IO口的其他参数,例如类型,上拉/下拉以及输出速度。
上面两步,在我们库函数中是通过GPIO_Init函数来实现的,参考代码如下:
/*GPIOD5与GPIOD6初始化*/
GPIO_InitStructure.GPIO_Pin= GPIO_Pin_5 | GPIO_Pin_6;
GPIO_InitStructure.GPIO_Mode= GPIO_Mode_AF;//复用功能
GPIO_InitStructure.GPIO_Speed= GPIO_Speed_50MHz;//速度50MHz
GPIO_InitStructure.GPIO_OType= GPIO_OType_PP; //推挽复用输出
GPIO_InitStructure.GPIO_PuPd= GPIO_PuPd_UP; //上拉
GPIO_Init(GPIOD,&GPIO_InitStructure);//初始化PD5,PD6
4)最后,我们配置GPIOx_AFRL或者GPIOx_AFRH寄存器,将IO连接到所需的AFx。这些步骤对于我们使用库函数来操作的话,是调用的
GPIO_PinAFConfig函数来实现的。具体操作代码如下:
/*PD5连接AF7,复用为USART2_TX */
GPIO_PinAFConfig(GPIOD,GPIO_PinSource5,GPIO_AF_USART2);
/* PD6连接AF7,复用为USART2_RX*/
GPIO_PinAFConfig(GPIOD,GPIO_PinSource6,GPIO_AF_USART2);
对于函数GPIO_PinAFConfig函数,入口第一个第二个参数很好理解,可以确定是哪个IO,
对于第三个参数,实际上我们确定了这个IO到底是复用为哪种功能之后,这个参数也很好选择,因为可选的参数在stm32f4xx_gpio.h列出来非常详细,如下
stm32 某个io引脚不能拉高_【stm32f407】IO引脚复用和映射相关推荐
- io操作是指什么_各种IO模型,一篇打尽
一.阻塞/非阻塞-同步非同步 同步/异步 同步请求:A调用B,B的处理是同步的,在处理完之前他不会通知A,只有处理完之后才会明确的通知A; 异步请求:A调用B,B的处理是异步的,B在接到请求后先告诉A ...
- STM32 SPI NSS 引脚为不能拉高问题
使用过 STM32 的SPI 的朋友可能都会发现一个问题,那就是其NSS引脚 在硬件模式下无法自动拉高,可能也因为这个原因致使 .大部分朋友在使用SPI时候都是优先选用软件 控制NSS引脚的工作模式 ...
- 分时线的9代表什么_股票早上快速拉高然后慢慢下跌,意味着什么?看完才知道套路...
既然人性是与生俱来的,那么站在这个角度上来看,投机交易盈利的逻辑,一定是假设绝大多数的交易者一定会犯跟以前一样的错误, 这样自己才有可能赚取这大部分交易者的钱,才有可能获得几倍于本金的投资收益,这里需 ...
- 【STM32】IIC的基本原理(实例:普通IO口模拟IIC时序读取24C02)(转载)
版权声明:本文为博主原创文章,允许转载,但希望标注转载来源. https://blog.csdn.net/qq_38410730/article/details/80312357 IIC的基本介绍 I ...
- 22.IO引脚复用和映射原理与配置
IO引脚复用和映射原理与配置 参考资料: 正点原子STM32开发板: <STM32开发指南-HAL库版本>-4.4 IO引脚复用和映射 STM32F4xx官方资料: <STM32F4 ...
- 模拟IIC——关于模拟IIC的IO口的配置选取推挽输出还是开漏输出,以及是否需要更改IO口输入输出模式和是否需要对IO配置上拉
在使用模拟IIC的时候,观看别人的程序的时候发现了程序之间的一些不一样的地方 ----------------------------------代码1------------------------ ...
- 【stm32】史上最详细的8种IO口模式
8种IO口模式 4种输入模式 4种输出模式 (带上拉或者下拉) 浮空输入 推挽输出 上拉输入 复用式推挽输出 下拉输入 开漏输出 模拟输入 复用式开漏输出 1.浮空输入 浮空输入模式下,I/O端口的电 ...
- 单片机C语言拉高1位,第二讲 单片机C语言之12864液晶显示
前面一讲我们焊接了C51的最小系统.这讲里我们将继续焊接上液晶显示相关电路,并分别实现用12864显示一个汉字,字符串,数字,浮点数以及可调节的电子时钟. 概念 点阵式液晶显示模块(LCD)广泛应用于 ...
- 上拉电阻和下拉电阻_以按键举例
一.什么是上拉电阻.什么是下拉电阻 上拉电阻和下拉电阻都是电阻元器件,所谓上拉电阻就是接电源正极,下拉的就是接负极或地. 二.上拉电阻原理及电路图 (1)上拉电阻,保证IO没有外部信号输入时,IO检测 ...
- 51的IO口和上拉电阻驱动
单片机的引脚,可以用程序来控制,输出高.低电平,这些可算是单片机的输出电压. 但是,程序控制不了单片机的输出电流. 单片机的输出电流,很大程度上是取决于引脚上的外接器件. 单片机输出低电平时,将允许外 ...
最新文章
- 基于OpenCV的显著图绘制
- Python使用matplotlib可视化多分类变量组合下分组小提琴图、使用seaborn中的catplot函数可视化多分类变量组合下分组小提琴图(Categorical Plots)
- 正则表达式的环视深度剖析
- 【华为云技术分享】【论文阅读】增量学习近期进展及未来趋势预测
- svn从本地更新了资源库的资源后删除了某个文件夹无法恢复(已解决)
- 2017-9-19Linux基础知识(2)
- 心电图系统服务器与存储系统,心电图网络信息化管理系统
- 视频监控系统运维解决方案
- HP服务器清除bios方法
- linux shell 宏定义_一篇教会你写90%的shell脚本
- 关于文件上传失败的问题
- 引入时间轴:动态图模型的共性与特征
- 【连接池】Tomcat 连接池中 maxActive,maxWait,maxAge,testOnBorrow,testWhileIdle等选项的作用
- 二维三维四维vector乃至多维vector数组的建立
- 送给她最最浪漫的表白(Python代码实现)
- 用PPA下载codeblocks
- 计算机有哪些配件名称大全,台式机主机有哪些配件组成
- 苹果手机技巧,如何查男朋友手机,查岗技能大曝光!
- 2020天猫双十一红包口令
- 5G套餐正式公布!中国联通如何应对井喷5G咨询?百度知道成新入口