overheat 发表于 2013-8-31 07:11:34

[nRF51822 AK]教程目录,规划九章,最终会有穿戴设备项目。

nRF51822-AK开发板预售的时候曾经承诺过会有配套教程。
目前,上手指南已经完成了,请看:
http://www.amobbs.com/thread-5549079-1-1.html

但是,对于想深入学习这款BLE的Soc芯片的同学,有深度的教程应该是更好的选择。

事先声明,由于是个人业余爱好,请大家多提宝贵意见,切莫对进度抱怨。
另外,个人精力有限,等不及并有能力的朋友可以先行完成相关章节。如果共享出来,我会给予资金支持并非常感谢!!

先上目录,请大家多提想法


最后,上预计进度:

overheat 发表于 2013-8-31 20:46:29

本帖最后由 overheat 于 2013-9-1 11:45 编辑

本教程默认用户熟悉nRF51822 AK的基本操作,否则请看楼主位的nRF51822 AK上手指南。

第一章:

rei1984 发表于 2013-8-31 20:48:01

mark 支持!

Name_006 发表于 2013-8-31 21:02:53

lz真厉害                                                                                                   
看着lz这么一步一步做过来 、、      

overheat 发表于 2013-9-1 15:10:47

本帖最后由 overheat 于 2013-9-2 05:42 编辑

怎么附件都丢了呢?重新上一下。

进度

rejoice818 发表于 2013-9-1 16:22:28

想问问楼主对比CC2540的优势,资料我下载了。谢谢、

overheat 发表于 2013-9-1 20:38:26

rejoice818 发表于 2013-9-1 16:22 static/image/common/back.gif
想问问楼主对比CC2540的优势,资料我下载了。谢谢、

第一章,介绍及开发环境配置。里面专门有一个我总结的表格:


   项目CC254xnRF51822CSR1010
最高输出功率0 dBm4 dBm7.5dBm
接收器灵敏度–94 dBm-93 dBm-93 dBm
工作模式 RX 低至17.9 mA13 mA16mA
工作模式 TX (0dBm):18.2 mA10.5 mA16mA
电源电压范围2 V–3.6 V1.8 V to 3.6 V1.8 V to 3.6 V
封装6 x 6 mm6 x 6 mm5 x 5 mm
注:自己理解,仅供参考


这里主要对比的是功耗。

另外还有几点,非常引人注意:

nRF51822是Cortex-M0内核,CC2540是增强51内核。
nRF51822的蓝牙协议栈和应用程序完全分开,入门不需要学习TI自己的RTOS,CC2540则反之。
nRF51822与noridc的nRF24系列无线兼容,不需要改动硬件,换软件就能与nRF24xx通讯。CC2540好像不行。
。。。

当然nRF51822也有缺点,就是技术支持没有CC2540那么强。毕竟TI很大,而且nRF51822今年6月份才量产,CC2540已经出来几年了。
我写这个教程,也是想让大家上手快一点。

xlwq 发表于 2013-9-1 21:12:24

到手好几天了,还没入门,有道不断的画词,一词一词的啃!!!

overheat 发表于 2013-9-1 22:29:57

xlwq 发表于 2013-9-1 21:12 static/image/common/back.gif
到手好几天了,还没入门,有道不断的画词,一词一词的啃!!!

辛苦了!不过你这样看原版的理解的深入。

另外,给偷懒的朋友准备的:
http://www.amobbs.com/forum.php?mod=viewthread&tid=5549079&page=1#pid6937209

Rogerhf 发表于 2013-9-1 23:08:17

穿戴设备开发可以带上我嘛?
开发过nrf24le1无线通信设备

Rogerhf 发表于 2013-9-1 23:08:45

overheat 发表于 2013-9-1 22:29 static/image/common/back.gif
辛苦了!不过你这样看原版的理解的深入。

另外,给偷懒的朋友准备的:


穿戴设备开发可以带上我嘛?
开发过nrf24le1无线通信设备

Rogerhf 发表于 2013-9-1 23:11:03

能否提供开发板?

rejoice818 发表于 2013-9-3 17:27:29

听楼主一说,值得一试,我有用过24L01,感觉不错。

tyoo 发表于 2013-9-4 11:05:07

本帖最后由 tyoo 于 2013-9-4 11:20 编辑

