分享

第三课Nordic蓝牙开发板

 巴渭居士 2014-01-26

3 Hello, World
"Hello, world"几乎所有的编程语言入门教材的第一课。
它的起源要追溯到1972 年,贝尔实验室著名研究员Brian Kernighan 在撰写“B语言教程与指导(Tutorial Introduction to the Language B)”时初次使用(程序),这是目前已知最早的在计算机著作中将 hello 和 world 一起使用的记录。之后,在 1978 年,他在他和
Dennis Ritchie 合作撰写的C 语言圣经“TheC Programming Language”中,延用了“hello,world”句式,作为开篇第一个程序。在这个程序里,输出的”hello,world”全部是小写,没有
感叹号,逗号后有一空格。虽然之后几乎没能流传下来这个最初的格式,但从此用hello world 向世界打招呼成为惯例。
我们的第二课就跟这个"Hello,world"有关。
3.1 nRF51822 UART
nRF51822 的串口支持如下特性:
       全双工(Full-duplex)
       自动的 flow control
       奇偶校验并自动产生校验位
       高达 1Mbps的带宽

UART.JPG


3.1.1 管脚配置
nRF51822 的任何一个 GPIO 都可以用作 UART。这样极大的提高了布线的灵活性,有效的降低了 PCB的尺寸(或者层数)。
3.1.2 奇偶校验
当使能自动奇偶校验后,校验位可以自送生成。如果不想使用自动方式,还可以由TXPARITY寄存器特殊指定。

3.1.3 Error
当结束位没有被正确识别时,将会产生一个ERROR event。另外,当 RXD一直被拉低超过一帧数据的长度也会产生错误。
3.1.4 flow control(流控)
CTS 和 RTS 用于控制流量,如果不正确设置将无法显示。请注意相应的串口调试软件中也要根据代码配置开启(或关闭) RTS/CTS 的选项。
3.2 UART 寄存器
UART_reg.JPG
figure 1 UART registers
3.2.1 UART 寄存器简介 3.2.2 波特率寄存器
baudrate.JPG
figure 2 UART baudrate registers
3.3 官方 uart 代码样例
3.3.1 硬件连接
connect.jpg

请将Micro USB连接线(赠品)一端插在AK board的“J1”上,另一端插入电脑的USB端口。

nRF51822 AK 通过 TX(pin12)和RX(pin14)收发数据。

安装 SDK后,源代码位于:
<keil path>\ARM\Device\Nordic\nRF51822\Board\PCA10001\uart_example\)

不需要了解代码内容的,编译并下载程序后,可以直接跳到3.3.4小节。
3.3.2 simple_uart_config 函数讲解:
  
  1. void simple_uart_config(   
  2.   
  3. uint8_t  rts_pin_number,                            uint8_t txd_pin_number,                           uint8_t  cts_pin_number,                            uint8_t rxd_pin_number,
  4.   
  5. bool hwfc)
  6.   
  7. {
  8.   
  9. /*  设置txd_pin为输出 */
  10.   
  11.   nrf_gpio_cfg_output(txd_pin_number);
  12.   
  13. /*  设置rxd_pin为输入 */
  14.   
  15.   nrf_gpio_cfg_input(rxd_pin_number,  NRF_GPIO_PIN_NOPULL);   
  16.   
  17. /*  设置使用哪个引脚做RX和TX */
  18.   
  19.   NRF_UART0->PSELTXD = txd_pin_number;
  20.   
  21.   NRF_UART0->PSELRXD = rxd_pin_number;
  22.   
  23.    if(hwfc)
  24.   
  25.   {
  26.   
  27. /*  如果使用硬件流控,则设置相应引脚 */
  28.   
  29.     nrf_gpio_cfg_output(rts_pin_number);
  30.   
  31.     nrf_gpio_cfg_input(cts_pin_number,  NRF_GPIO_PIN_NOPULL);
  32.   
  33.     NRF_UART0->PSELCTS = cts_pin_number;
  34.   
  35.     NRF_UART0->PSELRTS = rts_pin_number;
  36.   
  37.     NRF_UART0->CONFIG  = (UART_CONFIG_HWFC_Enabled <<
  38.   
  39. UART_CONFIG_HWFC_Pos);  
  40.   
  41.   }
  42.   
  43. /*  设置波特率 */
  44.   
  45.   NRF_UART0->BAUDRATE         = (UART_BAUDRATE_BAUDRATE_Baud9600  <<
  46.   
  47. UART_BAUDRATE_BAUDRATE_Pos);  
  48.   
  49. /* 使能串口功能 */
  50.   
  51.   NRF_UART0->ENABLE           = (UART_ENABLE_ENABLE_Enabled  <<
  52.   
  53. UART_ENABLE_ENABLE_Pos);  
  54.   
  55. /* 开启相应任务(启动) */
  56.   
  57.   NRF_UART0->TASKS_STARTTX    = 1;
  58.   
  59.   NRF_UART0->TASKS_STARTRX    = 1;
  60.   
  61.   NRF_UART0->EVENTS_RXDRDY    = 0;
  62.   
  63. }
复制代码
  
3.3.3 相关宏定义位于头文件"pca10001.h"内:
  
  1. #ifndef  PCA10001_H                                                            
  2.   
  3. #define PCA10001_H
  4.   
  5.   
  6. #define LED_START       18 #define  LED0           18
  7.   
  8. #define LED_STOP        22
  9.   
  10. #define LED1            19
  11.   
  12. #define LED_PORT        NRF_GPIO_PORT_SELECT_PORT2
  13.   
  14. #define LED_OFFSET      2
  15.   
  16.   
  17. #define  BUTTON_START   16 #define BUTTON0         16 #define  BUTTON_STOP    17 #define BUTTON1         17
  18.   
  19.   
  20. #define RX_PIN_NUMBER   14        //for AK!
  21.   
  22. #define TX_PIN_NUMBER   12        //for AK!
  23.   
  24. #define CTS_PIN_NUMBER 10
  25.   
  26. #define RTS_PIN_NUMBER 8
  27.   
  28. #define HWFC             true
  29.   
  30.   
  31. #define BLINKY_STATE_MASK   0x01
  32.   
  33.   
  34. #endif
  35.   
复制代码
注意:本例程开启flowcontrol,所以设置HWFCtrue

3.3.4 增加打印“Hello,world”代码:
在代码中的107行加入如下代码:
  1. <span lang="EN-US" style="line-height: 1.5;">   </span><span lang="EN-US" style="font-size: 10pt; line-height: 107%; font-family: Consolas; color: rgb(65, 66, 66);">simple_uart_putstring((const
  2. uint8_t *)" \n\Hello, world ");</span>
复制代码
3.4 打印输出
电脑端串口调试软件可以使用商业化的SecureCRT 或者开源的Putty。下面以
SecureCRT 为例,讲解设置流程。
3.4.1 找到虚拟串口
邮件单击“我的电脑”,在弹出菜单中选择“管理”,并在下图弹出窗口左侧选择“设备管理器”。本例中显示,找到的虚拟串口为(COM7)。
COMx.JPG



3.4.2 配置 SecureCRT 用 SecureCRT 建立相应串口的连接,本例中使用(COM7),并进行如下配置(应选中图中的RTS/CTS选项)
SecureCRT_conf.JPG
3.4.3 输出“Hello,world”
最后,使用 KEIL下载程序到 nRF51822AK II中,串口调试软件会显示如下内容:
hello, world.JPG
本样例还具有回显功能,即敲击键盘后,串口数据会发送到nRF51822,nRF51822接收后会回传到串口终端,并在屏幕上显示。

nRF51822 的 Event &Task
nRF51822 中引入了更容易理解的 Event &Task 机制。Task是命令外设(TWI、I2C、 RADIO 之类)执行任务,Event 是外设汇报上来的执行过程中的各种事件(状态)。另外,event也与 Interrupt(中断)有关。
关于 Task,Event 以及 Interrupt 我们会在后面详细介绍。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多