1 | /**
|
2 | * @brief Changes the mapping of the specified pin.
|
3 | * @param GPIOx: where x can be (A..I) to select the GPIO peripheral.
|
4 | * @param GPIO_PinSource: specifies the pin for the Alternate function.
|
5 | * This parameter can be GPIO_PinSourcex where x can be (0..15).
|
6 | * @param GPIO_AFSelection: selects the pin to used as Alternate function.
|
7 | * This parameter can be one of the following values:
|
8 | * @arg GPIO_AF_RTC_50Hz: Connect RTC_50Hz pin to AF0 (default after reset)
|
9 | * @arg GPIO_AF_MCO: Connect MCO pin (MCO1 and MCO2) to AF0 (default after reset)
|
10 | * @arg GPIO_AF_TAMPER: Connect TAMPER pins (TAMPER_1 and TAMPER_2) to AF0 (default after reset)
|
11 | * @arg GPIO_AF_SWJ: Connect SWJ pins (SWD and JTAG)to AF0 (default after reset)
|
12 | * @arg GPIO_AF_TRACE: Connect TRACE pins to AF0 (default after reset)
|
13 | * @arg GPIO_AF_TIM1: Connect TIM1 pins to AF1
|
14 | * @arg GPIO_AF_TIM2: Connect TIM2 pins to AF1
|
15 | * @arg GPIO_AF_TIM3: Connect TIM3 pins to AF2
|
16 | * @arg GPIO_AF_TIM4: Connect TIM4 pins to AF2
|
17 | * @arg GPIO_AF_TIM5: Connect TIM5 pins to AF2
|
18 | * @arg GPIO_AF_TIM8: Connect TIM8 pins to AF3
|
19 | * @arg GPIO_AF_TIM9: Connect TIM9 pins to AF3
|
20 | * @arg GPIO_AF_TIM10: Connect TIM10 pins to AF3
|
21 | * @arg GPIO_AF_TIM11: Connect TIM11 pins to AF3
|
22 | * @arg GPIO_AF_I2C1: Connect I2C1 pins to AF4
|
23 | * @arg GPIO_AF_I2C2: Connect I2C2 pins to AF4
|
24 | * @arg GPIO_AF_I2C3: Connect I2C3 pins to AF4
|
25 | * @arg GPIO_AF_SPI1: Connect SPI1 pins to AF5
|
26 | * @arg GPIO_AF_SPI2: Connect SPI2/I2S2 pins to AF5
|
27 | * @arg GPIO_AF_SPI3: Connect SPI3/I2S3 pins to AF6
|
28 | * @arg GPIO_AF_I2S3ext: Connect I2S3ext pins to AF7
|
29 | * @arg GPIO_AF_USART1: Connect USART1 pins to AF7
|
30 | * @arg GPIO_AF_USART2: Connect USART2 pins to AF7
|
31 | * @arg GPIO_AF_USART3: Connect USART3 pins to AF7
|
32 | * @arg GPIO_AF_UART4: Connect UART4 pins to AF8
|
33 | * @arg GPIO_AF_UART5: Connect UART5 pins to AF8
|
34 | * @arg GPIO_AF_USART6: Connect USART6 pins to AF8
|
35 | * @arg GPIO_AF_CAN1: Connect CAN1 pins to AF9
|
36 | * @arg GPIO_AF_CAN2: Connect CAN2 pins to AF9
|
37 | * @arg GPIO_AF_TIM12: Connect TIM12 pins to AF9
|
38 | * @arg GPIO_AF_TIM13: Connect TIM13 pins to AF9
|
39 | * @arg GPIO_AF_TIM14: Connect TIM14 pins to AF9
|
40 | * @arg GPIO_AF_OTG_FS: Connect OTG_FS pins to AF10
|
41 | * @arg GPIO_AF_OTG_HS: Connect OTG_HS pins to AF10
|
42 | * @arg GPIO_AF_ETH: Connect ETHERNET pins to AF11
|
43 | * @arg GPIO_AF_FSMC: Connect FSMC pins to AF12
|
44 | * @arg GPIO_AF_OTG_HS_FS: Connect OTG HS (configured in FS) pins to AF12
|
45 | * @arg GPIO_AF_SDIO: Connect SDIO pins to AF12
|
46 | * @arg GPIO_AF_DCMI: Connect DCMI pins to AF13
|
47 | * @arg GPIO_AF_EVENTOUT: Connect EVENTOUT pins to AF15
|
48 | * @retval None
|
49 | */
|
50 | void GPIO_PinAFConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_PinSource, uint8_t GPIO_AF)
|
51 | {
|
52 | uint32_t temp = 0x00;
|
53 | uint32_t temp_2 = 0x00;
|
54 |
|
55 | /* Check the parameters */
|
56 | assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
|
57 | assert_param(IS_GPIO_PIN_SOURCE(GPIO_PinSource));
|
58 | assert_param(IS_GPIO_AF(GPIO_AF));
|
59 |
|
60 | temp = ((uint32_t)(GPIO_AF) << ((uint32_t)((uint32_t)GPIO_PinSource & (uint32_t)0x07) * 4)) ;
|
61 | GPIOx->AFR[GPIO_PinSource >> 0x03] &= ~((uint32_t)0xF << ((uint32_t)((uint32_t)GPIO_PinSource & (uint32_t)0x07) * 4)) ;
|
62 | temp_2 = GPIOx->AFR[GPIO_PinSource >> 0x03] | temp;
|
63 | GPIOx->AFR[GPIO_PinSource >> 0x03] = temp_2;
|
64 | }
|