昨天拿到了DONGLE玩到现在才将资料等作用理清楚,看来官方教程真不是给我等菜鸟准备的。
所以给楼主提个建议,不必要按照官方资料来写教程,以一种面对完全新手的姿态来写,可分基础与进阶篇,基础篇就是手把手教大家先将板子跑起来,熟悉开发流程,熟悉各种资料作用,知道阅读哪节内容来实现目标即可。
我作为新手的思维来看,拿到板子后:
首先有一份说明来介绍nRF51822-AK与Dongle的特点、区别,特别是两者的作用,还有各种要用到的资料及作用。这部分内容看了不一定明白,但后面两个实验一做就容易明白了。
看完上面开始动手实践一些简单的例程,目标就是快速成功运行例程。
然后就是发挥想象力修改这些简单的例程,在此过程基本上能够熟悉整个开发流程及资料。
最后开发使用了,用到哪,资料查到哪。

教程我想到了几个内容:
开发环境搭建。
Dongle上按键与点灯
nRF51822-AK上按键与点灯,这里涉及到分别用Dongle和J-link下载,我的Jlink没法用,暂未做过。
Dongle与nRF51822-AK通信,通过按键控制Dongle上的灯。
手机与Dongle(或nRF51822-AK)连接。

我的学习目标也是实现上面5节的功能。

overheat 发表于 2013-9-4 11:35:46

tyoo 发表于 2013-9-4 11:05 static/image/common/back.gif
昨天拿到了DONGLE玩到现在才将资料等作用理清楚,看来官方教程真不是给我等菜鸟准备的。
所以给楼主提个建 ...

上手指南写的还有点生硬吧?开头应该加上你说的资源介绍和区别。
里面的例程都能跑起来吧?

这个书的确还是太简单了,需要配合上手指南一起看。另外你提到的几点,我也在写,书里应该都会有提及。

overheat 发表于 2013-9-4 19:44:39

本帖最后由 overheat 于 2013-9-4 19:53 编辑

1 跑马灯
对于学习单片机编程的人来说,“跑马灯”这个词再熟悉不过了,它基本是我们入门的第一个例子。

本章我们就以“跑马灯”为例子,讲解nRF51822软件编程的第一课:GPIO。(PDF格式,如果下载后缀不对,请自行修改。)

overheat 发表于 2013-9-8 15:37:27

3 Hello, world


重点讲UART。

overheat 发表于 2013-9-12 14:13:57

4 Radio

普通2.4G的无线通讯,需要AK board和USB Dongle。

相见恨晚 发表于 2013-9-14 10:57:31

感谢楼主的教程。。辛苦了。。

ccyhyxt 发表于 2013-9-14 12:10:18

overheat 发表于 2013-9-12 14:13 static/image/common/back.gif
4 Radio

普通2.4G的无线通讯,需要AK board和USB Dongle。

板子也搞了几天了,问下,怎么在中断中收发?
RTC中断已可以了,这个RADIO怎么中断收发呢

overheat 发表于 2013-9-14 15:36:23

ccyhyxt 发表于 2013-9-14 12:10 static/image/common/back.gif
板子也搞了几天了,问下,怎么在中断中收发?
RTC中断已可以了,这个RADIO怎么中断收发呢 ...

既然RTC中断OK了,RADIO也一样。我也准备在书中加一个interrupt的章节。

你参考一下nrf51.h中的中断定义,仿照RTC修改就行。

爱电子1122 发表于 2013-9-14 17:03:58

我建议咱们建一个学习群吧,交流方便

ccyhyxt 发表于 2013-9-15 09:25:20

overheat 发表于 2013-9-14 15:36 static/image/common/back.gif
既然RTC中断OK了,RADIO也一样。我也准备在书中加一个interrupt的章节。

你参考一下nrf51.h中的中断定义 ...

重点讲讲RADIO的啊,还是搞不定

overheat 发表于 2013-9-15 21:49:29

ccyhyxt 发表于 2013-9-15 09:25 static/image/common/back.gif
重点讲讲RADIO的啊,还是搞不定

想用中断发Radio?
ok,明天。

overheat 发表于 2013-9-15 21:52:16

MPU6050的连接例程(入门版本):

ccyhyxt 发表于 2013-9-17 14:01:36

overheat 发表于 2013-9-15 21:49 static/image/common/back.gif
想用中断发Radio?
ok,明天。

楼主还在没,RADIO中断标志在哪设都没找到..

overheat 发表于 2013-9-17 20:28:05

ccyhyxt 发表于 2013-9-17 14:01 static/image/common/back.gif
楼主还在没,RADIO中断标志在哪设都没找到..

