启用复用功能,只要打开IO复用的时钟就好了吧?

阅读 13

07-14 18:00

启用复用功能(通常指IO复用)并不仅仅是打开IO复用的时钟这么简单。以STM32为例,要正确配置和使用IO复用功能,还需要进行以下步骤:

  1. 使能GPIO和AF IO的时钟:
  • 首先需要使能对应GPIO端口的时钟。
  • 然后还需要使能对应外设的时钟(例如USART、I2C等),因为复用功能通常是将GPIO引脚配置为某个外设的功能。
  1. 配置GPIO引脚为复用功能模式:
  • 需要将对应的GPIO引脚配置为复用功能模式(通常是通过设置GPIOx_MODER寄存器中的相应位)。
  1. 配置复用功能的具体设置:
  • 根据具体的外设功能,可能需要配置相应的寄存器来选择具体的复用功能。例如,对于USART,需要配置相应的引脚为USART的TX或RX功能。
  1. 配置外设:
  • 在配置好GPIO引脚之后,还需要配置具体的外设(如USART、I2C等)的寄存器,以确保外设能够正常工作。

以下是一个简单的例子,假设我们要配置STM32的一个GPIO引脚为USART1的TX功能:

// 1. 使能GPIOA和USART1的时钟
__HAL_RCC_GPIOA_CLK_ENABLE();
__HAL_RCC_USART1_CLK_ENABLE();

// 2. 配置PA9为复用功能模式(USART1_TX)
GPIO_InitTypeDef GPIO_InitStruct = {0};
GPIO_InitStruct.Pin = GPIO_PIN_9;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; // 复用推挽输出模式
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
GPIO_InitStruct.Alternate = GPIO_AF7_USART1; // 选择AF7(USART1)
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

// 3. 配置USART1
USART_HandleTypeDef husart1;
husart1.Instance = USART1;
husart1.Init.BaudRate = 115200;
husart1.Init.WordLength = UART_WORDLENGTH_8B;
husart1.Init.StopBits = UART_STOPBITS_1;
husart1.Init.Parity = UART_PARITY_NONE;
husart1.Init.Mode = UART_MODE_TX_RX;
husart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
husart1.Init.OverSampling = UART_OVERSAMPLING_16;
HAL_UART_Init(&husart1);

总结

启用复用功能不仅仅是打开IO复用的时钟,还需要配置GPIO引脚为复用功能模式,并配置相应的外设寄存器。具体步骤和配置可能会因芯片型号和外设的不同而有所差异,因此需要参考具体的芯片手册和数据手册。

精彩评论(0)

0 0 举报