1.什么是端口复用?

STM32有很多的内置外设(把一些功能ADC\看门狗…集中到芯片里面),这些外设的外部引脚都是与GPIO复用的。也就是说,一个GPIO如果可以复用为内置外设的功能引脚,那么当这个GPIO作为内置外设使用的时候,就叫做复用。

例如串口1 的发送接收引脚是PA9,PA10,当我们把PA9,PA10不用作GPIO,而用做复用功能串口1的发送接收引脚的时候,叫端口复用。

2.STM32引脚可以复用为哪些功能?

可在芯片STM32767IGT6资料中的pin and ball definitions中找到:

STM32(M4内核以上)的端口复用映射原理

STM32系列微控制器IO引脚通过一个复用器连接到内置外设或模块。该复用器一次只允许一个外设的复用功能(AF)连接到对应的IO口。这样可以确保共用同一个IO引脚的外设之间不会发生冲突。

每个IO引脚都有一个复用器,该复用器采用16路复用功能输入(AF0到AF15),可通过GPIOx_AFRL(针对引脚0-7)和GPIOx_AFRH(针对引脚8-15)寄存器对这些输入进行配置,每四位控制一路复用。

对于每一组GPIO都有GPIO 复用功能低位寄存器 (GPIOx_AFRL) (x = A…K):比如GPIOA有16个IO口,GPIOx_AFRL是32位,可以配置引脚0-7。

GPIOx_AFRL寄存器:

GPIO 复用功能高位寄存器 (GPIOx_AFRH) (x = A…J):

比如配置PA9连接到AF7,那么就是配置GPIOA_AFRH的AFR9,配置成0111 。

3.复用功能配置:

1.系统功能:将I/O连接到AF0,然后根据所用功能进行配置:

  • JTAG/SWD:在各器件复位之后,会将这些引脚指定为专用引脚,可供片上调试模块立即使用 (不受GPIO控制器控制)
  • RTC_REFIN:此引脚应配置为输入浮空模式。
  • MCO1和MCO2:这些引脚必须配置为复用功能模式。

2.GPIO:在GPIOx_MODER寄存器中将所需I/O配置为输出或输入。

3.外设复用功能:

对于ADC和DAC,在GPIOx_MODER寄存器中将所需I/O配置为模拟通道。对于其它外设:

  • 在GPIOx_MODER寄存器中将所需I/O配置为复用功能
  • 通过GPIOx_OTYPER、GPIOx_PUPDR和GPIOx_OSPEEDER寄存器,分别选择类型、上拉/下拉以及输出速度。
  • 在GPIOx_AFRL或GPIOx_AFRH寄存器中,将I/O连接到所需AFx

4.端口复用功能配置过程

以PA9、PA10配置为串口1为例:

1.GPIO端口时钟使能。
__HAL_RCC_GPIOA_CLK_ENABLE(); //使能GPIO时钟

2.复用外设时钟使能。
比如你要将端口PA9,PA10复用为串口,所以要使能串口时钟。
__HAL_RCC_USART1_CLK_ENABLE(); //使能串口1时钟

3.端口模式配置为复用功能。 HAL_GPIO_Init函数。
GPIO_Initure.Mode=GPIO_MODE_AF_PP; //复用推挽输出

4.配置GPIOx_AFRL或者GPIOx_AFRH寄存器,将IO连接到所需的AFx。HAL_GPIO_Init函数。

GPIO_Initure.Alternate=GPIO_AF7_USART1;//复用为USART1

在文件system-usart.c中可以找到:HAL_UART_MspInit