Nordic\nrf51822\Include\nrf51.h中的:
第58行:RADIO_IRQn                  =   1,            /*!<   1RADIO   */
这个是中断的句柄(handler),再往下看:
第285行起:
/* ================================================================================ */
/* ================                      RADIO                     ================ */
/* ================================================================================ */


/**
* @brief The radio. (RADIO)
*/

typedef struct {                                    /*!< RADIO Structure                                                       */
...
__IO uint32_tEVENTS_READY;                      /*!< Ready event.                                                          */
__IO uint32_tEVENTS_ADDRESS;                  /*!< Address event.                                                      */
__IO uint32_tEVENTS_PAYLOAD;                  /*!< Payload event.                                                      */
__IO uint32_tEVENTS_END;                        /*!< End event.                                                            */
__IO uint32_tEVENTS_DISABLED;                   /*!< Disable event.                                                      */
__IO uint32_tEVENTS_DEVMATCH;                   /*!< A device address match occurred on the last received packet.          */
__IO uint32_tEVENTS_DEVMISS;                  /*!< No device address match occurred on the last received packet.         */
__IO uint32_tEVENTS_RSSIEND;                  /*!< Sampling of the receive signal strength complete. A new RSSI
...

进入handler后,查看以上这几个event的寄存器,就可以判断发生了什么事件。然后做相应的处理。

xgrwhn 发表于 2013-9-18 10:36:54

楼主应该把入手指南写的再基础点,尤其是开头部分,怎么把板子跑起来,
对于一个小白想学习的,表示可以再改进一下。

ccyhyxt 发表于 2013-9-18 20:49:07

overheat 发表于 2013-9-17 20:28 static/image/common/back.gif
Nordic\nrf51822\Include\nrf51.h中的:
第58行:RADIO_IRQn                  =   1,            /* ...

这个我知道,关键是,一直进不了中断……

还有个问题:
这是我RTC的中断
static uint8_t volatile ledtimeout=0;
void RTC0_IRQHandler()
{
if ((NRF_RTC0->EVENTS_TICK != 0) && ((NRF_RTC0->INTENSET & RTC_INTENSET_TICK_Msk) != 0))
{
                ++ledtimeout;
                if(ledtimeout>=4)
                {
                        ledtimeout=0;
                        NRF_RTC0->EVENTS_TICK = 0;
                        nrf_gpio_pin_toggle(23);
                        nrf_gpio_pin_write(21,1);
                        nrf_gpio_pin_write(22,1);
                }
}
}
这是我MAIN中的while(true):NRF_RADIO->PACKETPTR = (uint32_t)packet;
                NRF_RADIO->EVENTS_READY = 0U;
    // Enable radio and wait for ready
    NRF_RADIO->TASKS_RXEN = 1U;
               
    while(NRF_RADIO->EVENTS_READY == 0U)
    {
    }
    NRF_RADIO->EVENTS_END = 0U;
    // Start listening and wait for address received event
    NRF_RADIO->TASKS_START = 1U;
    // Wait for end of packet
    while(NRF_RADIO->EVENTS_END == 0U)
    {
    }
    // Write received data to LED0 and LED1 on CRC match
    if (NRF_RADIO->CRCSTATUS == 1U)
    {
      switch(packet)
      {
      case 0:
          nrf_gpio_pin_write(21,1);
                                        nrf_gpio_pin_write(22,1);
                                        nrf_gpio_pin_write(23,1);
          break;

      case 1:
          nrf_gpio_pin_toggle(21);
                                        //nrf_delay_ms(200);
          break;
                                case 2:
          nrf_gpio_pin_write(22,0);
                                        //nrf_delay_ms(200);
          break;
                                case 3:
          nrf_gpio_pin_write(21,1);
                                        nrf_gpio_pin_write(22,1);
                                        nrf_gpio_pin_write(23,1);
          break;
      }
    }
                NRF_RADIO->EVENTS_DISABLED = 0U;
    // Disable radio
    NRF_RADIO->TASKS_DISABLE = 1U;
    while(NRF_RADIO->EVENTS_DISABLED == 0U)
    {
    }问题是RTC中断开启那无线收就不正常,收了几下就没了
RTC关了正常


AK板一直在发packet = 1;
                        NRF_RADIO->PACKETPTR = (uint32_t)packet;
                        NRF_RADIO->EVENTS_READY = 0U;
                        NRF_RADIO->TASKS_TXEN = 1;
                        while (NRF_RADIO->EVENTS_READY == 0U)
                        {
                        }
                        NRF_RADIO->TASKS_START = 1U;
                        NRF_RADIO->EVENTS_END = 0U;
                        while(NRF_RADIO->EVENTS_END == 0U)
                        {
                        }
                       
                        NRF_RADIO->EVENTS_DISABLED = 0U;
                        // Disable radio
                        NRF_RADIO->TASKS_DISABLE = 1U;
                        while(NRF_RADIO->EVENTS_DISABLED == 0U)
                        {
                        }
                        nrf_gpio_pin_toggle(18);
                        nrf_delay_ms(20);会是什么问题??

overheat 发表于 2013-9-19 03:57:57

ccyhyxt 发表于 2013-9-18 20:49 static/image/common/back.gif
这个我知道,关键是,一直进不了中断……

还有个问题:


你的RADIO没用中断?

ccyhyxt 发表于 2013-9-19 08:15:15

overheat 发表于 2013-9-19 03:57 static/image/common/back.gif
你的RADIO没用中断?

是中断用不起来,void init(void)
{
        NRF_CLOCK->EVENTS_LFCLKSTARTED = 0;
        NRF_CLOCK->TASKS_LFCLKSTART = 1;
        while (NRF_CLOCK->EVENTS_LFCLKSTARTED == 0)
{
}
/* Start 16 MHz crystal oscillator */
NRF_CLOCK->EVENTS_HFCLKSTARTED = 0;
NRF_CLOCK->TASKS_HFCLKSTART = 1;

/* Wait for the external oscillator to start up */
while (NRF_CLOCK->EVENTS_HFCLKSTARTED == 0)
{
}

// Set radio configuration parameters
        //---------------------------------------------------------------------------------------------------------
// Radio config
NRF_RADIO->TXPOWER = (RADIO_TXPOWER_TXPOWER_0dBm << RADIO_TXPOWER_TXPOWER_Pos);
NRF_RADIO->FREQUENCY = 7UL;                // Frequency bin 7, 2407MHz
NRF_RADIO->MODE = (RADIO_MODE_MODE_Nrf_2Mbit << RADIO_MODE_MODE_Pos);

// Radio address config
NRF_RADIO->PREFIX0 = 0xC4C3C2E7UL;// Prefix byte of addresses 3 to 0
NRF_RADIO->PREFIX1 = 0xC5C6C7C8UL;// Prefix byte of addresses 7 to 4
NRF_RADIO->BASE0   = 0xE7E7E7E7UL;// Base address for prefix 0
NRF_RADIO->BASE1   = 0x00C2C2C2UL;// Base address for prefix 1-7
NRF_RADIO->TXADDRESS = 0x00UL;      // Set device address 0 to use when transmitting
NRF_RADIO->RXADDRESSES = 0x01UL;    // Enable device address 0 to use which receiving

// Packet configuration
NRF_RADIO->PCNF0 = (PACKET0_S1_SIZE << RADIO_PCNF0_S1LEN_Pos) |
                     (PACKET0_S0_SIZE << RADIO_PCNF0_S0LEN_Pos) |
                     (PACKET0_PAYLOAD_SIZE << RADIO_PCNF0_LFLEN_Pos); //lint !e845 "The right argument to operator '|' is certain to be 0"

// Packet configuration
   NRF_RADIO->PCNF1 = (RADIO_PCNF1_WHITEEN_Disabled << RADIO_PCNF1_WHITEEN_Pos)    |
                      (RADIO_PCNF1_ENDIAN_Big << RADIO_PCNF1_ENDIAN_Pos)         |
                      (PACKET1_BASE_ADDRESS_LENGTH << RADIO_PCNF1_BALEN_Pos)       |
                      (PACKET1_STATIC_LENGTH << RADIO_PCNF1_STATLEN_Pos)         |
                      (PACKET1_PAYLOAD_SIZE << RADIO_PCNF1_MAXLEN_Pos); //lint !e845 "The right argument to operator '|' is certain to be 0"

// CRC Config
NRF_RADIO->CRCCNF = (RADIO_CRCCNF_LEN_Two << RADIO_CRCCNF_LEN_Pos); // Number of checksum bits
if ((NRF_RADIO->CRCCNF & RADIO_CRCCNF_LEN_Msk) == (RADIO_CRCCNF_LEN_Two << RADIO_CRCCNF_LEN_Pos))
{
    NRF_RADIO->CRCINIT = 0xFFFFUL;      // Initial value      
    NRF_RADIO->CRCPOLY = 0x11021UL;   // CRC poly: x^16+x^12^x^5+1
}
else if ((NRF_RADIO->CRCCNF & RADIO_CRCCNF_LEN_Msk) == (RADIO_CRCCNF_LEN_One << RADIO_CRCCNF_LEN_Pos))
{
    NRF_RADIO->CRCINIT = 0xFFUL;      // Initial value
    NRF_RADIO->CRCPOLY = 0x107UL;       // CRC poly: x^8+x^2^x^1+1
}

nrf_delay_ms(3);
        //---------------------------------------------------------------------------------------------------------
// Set payload pointer
NRF_RADIO->PACKETPTR = (uint32_t)packet;
        NRF_RADIO->EVENTS_READY = 0U;
        // Enable radio and wait for ready
        NRF_RADIO->TASKS_RXEN = 1U;
       
        while(NRF_RADIO->EVENTS_READY == 0U)
        {
        }
        NRF_RADIO->EVENTS_END = 0U;
        // Start listening and wait for address received event
        NRF_RADIO->TASKS_START = 1U;
        while(NRF_RADIO->EVENTS_END == 0U)
        {
        }
        NVIC_EnableIRQ(RADIO_IRQn);
       
}void RADIO_IRQHandler()
{
        NRF_RADIO->PACKETPTR = (uint32_t)packet;
        if(NRF_RADIO->EVENTS_DEVMATCH==1)
        {
                switch(packet)
                {
                        case 0:
                                nrf_gpio_pin_write(21,1);
                                nrf_gpio_pin_write(22,1);
                                nrf_gpio_pin_write(23,1);
                                break;

                        case 1:
                                nrf_gpio_pin_write(21,0);
                                break;
                        case 2:
                                nrf_gpio_pin_write(22,0);
                                break;
                        case 3:
                                nrf_gpio_pin_write(21,1);
                                nrf_gpio_pin_write(22,1);
                                nrf_gpio_pin_write(23,1);
                                break;
                }
        }
}中断一直进不了,配置如上,另一个是一直发的

