端口的复用——基于STM32F767IGT6

基本概念:

在STM32中有很多内置外设,这些内置外设的操作也是通过140根GPIO引脚的,如果一个GPIO引脚复用为内置外设的功能,那么此时就叫做GPIO的功能复用:

例:串口1的发送和接收引脚可选PA9和PA10复用,当我们不把这两个引脚用作GPIO时,而复用为串口1的收发引脚时,这时就叫做端口的杜复用;

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

IO引脚通过复用器连接到外设或模块,复用器一次仅允许一个外设的复用功能(AF)连接到IO引脚,确保共用一个IO引脚的外设之间不会发生冲突;(一个IO引脚一次只能复用一个外设功能,那么多个IO可以同时复用一个功能吗?)
这里写图片描述
这里写图片描述
我们通过复用关系表可以看见,一个IO往往可能复用很多功能,当一个IO可能复用的功能外设都开启了,会不会造成干扰呢?对于STM32F1来说,可能会造成混乱,而F7仅连接到特定外设,不存在互相干扰的情况;
一个功能可以被多个IO复用,当一个IO复用了一个功能之后,其他可复用这个功能的IO还可作GPIO或复用其他功能使用;

功能复用相关的寄存器(AFRL和AFRH)

引脚复用功能选择通过AFRL和AFRH来控制,其中AFRL控制0~7这八个IO口,AFRH控制8~15这八个IO口,在MDK中,AFRL和AFRH被定义成了数组AFR[2]进行配置,其中AFR[0]代表AFRL,AFR[1]代表AFRH,AFR是一个unsigned int类型的数组,即AFRL/AFRH寄存器4bit表示一个IO,一个IO最多可能复用16种外设功能;

例1:将PA9和PA10复用成USART1_TX和USART1_RX功能

RCC->AHB1ENR|=1<<0;         //使能PORTA口时钟  
RCC->APB2ENR|=1<<4;         //使能串口1时钟
GPIO_Set(GPIOA,PIN9|PIN10,GPIO_MODE_AF,GPIO_OTYPE_PP,GPIO_SPEED_50M,GPIO_PUPD_PU);              //PA9,PA10,复用功能,上拉输出
GPIO_AF_Set(GPIOA,9,7);     //PA9,AF7
GPIO_AF_Set(GPIOA,10,7);    //PA10,AF7 
//GPIOx:GPIOA~GPIOI.       端口
//BITx:0~15                代表IO引脚编号.
//AFx:0~15                 代表AF0~AF15.功能编号
void GPIO_AF_Set(GPIO_TypeDef* GPIOx,u8 BITx,u8 AFx)
{  
    GPIOx->AFR[BITx>>3]&=~(0X0F<<((BITx&0X07)*4));
    GPIOx->AFR[BITx>>3]|=(u32)AFx<<((BITx&0X07)*4);
}
/**************************************************************
 *1、BITx>>3  在前面我们说了,AFRL和AFRH分别控制8个IO口,这样AFR[2]
 *            刚好可以表示一个端口,二进制3bit可以表示八种状态,即如
 *            果超过7则bit4肯定为1,这样就可以用一个函数直接判断使用
 *            AFR[0]还是AFR[1]了;
 * 2、(BITx&0X07)*4  一个IO用4个bit表示,故乘4;BITx&0X07 是为了防
 *                   止误操作,一个AFR只能设置8个IO,故3个bit就可以
 *                   表示,超过3bit的部分自动清零;
 **************************************************************
 * 总结:
 *     1、想要使用某个外设,先使能他的时钟(对于复用来说,要使能端口+
 * 功能外设);
 *     2、时钟使能完毕后,要对其进行初始化操作,进行相关配置;
 *     3、注意:设置寄存器,先清零,再设置;
 **************************************************************/
常用复用功能引脚总结:

AF0:MCO/SWD/SWCLK/RTC;
AF1:TIM1/TIM2;
AF2:TIM3~5;
AF3:TIM8~11;
AF4:I2C1~I2C4;
AF5:SPI1~SPI6;
AF6:SPI3/SAI1;
AF7:SPI2/3/USART1~3/UART5/SPDIFRX;
AF8:USART4~8/SPDIFRX/SAI2;
AF9:CAN1~2/TIM12~14/LCD/QSPI;
AF10:USB_OTG/USB_HS/SAI2/QSPI;
AF11:ETH;
AF12:FMC/SDMMC/OTG/HS;
AF13:DCIM;
AF14:LCD;
AF15:EVENTOUT;

