[nRF51822 AK]教程目录,规划九章,最终会有穿戴设备项目。
nRF51822-AK开发板预售的时候曾经承诺过会有配套教程。目前,上手指南已经完成了,请看:
http://www.amobbs.com/thread-5549079-1-1.html
但是,对于想深入学习这款BLE的Soc芯片的同学,有深度的教程应该是更好的选择。
事先声明,由于是个人业余爱好,请大家多提宝贵意见,切莫对进度抱怨。
另外,个人精力有限,等不及并有能力的朋友可以先行完成相关章节。如果共享出来,我会给予资金支持并非常感谢!!
先上目录,请大家多提想法
最后,上预计进度:
本帖最后由 overheat 于 2013-9-1 11:45 编辑
本教程默认用户熟悉nRF51822 AK的基本操作,否则请看楼主位的nRF51822 AK上手指南。
第一章:
mark 支持! lz真厉害
看着lz这么一步一步做过来 、、 本帖最后由 overheat 于 2013-9-2 05:42 编辑
怎么附件都丢了呢?重新上一下。
进度
想问问楼主对比CC2540的优势,资料我下载了。谢谢、 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 static/image/common/back.gif
到手好几天了,还没入门,有道不断的画词,一词一词的啃!!!
辛苦了!不过你这样看原版的理解的深入。
另外,给偷懒的朋友准备的:
http://www.amobbs.com/forum.php?mod=viewthread&tid=5549079&page=1#pid6937209 穿戴设备开发可以带上我嘛?
开发过nrf24le1无线通信设备 overheat 发表于 2013-9-1 22:29 static/image/common/back.gif
辛苦了!不过你这样看原版的理解的深入。
另外,给偷懒的朋友准备的:
穿戴设备开发可以带上我嘛?
开发过nrf24le1无线通信设备 能否提供开发板? 听楼主一说,值得一试,我有用过24L01,感觉不错。 本帖最后由 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节的功能。 tyoo 发表于 2013-9-4 11:05 static/image/common/back.gif
昨天拿到了DONGLE玩到现在才将资料等作用理清楚,看来官方教程真不是给我等菜鸟准备的。
所以给楼主提个建 ...
上手指南写的还有点生硬吧?开头应该加上你说的资源介绍和区别。
里面的例程都能跑起来吧?
这个书的确还是太简单了,需要配合上手指南一起看。另外你提到的几点,我也在写,书里应该都会有提及。 本帖最后由 overheat 于 2013-9-4 19:53 编辑
1 跑马灯
对于学习单片机编程的人来说,“跑马灯”这个词再熟悉不过了,它基本是我们入门的第一个例子。
本章我们就以“跑马灯”为例子,讲解nRF51822软件编程的第一课:GPIO。(PDF格式,如果下载后缀不对,请自行修改。)
3 Hello, world
重点讲UART。 4 Radio
普通2.4G的无线通讯,需要AK board和USB Dongle。 感谢楼主的教程。。辛苦了。。 overheat 发表于 2013-9-12 14:13 static/image/common/back.gif
4 Radio
普通2.4G的无线通讯,需要AK board和USB Dongle。
板子也搞了几天了,问下,怎么在中断中收发?
RTC中断已可以了,这个RADIO怎么中断收发呢 ccyhyxt 发表于 2013-9-14 12:10 static/image/common/back.gif
板子也搞了几天了,问下,怎么在中断中收发?
RTC中断已可以了,这个RADIO怎么中断收发呢 ...
既然RTC中断OK了,RADIO也一样。我也准备在书中加一个interrupt的章节。
你参考一下nrf51.h中的中断定义,仿照RTC修改就行。 我建议咱们建一个学习群吧,交流方便 overheat 发表于 2013-9-14 15:36 static/image/common/back.gif
既然RTC中断OK了,RADIO也一样。我也准备在书中加一个interrupt的章节。
你参考一下nrf51.h中的中断定义 ...
重点讲讲RADIO的啊,还是搞不定 ccyhyxt 发表于 2013-9-15 09:25 static/image/common/back.gif
重点讲讲RADIO的啊,还是搞不定
想用中断发Radio?
ok,明天。 MPU6050的连接例程(入门版本):
overheat 发表于 2013-9-15 21:49 static/image/common/back.gif
想用中断发Radio?
ok,明天。
楼主还在没,RADIO中断标志在哪设都没找到.. 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的寄存器,就可以判断发生了什么事件。然后做相应的处理。
楼主应该把入手指南写的再基础点,尤其是开头部分,怎么把板子跑起来,
对于一个小白想学习的,表示可以再改进一下。 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);会是什么问题?? ccyhyxt 发表于 2013-9-18 20:49 static/image/common/back.gif
这个我知道,关键是,一直进不了中断……
还有个问题:
你的RADIO没用中断? 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;
}
}
}中断一直进不了,配置如上,另一个是一直发的 请参考如下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); 由于中秋放假,迟来的低功耗教程:
mark........... 关注ing..... 第八章BLE:
嗯,不错!
希望更加多自己的东西,而不是照搬照抄。 eye 发表于 2013-9-24 22:41 static/image/common/back.gif
嗯,不错!
希望更加多自己的东西,而不是照搬照抄。
循序渐进吧,有个网友说要帮忙搬到wiki上的,到时候大家都可以修改贡献。 看到大家安卓手机比较多,先出个三星 S3的教程:
android: 我現在也在學習開發NRF51822,能加個Q,一起學習交流嗎?我目前遇到一個無法添加service characteristic的問題。 项目结束啦?强! 顶,,,{:smile:} 强呀,不得不顶!谢谢了! 先MARK一下,回头再细看
如果能出一个和24l01系列通讯的教程就更好了
本帖最后由 bzbs 于 2014-1-3 08:14 编辑耐心等计步器教程
如果能出一个和24l01系列通讯的教程就更好了
现在好像不能实现2个 51822之间的直接通讯,因此可以变通,一个做主,一个用24L01来通讯.不知道是否可行 bzbs 发表于 2014-1-3 08:09
耐心等计步器教程
如果能出一个和24l01系列通讯的教程就更好了
现在好像不能实现2个 51822之间的直接通讯, ...
51822好像只能做从机,现在弄了另外一个板,据说可以做主机,最大可以一拖8. bzbs 发表于 2014-1-3 08:09
耐心等计步器教程
如果能出一个和24l01系列通讯的教程就更好了
现在好像不能实现2个 51822之间的直接通讯, ...
最近Nordic出了S120协议栈,可以让两个nRF51822互相通讯了。 楼主厉害,佩服,能不能留个QQ号码给我,我等你的穿戴设备项目,开发板我一定买。支持楼主 顶起来,团购楼主的东西还在吃灰呢. 不等楼主了,转战昆天科了,协议可主可从,最多一对八,拿到芯片也做开发板玩。 mark 。nRF51822-AK 开发。 overheat 发表于 2014-1-3 09:04
最近Nordic出了S120协议栈,可以让两个nRF51822互相通讯了。
nRF51822 AK II开发板 能不能和其他蓝牙4.0适配器连,怎么连,要下那个程序? flyheart33 发表于 2014-3-28 09:05
nRF51822 AK II开发板 能不能和其他蓝牙4.0适配器连,怎么连,要下那个程序? ...
应该可以了,因为S120协议栈已经出来了。
不过市面上好像还没有看到啊。 overheat 发表于 2014-3-28 11:45
应该可以了,因为S120协议栈已经出来了。
不过市面上好像还没有看到啊。 ...
使用s110协议栈,nRF51822可以作为从设备被其他蓝牙搜。不知道程序怎么弄 mark.......... flyheart33 发表于 2014-3-28 16:27
使用s110协议栈,nRF51822可以作为从设备被其他蓝牙搜。不知道程序怎么弄
这个是最典型的作为外设的应用啊,官方的SDK里面就有代码。 overheat 发表于 2014-3-28 16:59
这个是最典型的作为外设的应用啊,官方的SDK里面就有代码。
你是说那个BLE心率的例子吗? 这个怎么和其他蓝牙配对?
还有ble 和 s110协议栈有什么联系 flyheart33 发表于 2014-3-28 17:03
你是说那个BLE心率的例子吗? 这个怎么和其他蓝牙配对?
还有ble 和 s110协议栈有什么联系 ...
是心率的例子,和其他蓝牙配对?你说的其他蓝牙是指手机吗?我不是很理解。
nordic的ble协议栈分为:
1. S110 用来做外设的,如心率带
2. S120用来做主机, 如智能家居类的应用。
overheat 发表于 2014-3-28 20:19
是心率的例子,和其他蓝牙配对?你说的其他蓝牙是指手机吗?我不是很理解。
nordic的ble协议栈分为:
我想说的是,能不能像市场上卖的蓝牙模块一样,可以配对!比方说,人家是用TI的CC5240做的蓝牙模块,我们这个nRF51822能不能和它连,怎么连!
能不能加QQ交流,我的QQ 2653213252flyheart
flyheart33 发表于 2014-3-28 20:53
我想说的是,能不能像市场上卖的蓝牙模块一样,可以配对!比方说,人家是用TI的CC5240做的蓝牙模块,我们 ...
可以连接,我们的这个烧写S120协议栈就行。 overheat 发表于 2014-3-28 21:01
可以连接,我们的这个烧写S120协议栈就行。
overheat,你好
nRF51822只有31脚,P00 - P30 ,为什么这里SPI0定义了P31?
QFN的没有引出p0.31,WLCSP的有。 overheat 发表于 2014-4-1 08:07
QFN的没有引出p0.31,WLCSP的有。
原来是这样啊,默认连到了SPI0的CLK overheat 发表于 2014-4-1 08:07
QFN的没有引出p0.31,WLCSP的有。
overheart 大哥
我烧写了S120协议栈,但是用济南华贸HM-15蓝牙4.0还是搜不到,不知道为何? flyheart33 发表于 2014-4-4 00:11
overheart 大哥
我烧写了S120协议栈,但是用济南华贸HM-15蓝牙4.0还是搜不到,不知道为何? ...
S120是做主模式的,你说的那个设备应该也是主模式的吧?
应该是一个主,一个从才能搜索到啊。 overheat 发表于 2014-4-4 09:07
S120是做主模式的,你说的那个设备应该也是主模式的吧?
应该是一个主,一个从才能搜索到啊。 ...
对,那个是主机,想用开发板做从机,怎么做? flyheart33 发表于 2014-4-4 09:32
对,那个是主机,想用开发板做从机,怎么做?
开发板要烧写S110的协议,《上手指南》里面有个心率计的例子就可以。 3q 正找资料 overheat 发表于 2014-4-4 09:34
开发板要烧写S110的协议,《上手指南》里面有个心率计的例子就可以。
试了很多次,不行,搜不到!用ipad能连,
这个蓝牙是CC2540芯片的 flyheart33 发表于 2014-4-4 11:06
试了很多次,不行,搜不到!用ipad能连,
这个蓝牙是CC2540芯片的
CC2540我就不熟悉了。。。。 请问,我在NRF51的编程指南中没找到中断操作方面的寄存器,是怎么回事,我想打开定时器中断该怎么操作,求指教啊 你好,请问在TWI与MPU6050教程中,更改了USART引脚后怎么无法使用串口了,改回来以后就可以了,是改的引脚有要求吗,还是其他问题,小弟急求,谢谢 楼上问题解决了,买的是AK2的开发板,引脚应该是0,1,跟串口没有冲突了,地址是0x68
(pin AD0 接地了) 学习中。。 学习下... 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);
有没有大神帮看看有没有配置错误。
支持,顶... 顶一下。。。。。 顶楼主 在做方案评估,其中包括TI ,DIALOG,NORDIC. liyang121316 发表于 2014-10-10 09:03
在做方案评估,其中包括TI ,DIALOG,NORDIC.
DIALOG,什么情况?方案对比可否发一下啊?? 低功耗的话DIALOG完胜,开发难度的话TI的基本中文资料包括书已经很多了,后两者以英文原版资料为主。DIALOG,NORDIC.都是MO的核,而TI的是51的核。 Mark一下,东西不错 不知能不能用JLINK调试,如果可以用那些管脚,我只看到 SWDCLKSWDIO/nReset 黄晨0410 发表于 2014-10-22 21:58
不知能不能用JLINK调试,如果可以用那些管脚,我只看到 SWDCLKSWDIO/nReset
可以用Jlink,只是支持的是两线制的SWD方式。 请问下在软件上这个NRF51822可以同时保留兼容nrf2401+通讯功能和蓝牙协议通讯功能的吗?? 捷胜 发表于 2014-10-30 11:25
请问下在软件上这个NRF51822可以同时保留兼容nrf2401+通讯功能和蓝牙协议通讯功能的吗?? ...
可以的,有个专门的例子。 学习了,真的不错 感谢分享 本人已认真阅读楼主之帖子,期待楼主之教程。 支持楼主,等待下文 啧啧啧,拜服楼主 楼主厉害 学习了{:lol:} 留下脚印!!!学习一下!!! 感谢楼主分享!!!! 不錯~~~~~~~~~~~~~~~~
页:
[1]