overheat 发表于 2013-9-20 16:52:57

请参考如下UART中断使能语句修改你的RADIO中断使能:
// Enable UART interrupt
NRF_UART0->INTENCLR = 0xffffffffUL;
NRF_UART0->INTENSET = (UART_INTENSET_RXDRDY_Set << UART_INTENSET_RXDRDY_Pos) |
                        (UART_INTENSET_TXDRDY_Set << UART_INTENSET_TXDRDY_Pos) |
                        (UART_INTENSET_ERROR_Set << UART_INTENSET_ERROR_Pos);

NVIC_ClearPendingIRQ(UART0_IRQn);
NVIC_SetPriority(UART0_IRQn, 0);
NVIC_EnableIRQ(UART0_IRQn);

overheat 发表于 2013-9-21 11:19:51

由于中秋放假,迟来的低功耗教程:

bitiwindy1 发表于 2013-9-23 11:14:47

mark...........

small_jobs 发表于 2013-9-24 15:04:08

关注ing.....

overheat 发表于 2013-9-24 22:26:44

第八章BLE:

eye 发表于 2013-9-24 22:41:54

嗯,不错!
希望更加多自己的东西,而不是照搬照抄。

overheat 发表于 2013-9-25 06:30:48

eye 发表于 2013-9-24 22:41 static/image/common/back.gif
嗯,不错!
希望更加多自己的东西,而不是照搬照抄。

