我才发现GPIO还能这么玩
我一直以为GPIO的输出高低电平是通过ODATA寄存器的值来控制。比如在做LED的闪烁时使用的LED_Toggle()的函数如下面所写:void APM_TINY_LEDToggle(LED_T Led)
{
GPIO_PORT->ODATA ^= GPIO_PIN;
}这里包含“读-改-写”的操作步骤。我觉得非常平常,也一直这么使用着。但我发现,其实APM32系列还有两个寄存器可以直接输出的电平高低,分别是BSC和BR寄存器,即直接往上述寄存器写对应GPIO引脚的Bit位将对此引脚做高低电平的输出控制,而不影响其它引脚。它只有一个步骤的操作!
void APM_TINY_LEDOn(LED_T Led)
{
GPIO_PORT->BR = GPIO_PIN;
}
void APM_TINY_LEDOff(LED_T Led)
{
GPIO_PORT->BSC = GPIO_PIN;
}简单的事情简单着来做,不要把事情搞复杂!毕竟 极海的设计人员已经为大家提前考虑了!
这两个寄存器的操作还是原子操作。
那个ODATA寄存器用来按Port端口写入 唉!一直是直接调用官方的标准库。
还没有太多的时间仔细阅读手册 这和2025年发现交通工具里有一种东西叫飞机一样稀奇 平时只用驱动库,不去看手册。 这就是典型的位操作示例。
体现了硬件之美 多看手册。玩嵌入式一定要多看手册。
驱动库是驱动库,不能替代技术手册。
页:
[1]