我一直以为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];
}
简单的事情简单着来做,不要把事情搞复杂!毕竟 极海的设计人员已经为大家提前考虑了!
|
一般都是这样的