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 合成输出。
我正在裸机级别编写 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 合成输出。