嗨我目前正在尝试使用基于STM32F334R8的STM32 Nucleo开发板编写一个简单的程序。应用程序设置GPIO端口A和C,并读取按钮的状态。如果按下按钮,则会打开LED。如果没有,它会将其关闭。从ST的文档(STM Nucleo 64)我已经确认按钮连接到引脚C13,LED2连接到引脚A5。从数据表中,我一直在阅读GPIO寄存器(Long STM32F334数据表),看看有三个似乎与输出有关; ODR,BSRR和BRR。在实现上述应用时,我首先想到的是使用ODR为输出LED写入GPIO引脚状态,如下所示:SET_BIT(GPIOA->ODR, GPIO_ODR_5);CLEAR_BIT(GPIOA->ODR, GPIO_ODR_5);
这似乎不起作用。检测到我的按钮被按下,因为我可以通过看到它按照不同的路径在调试器中验证这一点。这是我的GPIO设置代码:- // set one to input
- CLEAR_BIT(GPIOC->MODER, GPIO_MODER_MODER13_0);
- CLEAR_BIT(GPIOC->MODER, GPIO_MODER_MODER13_1);
- // set another to output
- SET_BIT(GPIOA->MODER, GPIO_MODER_MODER5_0);
- CLEAR_BIT(GPIOA->MODER, GPIO_MODER_MODER5_1);
- // set output to push-pull
- CLEAR_BIT(GPIOA->OTYPER, GPIO_OTYPER_OT_5);
- // set input with pull-up
- SET_BIT(GPIOC->PUPDR, GPIO_PUPDR_PUPDR13_1);
- CLEAR_BIT(GPIOC->PUPDR, GPIO_PUPDR_PUPDR13_0);
- // enable GPIOA and GPIOC clock
- SET_BIT(RCC->AHBENR, RCC_AHBENR_GPIOAEN);
- SET_BIT(RCC->AHBENR, RCC_AHBENR_GPIOCEN);
复制代码我还看到了一块在我的主板上使用BSRR和BRR位的示例代码,如下所示:- // set output high
- SET_BIT(GPIOA->BSRR, GPIO_BSRR_BS_5);
- // set output low
- SET_BIT(GPIOA->BRR, GPIO_BRR_BR_5);
复制代码
....但这不起作用。我不确定我理解三个寄存器及其功能之间的区别。每个用例有哪些?哪一个适合我的要求?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>