void HAL_UART_MspInit(UART_HandleTypeDef *huart)
{//GPIO端口设置GPIO_InitTypeDef GPIO_Initure;if(huart->Instance==USART1)//如果是串口1,进行串口1 MSP初始化{__HAL_RCC_GPIOA_CLK_ENABLE();         //使能GPIOA时钟__HAL_RCC_USART1_CLK_ENABLE();           //使能USART1时钟GPIO_Initure.Pin=GPIO_PIN_9;           //PA9GPIO_Initure.Mode=GPIO_MODE_AF_PP;        //复用推挽输出GPIO_Initure.Pull=GPIO_PULLUP;         //上拉GPIO_Initure.Speed=GPIO_SPEED_FAST;        //高速GPIO_Initure.Alternate=GPIO_AF7_USART1;    //复用为USART1HAL_GPIO_Init(GPIOA,&GPIO_Initure);      //初始化PA9GPIO_Initure.Pin=GPIO_PIN_10;          //PA10HAL_GPIO_Init(GPIOA,&GPIO_Initure);       //初始化PA10#if EN_USART1_RXHAL_NVIC_EnableIRQ(USART1_IRQn);               //使能USART1中断通道HAL_NVIC_SetPriority(USART1_IRQn,3,3);            //抢占优先级3,子优先级3
#endif  }}

STM32-IO引脚复用-原理和使用相关推荐

  1. 22.IO引脚复用和映射原理与配置

    IO引脚复用和映射原理与配置 参考资料: 正点原子STM32开发板: <STM32开发指南-HAL库版本>-4.4 IO引脚复用和映射 STM32F4xx官方资料: <STM32F4 ...

  2. Rockchip开发系列 - 3.1.GPIO IO引脚复用问题

    By: fulinux E-mail: fulinux@sina.com Blog: https://blog.csdn.net/fulinus 喜欢的盆友欢迎点赞和订阅! 你的喜欢就是我写作的动力! ...

  3. MCU学习笔记_IO引脚复用和映射

    MCU学习笔记 IO引脚复用和映射 1. 端口复用 2. 端口复用配置过程 1. 端口复用 STM32有很多内置外设,外设的外部引脚都是与GPIO复用的.即,一个GPIO,如果可以复用为内置外设的功能 ...

  4. 【STM32】IO引脚复用器和映射原理与配置

    IO引脚复用器和映射原理与配置 什么是端口复用,STM32引脚怎么复用? STM32有很多的内置外设(把RTC,ADC,看门狗等外设都集中在芯片里面了),这些外设的外部引脚都是与GPIO复用的.也就是 ...

  5. STM32 IO口的8中配置方式解读(推挽输出、开漏输出、复用开漏输出、复用推挽输出以及上拉输入、下拉输入、浮空输入、模拟)

    转自:http://blog.csdn.net/u010592722/article/details/45746079 STM32  IO口的8中配置方式: (1)GPIO_Mode_AIN 模拟输入 ...

  6. STM32通用和复用功能IO

    总结 RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); //后面肯定接的代码是 //重映射引脚 GPIO_PinRemapConfig(GPIO ...

  7. STM32 I/O引脚复用

    在芯片原理图上经常可以看到GPIO端口后边接很长一串,比如PA9/USART1_TX/TIM1_CH2,意思就是PA9引脚除了可以作为简单的I/O输入输出电平,还可以有复用功能,可以复用为USART1 ...

  8. 转载:stm32的引脚有两种用途

    stm32的引脚有两种用途:GPIO(general purpose io)和AFIO(alternate function io) 对于一些引脚(视芯片而定),这两种用途都没有,如在64脚产品中,O ...

  9. STM32之端口复用与重映射

    STM32 --端口复用和重映射 首先来说下什么是端口复用. STM32有很多的内置外设,这些外设的外部引脚都是与GPIO复用的.也就是说,一个GPIO如果可以复用为内置外设的功能引脚,那么当这个GP ...

最新文章

  1. UltraIso-写入硬盘映像
  2. 存储基础知识一 主要技术DAS、SAN、NAS
  3. mysql 服务器优化_如何对MySQL服务器进行调优
  4. JAVA运行时异常及检查式异常
  5. zigbee与WiFi模块和蓝牙模块的区别是什么?
  6. 《自然》评出2018年十大人物:中国天才少年和争议人物贺建奎入选
  7. NG-ZORRO 7.0.0 发布,Ant Design 的 Angular 实现
  8. 安卓模拟器安装教程_安卓模拟器测试总结!究哪个最流畅?内附模拟换IP教程...
  9. 怎么获取echarts需要的geoJson数据去渲染地图:以广州市白云区24镇街为例(内附资源)
  10. 【信源编码】Huffman Coding原理以及MATLAB实现
  11. 计算机网络与通讯教案,计算机网络技术教案.docx
  12. 写作技巧~100段作文排比句(61-80段),考试一定用得上,赶紧收藏!
  13. discuz自定义接口开发——一键发帖,自动发帖,站外发帖(主题)
  14. 绕过安卓SSL验证证书的常见四种方式
  15. R6-4 sdust-Java-可实现多种排序的Book类
  16. 拉格朗日松弛与拉格朗日分解 lagrangian relaxation
  17. 【旧文章搬运】为什么win32k.sys在System进程空间无法访问
  18. 阿里巴巴矢量图标库批量下载图标
  19. java 异步模型_Java IO编程全解(三)——伪异步IO编程
  20. LoRa与NB各领风骚,激荡百亿级物联网连接

热门文章

  1. OnKeyPress事件和Javascript检测键盘输入
  2. Android开发:利用Activity的Dialog风格完成弹出框设计
  3. Oracle 练习题 20131021 for 循环练习
  4. CentOS7 安装ownCloud
  5. Xshell连接远程Linux服务器失败Could not connect to ‘192.xxx.xx.xxx‘ (port 22): Connection failed.
  6. Express + Node 爬取网站数据
  7. java 读 jar外文件_读取Jar包外面的配置文件
  8. php 删除文件夹及文件夹,php删除一个路径下的所有文件夹和文件的方法
  9. 易语言通过服务器发送文件,易语言服务器与客户端发送文件
  10. win7更改适配器设置没有本地连接解决方法