今天翻看Firmware Library中的例程,比如SPI IO口的配置:void gpio_config(void)
{
/* SPI0 GPIO config:SCK/PA5, MOSI/PA7 */
gpio_init(GPIOA, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_5 | GPIO_PIN_7);
/* config PA3 as SPI0_NSS */
gpio_init(GPIOA, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_3);
gpio_pin_remap_config(GPIO_SPI2_REMAP,ENABLE);
/* SPI2 GPIO config: NSS/PA4, SCK/PC10, MISO/PC11 */
gpio_init(GPIOC, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, GPIO_PIN_10 |GPIO_PIN_11);
gpio_init(GPIOA, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, GPIO_PIN_4);
}
DATASHEET中PA5的功能描述:
Default: PA5
Alternate1: USBHS_ULPI_CK
Alternate2: SPI0_SCK, ADC01_IN5, DAC_OUT1,CMP1_IM5, CMP3_IM5, CMP5_IM5
gpio_init()函数怎么通过配置GPIO_CTL寄存器MDy位实现AF功能,这个理解了,但是程序中没有操作AFIO_PCFx寄存器进行功能配置,MPU是如何知道要选择哪个备用功能呢?
而且即便操作AFIO_PCFA寄存器,相应bit也没有选择SPI功能的选项
bit10 PA5_AFCFG PA5 AF 功能配置位
该位由软件置位和清除。
0:不配置 PA5 备用功能到 USBHS
1:配置 PA5 备用功能到 USBHS。
|