打印
[APM32F1]

我才发现GPIO还能这么玩

[复制链接]
96|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
转瞬回声|  楼主 | 2025-6-30 20:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我一直以为GPIO的输出高低电平是通过ODATA寄存器的值来控制。比如在做LED的闪烁时使用的LED_Toggle()的函数如下面所写:
void APM_TINY_LEDToggle(LED_T Led)
{
    GPIO_PORT[Led]->ODATA ^= GPIO_PIN[Led];
}
这里包含“读-改-写”的操作步骤。我觉得非常平常,也一直这么使用着。但我发现,其实APM32系列还有两个寄存器可以直接输出的电平高低,分别是BSC和BR寄存器,即直接往上述寄存器写对应GPIO引脚的Bit位将对此引脚做高低电平的输出控制,而不影响其它引脚。它只有一个步骤的操作!
void APM_TINY_LEDOn(LED_T Led)
{
    GPIO_PORT[Led]->BR = GPIO_PIN[Led];
}

void APM_TINY_LEDOff(LED_T Led)
{
    GPIO_PORT[Led]->BSC = GPIO_PIN[Led];
}
简单的事情简单着来做,不要把事情搞复杂!毕竟 极海的设计人员已经为大家提前考虑了!



使用特权

评论回复
评论
qintian0303 2025-7-1 11:16 回复TA
一般都是这样的 
沙发
夜幕叙事曲| | 2025-7-1 10:18 | 只看该作者
这两个寄存器的操作还是原子操作。
那个ODATA寄存器用来按Port端口写入

使用特权

评论回复
板凳
梦塑者| | 2025-7-1 15:56 | 只看该作者
唉!一直是直接调用官方的标准库。
还没有太多的时间仔细阅读手册

使用特权

评论回复
地板
死不低头| | 2025-7-2 18:36 | 只看该作者
这和2025年发现交通工具里有一种东西叫飞机一样稀奇

使用特权

评论回复
5
DawnFervor| | 2025-7-2 23:47 | 只看该作者
平时只用驱动库,不去看手册。

使用特权

评论回复
6
jobszheng| | 2025-7-3 09:52 | 只看该作者
这就是典型的位操作示例。
体现了硬件之美

使用特权

评论回复
7
VelvetNight| | 2025-7-3 10:30 | 只看该作者
多看手册。玩嵌入式一定要多看手册。
驱动库是驱动库,不能替代技术手册。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

15

帖子

0

粉丝