2023年7月14日发(作者:)
1 跑马灯
对于学习单片机编程的人来说,“跑马灯”这个词再熟悉不过了,它基本是我们入门的第一个例子。
本章我们就以“跑马灯”为例子,讲解nRF51822软件编程的第一课:GPIO。
1.1 nRF51822 AK board硬件介绍
1.1.1 AK board (PCA10001)的LED资源
AK board PCA10001上有两个按键和五个用户可编程的LED,它们被连接到nRF51822芯片的特定引脚上。请看 Table 1.
Part GPIO Short
Button0 P0.16
Button1 P0.17
LED 0
LED 1
LED 2
LED 3
LED 4
P0.18 SB6
P0.19 SB7
P0.20 SB8
P0.21 SB9
P0.22 SB10
Table 1
按键和 LED
连接
1.1.2 AK board (PCA10001)LED原理图
按键是低电平有效的,就是说按下按键后,IO的输入端会被连接到地。按键没有外部的上拉电阻,所以如果要使用P0.16 和 P0.17 引脚上的两个按键,需要使能引脚的内部上拉电阻。
Figure 1 buttons
LED是高电平有效的,就是说写一个逻辑的 (‘1’) 到相应的输出引脚,将点亮LED。
Figure 2 LEDs
1.1.3 AK board (PCA10001)LED三维图
3D图,请看:
1.2 nRF51822的GPIO
1.2.1 nRF51822的GPIO框图 Figure 3 GPIO
1.3 nRF51822的GPIO寄存器
Figure 3 GPIO registers
1.3.1 nRF51822的GPIO寄存器简介
Register
保留
OUT
OUTSET
Offset
0x000
保留位[321]
0x504
写GPIO端口,bit0对应pin0,bit1对应
0x508
set单一GPIO端口,写“1”到0x00只能将pin0拉高,对其他pin无效
clear单一GPIO端口,写“1”到0x00只能将pin0拉低,对其他pin无效
Description
OUTCLR
IN
0x50C
0x510
读GPIO端口,bit0对应pin0,bit1对应 Register
DIR
DIRSET
DIRCLR
保留
PIN_CNF[0]
....
Offset Description
0x514
设置GPIO端口方向,类同于OUT
0x518
设置GPIO端口方向,类同于OUTSET
0x51C
设置GPIO端口方向,类同于OUTCLR
0x520
保留位[120]
0x700
pin0的配置,详见后续内容
PIN_CNF[31] 0x77C
pin31的配置,详见后续内容
Table 2 GPIO
寄存器简介
1.3.2 GPIO的PIN_CNF[x]寄存器 PIN_CNF[x]
1.3.3 GPIO的PIN_CNF[x]寄存器简介
ID
A
Field
DIR
Description
设置pin[x]的方向,与DIR(0x514)等寄存器关联,修改其中一个另外一个自动改变
设置pin[x]的INPUT缓冲,为了省电可以写“1”断开缓冲,但是使用前必须写“0”连接上
设置pin[x]的上下拉电阻,使用标准值为13kΩ的内部电阻
B
C
D
E
INPUT
PULL
DRIVE
设置pin[x]的驱动强度,std. drive, 0.5 mA,high-drive, 5 mA
DRIVE 设置pin[x]的电平感知,写“1”感知高电平,写“0”感知低电平
Table 3 GPIO
的PIN_CNF[x]寄存器简介 1.4 官方blink代码样例
使用官方例程即可点亮LED0和LED1的blink程序(安装SDK后,源代码位于 path>ARMDeviceNordicnRF51822BoardPCA10001blinky_example) main函数请看: int main(void) { uint8_t output_state = 0; // Configure LED-pins as outputs nrf_gpio_range_cfg_output(LED_START, LED_STOP); while(true) { nrf_gpio_port_write(LED_PORT, 1 << (output_state + LED_OFFSET)); output_state = (output_state + 1) & BLINKY_STATE_MASK; nrf_delay_ms(100); } } 相关宏定义位于头文件"pca10001.h"内: #ifndef PCA10001_H #define PCA10001_H #define LED_START 18 #define LED0 18 #define LED_STOP 19 #define LED1 19 #define LED_PORT NRF_GPIO_PORT_SELECT_PORT2 #define LED_OFFSET 2 #define BUTTON_START 16 #define BUTTON0 16 #define BUTTON_STOP 17 #define BUTTON1 17 #define RX_PIN_NUMBER 11 #define TX_PIN_NUMBER 9 #define CTS_PIN_NUMBER 10 #define RTS_PIN_NUMBER 8 #define HWFC true #define BLINKY_STATE_MASK 0x01 #endif 1.5 编译、下载与演示 1. 在Keil μVision中打开 Blinky 工程, 或者 双击 文件。 2. 从 Select Target 下拉列表中选择 nRF51822_xxaa(256K),然后点击Build 或者按键盘上的F7编译 Blinky 工程。 3. 点击Load 图标, 下载并运行 Blinky 演示程序。 LED 0 和 LED 1 应该开始连续的闪烁了。
发布者:admin,转转请注明出处:http://www.yc00.com/xiaochengxu/1689328515a230633.html
评论列表(0条)