2 跑马灯_图文

2 跑马灯_图文

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条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信