AF0为系统功能,有三种需要特别注意:
1. JTAG/SWD:在器件复位后,会将这些引脚制定为专用引脚,可供片上调试模块使用(不受GPIO控制器控制);
2. RTC_REFIN:此引脚应配置为输入浮空模式;
3. MCO1/MCO2:这些引脚必须配置为复用功能模式;

对于ADC和DAC,在GPIOx_MODER寄存器中将所需IO配置为模拟通道,对于其他外设,只需要配置为复用功能;

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: STM32F767IGT6和STM32F429IGT6是STMicroelectronics推出的两款32位ARM Cortex-M微控制器。下面是两者的比较: 1. 处理器性能:STM32F767IGT6采用了ARM Cortex-M7内核,主频可达216 MHz,提供了更高的处理能力和更快的执行速度。而STM32F429IGT6使用了ARM Cortex-M4内核,主频为180 MHz。 2. 存储容量:STM32F767IGT6具有1MB的闪存和320KB的SRAM,而STM32F429IGT6则仅有1MB的闪存和256KB的SRAM。因此,前者提供了更大的存储容量,可以用于存储更多的程序和数据。 3. 外设和接口:两者均具有丰富的外设和接口,如多个USART、SPI、I2C、USB等。然而,STM32F767IGT6还拥有更多的接口和外设,如以太网MAC、SDIO、SDMMC、QSPI等,可以提供更多的连接和扩展选项。 4. 电源管理:STM32F767IGT6支持更多的低功耗模式,包括多个待机模式和休眠模式。这样可以进一步降低功耗,延长电池寿命。 5. 其他特性:STM32F767IGT6在外设和性能方面拥有一些额外的特性,如更多的定时器、DMA通道和ADC转换通道。同时,它还提供了更多的扩展功能,如温度传感器和自检。 综上所述,STM32F767IGT6在处理能力、存储容量、外设和接口等方面都更为强大,适用于对性能要求较高的应用场景。而STM32F429IGT6则适用于对功耗和成本有更高要求的应用。选择适合的芯片需根据具体应用需求来决定。 ### 回答2: STM32F767IGT6和STM32F429IGT6是两种不同型号的STM32单片机。它们在处理器核心、性能、外设等方面存在一些不同。 首先,STM32F767IGT6采用了ARM Cortex-M7内核,而STM32F429IGT6采用了ARM Cortex-M4内核。相对于Cortex-M4内核,Cortex-M7内核具有更强大的计算性能和更高的操作速度。 其次,STM32F767IGT6拥有更大的闪存和SRAM容量。它有2MB的闪存和512KB的SRAM,而STM32F429IGT6只有1MB的闪存和256KB的SRAM。更大的存储容量使得STM32F767IGT6能够运行更复杂的应用程序和存储更多的数据。 此外,STM32F767IGT6和STM32F429IGT6在外设方面也有一些差异。两者都配备了通用I/O端口、定时器、串行通信接口、USB接口等常见外设,但STM32F767IGT6还集成了以太网控制器、SDIO接口、CAN接口等更多功能。 总体上看,STM32F767IGT6相对于STM32F429IGT6具有更强大的处理器和更大的存储空间,可以支持更复杂的应用程序,并且集成了更多的外设功能。然而,选择适合的型号还要根据具体的应用需求和成本考虑。 ### 回答3: STM32F767IGT6和STM32F429IGT6是STM32系列微控制器的两个不同型号。以下是它们之间的比较: 处理器性能:STM32F767IGT6采用Cortex-M7内核,主频为216 MHz,而STM32F429IGT6采用Cortex-M4内核,主频为180 MHz。因此,STM32F767IGT6具有更高的处理性能和更快的时钟速度。 存储容量:STM32F767IGT6具有更大的Flash存储器,容量为2 MB,而STM32F429IGT6的Flash容量为1 MB。此外,STM32F767IGT6还具有更大的RAM容量,为512 KB,而STM32F429IGT6的RAM容量为256 KB。 外设功能:STM32F767IGT6和STM32F429IGT6都具有许多通用和专用外设,如UART、SPI、I2C、ADC和定时器等。然而,STM32F767IGT6具有更多的GPIO脚,为216个,比STM32F429IGT6的112个更多。此外,STM32F767IGT6还具有更多的专用外设,如以太网MAC、USB OTG等。 功耗:由于采用了不同的内核和处理器架构,STM32F767IGT6在性能方面可能会更耗电。对于更低功耗要求的应用,STM32F429IGT6可能是更好的选择。 总结:STM32F767IGT6和STM32F429IGT6在处理器性能、存储容量、外设功能和功耗方面有所区别。选择哪个型号主要取决于具体的应用需求和性能要求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值