循序渐进吧,有个网友说要帮忙搬到wiki上的,到时候大家都可以修改贡献。

overheat 发表于 2013-9-28 11:56:16

看到大家安卓手机比较多,先出个三星 S3的教程:
android:

wkong501 发表于 2013-10-8 15:44:01

我現在也在學習開發NRF51822,能加個Q,一起學習交流嗎?我目前遇到一個無法添加service characteristic的問題。

feiji323 发表于 2013-10-25 11:17:19

项目结束啦?强!

hyf88 发表于 2013-11-9 11:41:05

顶,,,{:smile:}

mmy168 发表于 2013-12-25 14:42:32

强呀,不得不顶!谢谢了!

zhanji007 发表于 2013-12-25 16:06:02

先MARK一下,回头再细看

bzbs 发表于 2014-1-3 08:09:48

如果能出一个和24l01系列通讯的教程就更好了

本帖最后由 bzbs 于 2014-1-3 08:14 编辑

耐心等计步器教程
如果能出一个和24l01系列通讯的教程就更好了
现在好像不能实现2个 51822之间的直接通讯,因此可以变通,一个做主,一个用24L01来通讯.不知道是否可行

rf_smart 发表于 2014-1-3 08:34:14

bzbs 发表于 2014-1-3 08:09
耐心等计步器教程
如果能出一个和24l01系列通讯的教程就更好了
现在好像不能实现2个 51822之间的直接通讯, ...

