STM32F103 GPIO 端口

GiG*_*NCo 2 c embedded arm stm32 gpio

我有一个STM32F103C8 MCU,我想在没有Cube MX的情况下控制GPIO寄存器。MCU 有一个嵌入式 LED,我想控制它。我目前正在使用 CubeMX 和 IAR 软件,并使用以下代码将引脚设为输出(在 CubeMX 中):

HAL_GPIO_TogglePin(Ld2_GPIO_Port,Ld2_Pin); 
HAL_Delay(1000); 
Run Code Online (Sandbox Code Playgroud)

这有效,但我想在没有 Cube 和 HAL 库的情况下做到这一点;我想直接编辑寄存器文件。

P__*_*J__ 7

通过寄存器使用 GPIO 非常容易。您不必编写自己的启动程序(就像@old_timer 的答案一样)。只需要2个步骤

您将需要 STM 提供的 CMSIS 标头以及数据类型声明和人类可读的 #defines 以及参考手册

  1. 使能 GPIO 端口时钟。营地:RCC -> APB2ENR |= RCC_APB2ENR_IOPAEN;
  2. 使用 CRL/CRH GPIO 寄存器配置引脚
#define GPIO_OUTPUT_2MHz (0b10)
#define GPIO_OUTPUT_PUSH_PULL (0 << 2)
  GPIOA -> CRL &= ~(GPIO_CRL_MODE0 | GPIO_CRL_CNF0);
  GPIOA -> CRL |= GPIO_OUTPUT_2MHz | GPIO_OUTPUT_PUSH_PULL; 
Run Code Online (Sandbox Code Playgroud)
  1. 操作输出
  /* to toggle */
  GPIOA -> ODR ^= (1 << pinNummer);
  /* to set */
  GPIOA -> BSRR = (1 << pinNummer);
  /* to reset */
  GPIOA -> BRR = (1 << pinNummer);
  //or
  GPIOA -> BSRR = (1 << (pinNummer + 16));
Run Code Online (Sandbox Code Playgroud)