查看: 23521|回复: 15

[nRF51822 AK II 教程]第三课,Hello, world(UART串口)。

  [复制链接]

该用户从未签到

发表于 2014-1-18 10:52:18 | 显示全部楼层 |阅读模式
分享到:
本帖最后由 nrf51822 于 2014-1-23 11:05 编辑

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 我们会在后面详细介绍。

回复

使用道具 举报

该用户从未签到

 楼主| 发表于 2014-1-18 11:57:05 | 显示全部楼层
{:soso_e113:} 不买对的,只买贵的!
回复 支持 反对

使用道具 举报

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

    连续签到: 1 天

    [LV.9]以坛为家II

    发表于 2014-1-18 19:35:53 | 显示全部楼层
    板子在学校啊···先码着···
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2014-11-26 16:58
  • 签到天数: 34 天

    连续签到: 1 天

    [LV.5]常住居民I

    发表于 2014-1-22 15:07:59 | 显示全部楼层
    什么时候开始BLE例程啊?
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2015-10-8 09:49
  • 签到天数: 430 天

    连续签到: 1 天

    [LV.9]以坛为家II

    发表于 2014-1-23 06:40:26 | 显示全部楼层
    这个片子还是挺有优势的,可以在片子里编程,蓝牙直接集成,很适合需要蓝牙而且还有特殊需求的人使用
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2015-7-10 15:47
  • 签到天数: 6 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    发表于 2014-1-23 10:50:09 | 显示全部楼层
    代码中哪里有hello, world呢?
    回复 支持 反对

    使用道具 举报

    该用户从未签到

     楼主| 发表于 2014-1-23 11:06:52 | 显示全部楼层
    liubenyuan 发表于 2014-1-23 10:50
    代码中哪里有hello, world呢?

    已经修改了。

    呵呵,感谢提出宝贵建议~~~

    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2014-2-18 17:00:04 | 显示全部楼层
    串口支持 7-even-1配置吗?
    回复 支持 反对

    使用道具 举报

    该用户从未签到

     楼主| 发表于 2014-2-21 21:30:17 | 显示全部楼层
    bjmonsoon 发表于 2014-2-18 17:00
    串口支持 7-even-1配置吗?

    应该支持,在PS里面有描述。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2014-7-10 16:35
  • 签到天数: 49 天

    连续签到: 1 天

    [LV.5]常住居民I

    发表于 2014-3-3 14:00:28 | 显示全部楼层
    我试了例子没有任何反应啊
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

    手机版|小黑屋|与非网

    GMT+8, 2024-12-22 13:46 , Processed in 0.194789 second(s), 33 queries , MemCache On.

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

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.