51822好像只能做从机,现在弄了另外一个板,据说可以做主机,最大可以一拖8.

overheat 发表于 2014-1-3 09:04:07

bzbs 发表于 2014-1-3 08:09
耐心等计步器教程
如果能出一个和24l01系列通讯的教程就更好了
现在好像不能实现2个 51822之间的直接通讯, ...

最近Nordic出了S120协议栈,可以让两个nRF51822互相通讯了。

auxjiang 发表于 2014-3-6 16:32:36

楼主厉害,佩服,能不能留个QQ号码给我,我等你的穿戴设备项目,开发板我一定买。支持楼主

fshunj 发表于 2014-3-6 23:34:38

顶起来,团购楼主的东西还在吃灰呢.

rf_smart 发表于 2014-3-6 23:58:39

不等楼主了,转战昆天科了,协议可主可从,最多一对八,拿到芯片也做开发板玩。

uplinux 发表于 2014-3-23 10:58:45

mark 。nRF51822-AK 开发。

flyheart33 发表于 2014-3-28 09:05:12

overheat 发表于 2014-1-3 09:04
最近Nordic出了S120协议栈,可以让两个nRF51822互相通讯了。

nRF51822 AK II开发板 能不能和其他蓝牙4.0适配器连,怎么连,要下那个程序?

overheat 发表于 2014-3-28 11:45:48

flyheart33 发表于 2014-3-28 09:05
nRF51822 AK II开发板 能不能和其他蓝牙4.0适配器连,怎么连,要下那个程序? ...

应该可以了,因为S120协议栈已经出来了。

不过市面上好像还没有看到啊。

flyheart33 发表于 2014-3-28 16:27:13

overheat 发表于 2014-3-28 11:45
应该可以了,因为S120协议栈已经出来了。

不过市面上好像还没有看到啊。 ...

使用s110协议栈,nRF51822可以作为从设备被其他蓝牙搜。不知道程序怎么弄

机器人天空 发表于 2014-3-28 16:41:31

mark..........

overheat 发表于 2014-3-28 16:59:44

flyheart33 发表于 2014-3-28 16:27
使用s110协议栈,nRF51822可以作为从设备被其他蓝牙搜。不知道程序怎么弄

这个是最典型的作为外设的应用啊,官方的SDK里面就有代码。

flyheart33 发表于 2014-3-28 17:03:45

overheat 发表于 2014-3-28 16:59
这个是最典型的作为外设的应用啊,官方的SDK里面就有代码。

你是说那个BLE心率的例子吗? 这个怎么和其他蓝牙配对?

还有ble 和 s110协议栈有什么联系

overheat 发表于 2014-3-28 20:19:07

flyheart33 发表于 2014-3-28 17:03
你是说那个BLE心率的例子吗? 这个怎么和其他蓝牙配对?

还有ble 和 s110协议栈有什么联系 ...

是心率的例子,和其他蓝牙配对?你说的其他蓝牙是指手机吗?我不是很理解。

nordic的ble协议栈分为:
1. S110 用来做外设的,如心率带
2. S120用来做主机, 如智能家居类的应用。

flyheart33 发表于 2014-3-28 20:53:15

overheat 发表于 2014-3-28 20:19
是心率的例子,和其他蓝牙配对?你说的其他蓝牙是指手机吗?我不是很理解。

nordic的ble协议栈分为:


我想说的是,能不能像市场上卖的蓝牙模块一样,可以配对!比方说,人家是用TI的CC5240做的蓝牙模块,我们这个nRF51822能不能和它连,怎么连!

能不能加QQ交流,我的QQ 2653213252flyheart

overheat 发表于 2014-3-28 21:01:27

flyheart33 发表于 2014-3-28 20:53
我想说的是,能不能像市场上卖的蓝牙模块一样,可以配对!比方说,人家是用TI的CC5240做的蓝牙模块,我们 ...

可以连接,我们的这个烧写S120协议栈就行。

flyheart33 发表于 2014-3-31 11:42:15

overheat 发表于 2014-3-28 21:01
可以连接,我们的这个烧写S120协议栈就行。

overheat,你好


nRF51822只有31脚,P00 - P30 ,为什么这里SPI0定义了P31?

overheat 发表于 2014-4-1 08:07:42

QFN的没有引出p0.31,WLCSP的有。

flyheart33 发表于 2014-4-1 09:00:25

