完善资料让更多小伙伴认识你,还能领取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。 |
|
|
|
你是对的,将时钟设置移动到该功能的顶部解决了问题并且应用程序正常工作!我没想到需要首先启用时钟,因为我认为它们只会控制引脚的采样,而不能完全启用外设。谢谢!
|
|
|
|
给楼主顶一顶。
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
2078 浏览 0 评论
STM32配合可编程加密芯片SMEC88ST的防抄板加密方案设计
1216 浏览 0 评论
2837 浏览 1 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
2600 浏览 3 评论
5284 浏览 0 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-1-13 19:16 , Processed in 0.585741 second(s), Total 75, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号