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 库的情况下做到这一点;我想直接编辑寄存器文件。
通过寄存器使用 GPIO 非常容易。您不必编写自己的启动程序(就像@old_timer 的答案一样)。只需要2个步骤
您将需要 STM 提供的 CMSIS 标头以及数据类型声明和人类可读的 #defines 以及参考手册
RCC -> APB2ENR |= RCC_APB2ENR_IOPAEN;
#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)
/* 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)