micro:bit 上的按钮 B 始终按下

Button B on micro:bit always pushed

我正在裸机级别编写 micro:bit(在 Ada 中),也就是说,我正在直接寻址 nrf51 寄存器。

我对按钮 A 没有问题,GPIO 引脚 17:配置为

dir => input, 
input => connect,
pull => pullup,
drive => s0s1, 
sense => disabled

按下按钮时 IN 寄存器位 17 为 low,松开时为 high

然而,对于按钮 B,GPIO 引脚 26,配置完全相同,IN 寄存器位 26 始终是 low

出厂图像可识别按钮 A 和 B。

按钮 B 正确连接到边缘连接器引脚 11(使用 DVM 检查边缘连接器的电压电平)。

不过,我想知道为什么我必须指定 pullup,因为板上已经有一个 10k 的上拉电阻(并且 DVM 显示正确的逻辑电平)。

示意图为here, the nRF51 reference manual is here.

我发现了一个早期的原理图,其中 GPIO 引脚 26 与磁力计共享,这是否相关?

原来

  • 我用RTC1模拟缺少的SysTick
  • RTC1使用低频时钟
  • 我将低频时钟设置为 运行关闭 crystal(实际上不是!)这意味着引脚 26 的 GPIO 功能由预期的 32,768 接管kHz crystal 输入,因此 GPIO 与其断开连接。

解决方法:将低频时钟设置为 运行 关闭高频时钟的 32,768 kHz 合成输出。