查看: 13527|回复: 21

[nRF51822 AK II 教程]第二课,跑马灯(GPIO)。

  [复制链接]

该用户从未签到

发表于 2013-12-24 16:12:34 | 显示全部楼层 |阅读模式
分享到:
本帖最后由 nrf51822 于 2013-12-25 08:43 编辑

开始第二课!

1 跑马灯
对于学习单片机编程的人来说,“跑马灯”这个词再熟悉不过了,它基本是我们入门的第一个例子。
本章我们就以“跑马灯”为例子,讲解nRF51822软件编程的第一课:GPIO。
开始前还要唠叨一句,记得用nRFgo Studio擦除整个芯片哦,因为原来出厂有蓝牙程序的,不擦除不能下新的程序。

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        P0.18        SB6
LED 1        P0.19        SB7
LED 2        P0.20        SB8
LED 3        P0.21        SB9
LED 4        P0.22        SB10
Table 1 按键和 LED 连接
注意:此SB非彼SB,这里应该是short bridge的意思。板子上的某些GPIO被连到了特点的设备上(比如用于串口),但是同时也通过插针引出来了,如果你不想使用板载的功能,可以手动割断这个SB。
这里再卖个关子,nRF51822有个很牛X的功能,类似于FPGA,这颗芯片的任意一个引脚可以配置成任意一个功能。以后的课程中会提到。

1.1.2 AK board LED原理图
按键是低电平有效的,就是说按下按键后,IO的输入端会被连接到地。按键没有外部的上拉电阻,所以如果要使用P0.16 和 P0.17 引脚上的两个按键,需要使能引脚的内部上拉电阻。
Buttons.JPG

LED是高电平有效的,就是说写一个逻辑的 (‘1’) 到相应的输出引脚,将点亮LED。
可能了解电子的朋友看到下面这个图都会问:为什么是“共阴极”设计,而不是一般的“共阳极”设计呢?
其实因为我们学习的这颗nRF51822芯片最大的一个特性就是低功耗,而这种低功耗必定是芯片经常处于“睡眠”状态。在“睡眠”状态下,引脚电平都是低,LED只有设计成“共阴极”设计才能更省电。
LEDs.JPG

1.1.3 AK board (PCA10001)LED三维图
3D.JPG

1.2.1 nRF51822的GPIO框图
GPIO.JPG

1.3.1 nRF51822的GPIO寄存器简介
Register        Offset        Description
保留        0x000        保留位[321]
OUT        0x504        写GPIO端口,bit0对应pin0,bit1对应pin1...
OUTSET        0x508        set单一GPIO端口,写“1”到0x00只能将pin0拉高,对其他pin无效
OUTCLR        0x50C        clear单一GPIO端口,写“1”到0x00只能将pin0拉低,对其他pin无效
IN        0x510        读GPIO端口,bit0对应pin0,bit1对应pin1...
DIR        0x514        设置GPIO端口方向,类同于OUT
DIRSET        0x518        设置GPIO端口方向,类同于OUTSET
DIRCLR        0x51C        设置GPIO端口方向,类同于OUTCLR
保留        0x520        保留位[120]
PIN_CNF[0]        0x700        pin0的配置,详见后续内容
....               
PIN_CNF[31]        0x77C        pin31的配置,详见后续内容

1.3.3 GPIO的PIN_CNF[x]寄存器简介
ID        Field        Description
A        DIR        设置pin[x]的方向,与DIR(0x514)等寄存器关联,修改其中一个另外一个自动改变
B        INPUT        设置pin[x]的INPUT缓冲,为了省电可以写“1”断开缓冲,但是使用前必须写“0”连接上
C        PULL        设置pin[x]的上下拉电阻,使用标准值为13kΩ的内部电阻
D        DRIVE        设置pin[x]的驱动强度,std. drive, 0.5 mA,high-drive, 5 mA
E        DRIVE        设置pin[x]的电平感知,写“1”感知高电平,写“0”感知低电平

1.4 官方blink代码样例
使用官方例程即可点亮LED0和LED1的blink程序(安装SDK后,源代码位于<keil path>\ARM\Device\Nordic\nRF51822\Board\PCA10001\blinky_example\)
main函数请看:
  • int main(void)
  • {
  •   uint8_t output_state = 0;

  •   // Configure LED-pins as outputs
  •   // 设置LED_START到LED_STOP的引脚为输出
  •   nrf_gpio_range_cfg_output(LED_START, LED_STOP);

  •   while(true)
  •   {
  •     // 点亮LED
  •     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 工程, 或者 双击blinky.uvproj 文件。
2.        从 Select Target 下拉列表中选择 nRF51822_xxaa(256K),然后点击Build 或者按键盘上的F7编译 Blinky 工程。
3.        点击Load 图标, 下载并运行 Blinky 演示程序。 LED 0 和 LED 1 应该开始连续的闪烁了。

回复

使用道具 举报

  • TA的每日心情
    开心
    2022-4-12 14:51
  • 签到天数: 163 天

    连续签到: 1 天

    [LV.7]常住居民III

    发表于 2013-12-24 16:49:54 | 显示全部楼层
    坐沙发了,支持分享源码!!!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2015-2-14 09:02
  • 签到天数: 656 天

    连续签到: 1 天

    [LV.9]以坛为家II

    发表于 2013-12-24 20:06:40 | 显示全部楼层
    没用过,有机会希望能体验一下
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2019-7-13 19:58
  • 签到天数: 1818 天

    连续签到: 1 天

    [LV.Master]伴坛终老

    发表于 2013-12-25 11:13:31 | 显示全部楼层
    先看看 学习学习
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2014-12-24 12:35
  • 签到天数: 26 天

    连续签到: 1 天

    [LV.4]偶尔看看III

    发表于 2013-12-25 11:24:20 | 显示全部楼层
    帮忙顶贴                       
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    2020-12-31 13:14
  • 签到天数: 526 天

    连续签到: 1 天

    [LV.9]以坛为家II

    发表于 2013-12-26 20:22:13 | 显示全部楼层
    马克一下····准备学习
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    昨天 09:34
  • 签到天数: 4028 天

    连续签到: 20 天

    [LV.Master]伴坛终老

    发表于 2013-12-27 10:10:45 | 显示全部楼层
    谢谢分享!先了解一下!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2015-1-22 18:04
  • 签到天数: 189 天

    连续签到: 1 天

    [LV.7]常住居民III

    发表于 2013-12-27 16:46:33 | 显示全部楼层
    不错呢~~板子3D效果不错~~~
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2021-3-15 10:18
  • 签到天数: 1027 天

    连续签到: 1 天

    [LV.10]以坛为家III

    发表于 2013-12-27 16:55:54 | 显示全部楼层
    芯片可以买到吗?
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2014-12-12 19:36
  • 签到天数: 45 天

    连续签到: 1 天

    [LV.5]常住居民I

    发表于 2013-12-27 18:39:04 | 显示全部楼层
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条

    手机版|小黑屋|与非网

    GMT+8, 2024-11-20 04:48 , Processed in 0.188875 second(s), 33 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.