STM32中引腳復用說明


端口復用的定義

STM32有許多的內置外設(如串口、ADC、DCA等等),這些外設的外部引腳都是和GPIO復用的。也就是說,一個GPIO如果可以復用為內置外設的功能引腳,那么當這個GPIO作為內置外設使用的時候,就叫復用。詳細的可以參考《STM32F103ZET6數據手冊》p30的內容,表格的倒數第二欄就表示端口復用功能。

比如說,STM32的串口1的引腳對應的I/O位PA9、PA10。而PA9、PA10默認的功能都是GPIO,所以說當PA9、PA10引腳作為串口1使用的時候就是端口復用。

在配置GPIO引腳功能時需要打開對應端口(port)所在的總線時鍾,例如:

#define RCC_AHB1Periph_GPIOA               ((uint32_t)0x00000001)
#define RCC_AHB1Periph_GPIOB               ((uint32_t)0x00000002)
#define RCC_AHB1Periph_GPIOC               ((uint32_t)0x00000004)
#define RCC_AHB1Periph_GPIOD               ((uint32_t)0x00000008)
#define RCC_AHB1Periph_GPIOE               ((uint32_t)0x00000010)
#define RCC_AHB1Periph_GPIOF               ((uint32_t)0x00000020)
#define RCC_AHB1Periph_GPIOG              ((uint32_t)0x00000040)
#define RCC_AHB1Periph_GPIOH               ((uint32_t)0x00000080)
#define RCC_AHB1Periph_GPIOI                ((uint32_t)0x00000100)
#define RCC_AHB1Periph_GPIOJ               ((uint32_t)0x00000200)
#define RCC_AHB1Periph_GPIOK              ((uint32_t)0x00000400)
#define RCC_AHB1Periph_CRC                 ((uint32_t)0x00001000)
#define RCC_AHB1Periph_FLITF               ((uint32_t)0x00008000)
#define RCC_AHB1Periph_SRAM1             ((uint32_t)0x00010000)
#define RCC_AHB1Periph_SRAM2             ((uint32_t)0x00020000)
#define RCC_AHB1Periph_BKPSRAM        ((uint32_t)0x00040000)
#define RCC_AHB1Periph_SRAM3            ((uint32_t)0x00080000)
#define RCC_AHB1Periph_CCMDATARAMEN      ((uint32_t)0x00100000)
#define RCC_AHB1Periph_DMA1              ((uint32_t)0x00200000)
#define RCC_AHB1Periph_DMA2              ((uint32_t)0x00400000)
#define RCC_AHB1Periph_DMA2D             ((uint32_t)0x00800000)
#define RCC_AHB1Periph_ETH_MAC           ((uint32_t)0x02000000)
#define RCC_AHB1Periph_ETH_MAC_Tx        ((uint32_t)0x04000000)
#define RCC_AHB1Periph_ETH_MAC_Rx        ((uint32_t)0x08000000)
#define RCC_AHB1Periph_ETH_MAC_PTP       ((uint32_t)0x10000000)
#define RCC_AHB1Periph_OTG_HS            ((uint32_t)0x20000000)
#define RCC_AHB1Periph_OTG_HS_ULPI       ((uint32_t)0x40000000)

端口復用初始化過程

接下來看一下端口復用初始化過程的步驟,拿串口1為例:

1、GPIO端口時鍾使能。要使用到端口復用,首先是要使能端口的時鍾了;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

2、復用的外設時鍾使能。比如要將PA9、PA10引腳復用成串口,必須也要使能串口時鍾;

 

RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);

3、端口模式配置。在I/O復用位內置外設功能引腳的時候,必須設置GPIO端口的模式。至於在復用功能下,GPIO的模式怎么設置,可以查看手冊《STM32中文參考手冊》p110的內容。這里拿USART1為例,進行配置,要配置全雙工的串口1,TX引腳需要推挽復用輸出,RX引腳需要浮空輸入或者上拉輸入;

 

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //PA.9//復用推挽輸出

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //復用推挽輸出

GPIO_Init(GPIOA, &GPIO_InitStructure);

  

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;//PA10 PA.10 浮空輸入

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空輸入

GPIO_Init(GPIOA, &GPIO_InitStructure); 

總而言之,使用復用功能的時候至少要使能2時鍾:GPIO時鍾使能、復用的外設時鍾使能。同時還要初始化GPIO以及復用外設功能(端口模式配置)。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM