有人知道为什么代码不起作用吗?
RCC->AHBENR |= RCC_AHBENR_GPIOBEN;
GPIOB->MODER &= ~(0x3u << 6u);
GPIOB->MODER |= (0x1u << 6u);
for (int i = 0; i < 1000; i++) {
GPIOB->ODR |= (0x1u << 0x3u);
}
我使用的是 STM 板 (STM32L432KC),它有一个集成 LED,称为引脚 PB3(端口 26),但在闪烁后没有任何反应。实际上应该有一个发光二极管。我是否使用了正确的寄存器?
最佳答案
您在 ODR
中设置了一点但永远不要清除它,所以它不会闪烁,您需要在开/关转换之间有延迟才能明显看到它闪烁。
最好写信给 BSRR
注册而不是 ODR
在可能的情况下,这可以让您避免读取-修改-写入循环。
如果该代码是您的全部 main()
那么你可能想更换 for (int i = 0; i < 1000; i++)
用while(1)
,您通常不想从 main
返回在嵌入式上下文中。
关于c - STM32闪烁的LED错误寄存器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63958330/