overheat 发表于 2014-4-1 08:07
QFN的没有引出p0.31,WLCSP的有。

原来是这样啊,默认连到了SPI0的CLK

flyheart33 发表于 2014-4-4 00:11:42

overheat 发表于 2014-4-1 08:07
QFN的没有引出p0.31,WLCSP的有。

overheart 大哥

我烧写了S120协议栈,但是用济南华贸HM-15蓝牙4.0还是搜不到,不知道为何?

overheat 发表于 2014-4-4 09:07:34

flyheart33 发表于 2014-4-4 00:11
overheart 大哥

我烧写了S120协议栈,但是用济南华贸HM-15蓝牙4.0还是搜不到,不知道为何? ...

S120是做主模式的,你说的那个设备应该也是主模式的吧?

应该是一个主,一个从才能搜索到啊。

flyheart33 发表于 2014-4-4 09:32:14

overheat 发表于 2014-4-4 09:07
S120是做主模式的,你说的那个设备应该也是主模式的吧?

应该是一个主,一个从才能搜索到啊。 ...

对,那个是主机,想用开发板做从机,怎么做?

overheat 发表于 2014-4-4 09:34:06

flyheart33 发表于 2014-4-4 09:32
对,那个是主机,想用开发板做从机,怎么做?

开发板要烧写S110的协议,《上手指南》里面有个心率计的例子就可以。

kingqb 发表于 2014-4-4 09:36:45

3q 正找资料

flyheart33 发表于 2014-4-4 11:06:12

overheat 发表于 2014-4-4 09:34
开发板要烧写S110的协议,《上手指南》里面有个心率计的例子就可以。

试了很多次,不行,搜不到!用ipad能连,
这个蓝牙是CC2540芯片的

overheat 发表于 2014-4-4 15:26:49

flyheart33 发表于 2014-4-4 11:06
试了很多次,不行,搜不到!用ipad能连,
这个蓝牙是CC2540芯片的

CC2540我就不熟悉了。。。。

jinnianhan123 发表于 2014-5-25 15:07:22

请问,我在NRF51的编程指南中没找到中断操作方面的寄存器,是怎么回事,我想打开定时器中断该怎么操作,求指教啊

SZHjy 发表于 2014-5-25 21:24:40

你好,请问在TWI与MPU6050教程中,更改了USART引脚后怎么无法使用串口了,改回来以后就可以了,是改的引脚有要求吗,还是其他问题,小弟急求,谢谢

SZHjy 发表于 2014-5-27 16:04:07

楼上问题解决了,买的是AK2的开发板,引脚应该是0,1,跟串口没有冲突了,地址是0x68
(pin AD0 接地了)

andmain999 发表于 2014-5-30 09:37:41

学习中。。

ZMCU 发表于 2014-7-14 16:21:33

学习下...

lq1505400 发表于 2014-9-28 00:48:24

lz你好,今天在玩SPI总线,用来驱动德飞莱的一块mini12864,使用模拟的跑了起来。但是自己写一个SPI总线来驱动却怎么都不能驱动。能帮我看下配置有何问题吗?

/* ================================================================================ */
/* ================                     SPI                      ================ */
/* ================================================================================ */

void configure_SPI_init( uint8_t pin_sck,                         //For spi bus --sck
                                                                                uint8_t pin_mosi,                        //For spi bus        --mosi
                                                                                uint8_t pin_miso,                        //For spi bus        --miso
                                                                                NRF_SPI_Type *SPIx,                //Choose SPI0 or SPI1
                                                                                bool order,                                                //Select significant bit shifted out first
                                                                                                                                                                        //        MSB                                                 0                        |                        LSB                                                        1
                                                                                bool cpol,                                                //Serial clock (SCK) polarity active
                                                                                                                                                                        //        Active high                 0                        |                        Active low                         1
                                                                                bool cpha,                                                //Sample on leading edge of clock or trailing edge Serial clock (SCK) phase
                                                                                                                                                                        //        Leading edge                 0                        |                        Trailing edge         1
                                                                                uint32_t freq,                                //Set SPI master data rate
                                                                                bool enable,                                        //Enable SPIx
                                                                                uint8_t pin_select )        //Map select                0b111 map all 0b000 do nothing and return;   bit 0 param...
{
/*-----------------------Select Pin for SPIx----------------------*/
        configure_SPI_pin_map( pin_sck, pin_mosi, pin_miso, SPIx, pin_select);
/*-----------------Configure SPIx Config Register-----------------*/
        SPIx->CONFIG = ( order << 0 ) | ( cpol << 1 ) | ( cpha << 2 );
/*-------------------------SPIx Frequence-------------------------*/
        SPIx->FREQUENCY = freq;
/*---------------------------SPIx Enable--------------------------*/
        SPIx->ENABLE = enable;
/*--------------------SPIx Prepare to Receive---------------------*/
        SPIx->EVENTS_READY &= 0x0;
       
        return;
}

