基本概念
- stm32有一些內置外設,每個外設有一個復用功能AF(Alternate functions).
- stm32的每個io引腳東路有一個16路復用器,該復用器一端連該引腳,另外16端連AF0~AF15
- 該復用器可以通過GPIOx_AFRL(針對該組引腳的 0-7號引腳)和 GPIOx_AFRH(針對引腳 8-15)寄存器來配置,即選擇哪個AF連接該io引腳
如何知道每個io口復用了哪些AF
並不是每一個io口都能任意選擇所有AF, 由示意圖也可以知道,AF1可能是兩個TIM1或TIM2,AF3可能是TIM8~TIM11,顯然每個io口每次只能復用一個外設
那如何知道每個io口復用了哪些AF呢?
方法一:.在芯片資料中的《STM32F407ZGT6.pdf》(datasheet)中,找到table 6. pin and ball definitions ,里面由一欄就是AF
方法二:在原理圖《Explorer STM32F4_V2.2_SCH.pdf》中,第二頁MCU中可以看到,每個引腳里面寫的就是其復用的AF:
軟件控制復用器選擇哪個AF
一組IO口的高、低八位分別由GPIOx_AFRH和GPIOx_AFRL寄存器控制。
下圖對應GPIOx_AFRL (低8位)
可以看到每個io引腳占用4位,這4位選擇一個AF來復用
端口復用為復用功能的配置過程:
1.GPIO&復用外設的時鍾使能
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE); //使能GPIOA時鍾
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);//使能USART1時鍾
2.通過GPIO_PinAFConfig()函數,配置GPIOx_AFRH或GPIOx_AFRL寄存器,控制鎖存器,將io口和外設相連
···
//串口1對應引腳復用映射
GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_USART1); //GPIOA9復用為USART1
GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_USART1); //GPIOA10復用為USART1
···
3.GPIO_Init()
除了復用ADC和DAC這兩個外設時的mode選模擬輸入外,其余外設的mode全部選AF
4.對應外設初始化