完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
嗨我目前正在尝试使用基于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设置代码:
我还看到了一块在我的主板上使用BSRR和BRR位的示例代码,如下所示:
....但这不起作用。 我不确定我理解三个寄存器及其功能之间的区别。 每个用例有哪些?哪一个适合我的要求? |
|
相关推荐
3个回答
|
|
我在代码中看到的最明显的问题是,在为相应的外设启用时钟之前,您正在写入GPIO寄存器。
如果尚未启用时钟,外设将无法正确响应。在尝试对外围设备执行任何操作之前,请启用所有外设时钟。 尽管如此:ODR和BSRR / BRR之间的差异很小。但是,如果只需要更改一位,则单次写入BSRR(或BRR)比使用ODR上的读取/修改/写入周期更快,并且使用的代码空间更少。但是,如果您确实想要立即设置整个端口的状态,或者需要检查当前输出状态,则可以使用ODR。 |
|
|
|
你是对的,将时钟设置移动到该功能的顶部解决了问题并且应用程序正常工作!我没想到需要首先启用时钟,因为我认为它们只会控制引脚的采样,而不能完全启用外设。谢谢!
|
|
|
|
给楼主顶一顶。
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
[电子小白]如下电路,工作时oled会出现工作故障,请问为什么?(具体见帖子详情)
2855 浏览 0 评论
【正点原子STM32探索者V3开发板免费试用】+STM32 cubeMX按键显示
878 浏览 0 评论
481 浏览 0 评论
请问这种485电路的代码配置怎么写,需要软件控制收发吗,还是直接就可以进行自收发?
4753 浏览 5 评论
4342 浏览 3 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 粤ICP备14022951号 )
GMT+8, 2023-8-20 01:47 , Processed in 0.648203 second(s), Total 59, Slave 54 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 深圳华秋电子有限公司
电子发烧友 (电路图) 粤公网安备 44030402000349 号 电信与信息服务业务经营许可证:粤 B2-20160233 工商网监 湘ICP备2023018690号