/* ================                     SPI TX                     ================ */
void SPI_tx ( NRF_SPI_Type *SPIx,                //Choose SPI0 or SPI1
                                                        uint8_t ch)                                                //Send char
{
/*-------------------Wait for Last Task complete------------------*/
        while( !SPIx->EVENTS_READY )                //When Ready is Set, The TX Task is Complete
        {
                HOOK_TIMEOUT();
        }
/*--------------------SPIx Prepare to Receive---------------------*/
        SPIx->EVENTS_READY &= 0x0;
/*----------------------------Send ch-----------------------------*/
        SPIx->TXD = ch;
/*--------------------Wait for TX Task complete-------------------*/
        while( !SPIx->EVENTS_READY )                //When Ready is Set, The TX Task is Complete
        {
                HOOK_TIMEOUT();
        }
/*--------------------SPIx Prepare to TX---------------------*/
        SPIx->EVENTS_READY &= 0x0;
       
}
调用是configure_SPI_init(SCK, SDA, 0, NRF_SPI0, 0, 1, 0, SPI_K125, 1, (1<<0) | (1<<1));//液晶采样:高位在前,上升沿采样,无动作时SCK为高电平.
发送调用        SPI_tx(NRF_SPI0, data1);

有没有大神帮看看有没有配置错误。

LCH201328 发表于 2014-9-28 13:41:37

支持,顶...

xrgood 发表于 2014-9-28 13:51:46

顶一下。。。。。

xCamel 发表于 2014-10-2 16:54:53

顶楼主                     

liyang121316 发表于 2014-10-10 09:03:27

在做方案评估,其中包括TI ,DIALOG,NORDIC.

overheat 发表于 2014-10-10 10:02:12

liyang121316 发表于 2014-10-10 09:03
在做方案评估,其中包括TI ,DIALOG,NORDIC.

DIALOG,什么情况?方案对比可否发一下啊??

liyang121316 发表于 2014-10-10 23:43:21

低功耗的话DIALOG完胜,开发难度的话TI的基本中文资料包括书已经很多了,后两者以英文原版资料为主。DIALOG,NORDIC.都是MO的核,而TI的是51的核。

X-savage 发表于 2014-10-19 23:06:05

Mark一下,东西不错

黄晨0410 发表于 2014-10-22 21:58:59

不知能不能用JLINK调试,如果可以用那些管脚,我只看到 SWDCLKSWDIO/nReset

overheat 发表于 2014-10-23 12:19:25

黄晨0410 发表于 2014-10-22 21:58
不知能不能用JLINK调试,如果可以用那些管脚,我只看到 SWDCLKSWDIO/nReset

可以用Jlink,只是支持的是两线制的SWD方式。

捷胜 发表于 2014-10-30 11:25:42

请问下在软件上这个NRF51822可以同时保留兼容nrf2401+通讯功能和蓝牙协议通讯功能的吗??

overheat 发表于 2014-10-30 20:15:20

捷胜 发表于 2014-10-30 11:25
请问下在软件上这个NRF51822可以同时保留兼容nrf2401+通讯功能和蓝牙协议通讯功能的吗?? ...

可以的,有个专门的例子。

彪悍的飞翔 发表于 2014-11-5 10:01:41

学习了,真的不错

hyper320 发表于 2014-11-5 12:09:15

感谢分享

天荒 发表于 2014-12-1 15:48:58

本人已认真阅读楼主之帖子,期待楼主之教程。

liangying 发表于 2014-12-27 16:39:03

支持楼主,等待下文

Eppo 发表于 2015-2-8 14:58:45

啧啧啧,拜服楼主

爱看下雪 发表于 2015-7-7 09:37:13

楼主厉害 学习了{:lol:}

wlksosfytz 发表于 2016-1-7 22:34:11

留下脚印!!!学习一下!!!

lxinj5071101 发表于 2019-3-3 14:57:19

感谢楼主分享!!!!

jxchen 发表于 2019-3-4 23:35:59

不錯~~~~~~~~~~~~~~~~
页: [1]
查看完整版本: [nRF51822 AK]教程目录,规划九章,最终会有穿戴设备项目。