您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 咨询培训 > nrf51822学习记录
page1目录第一部分:前期准备..........................................................................................21.1软件准备:.........................................................................................................21.2硬件准备:.........................................................................................................2第二部分:程序编写....................................................................................................32.1编写第一个亮灯程序...........................................................................................32.2一般程序的编写................................................................................................102.3ble的编写.......................................................................................................14page2第一部分:前期准备1.1软件准备:Keil4.72以上(4.72版本以下不能调试)JlinkARM4.86bNrfgostudioNrf51sdk协议栈s110,s120,s130软件说明:nrf51下载程序有两种途径,一种是keil,一种是nrfgo。Keil只能下载非ble协议栈的普通程序。Nrfgo是下载ble协议栈和普通程序的。1.2硬件准备:认识pca10005(带sma天线),pca10004,pca10000(dongle),具体参考nRF51822_DK_User_Guide_v1.0.pdf(这本书是dk的入门介绍)其他的入门参考文档:nRF51822PSv1.3CN20130903.pdfnRF51822_PSv2.0.pdf(这两个都是产品规格书,可以连接芯片的配置和电气特性,ps1.3是中文版。Ps2.0是最新版)nRF51_Series_Reference_Manual_v2.1.pdf(nrf51822的具体寄存器使用必须参考这个文档)nRF51822上手指南.pdf(这是ak板的上手中文指南)nRF51822-Kit开发板使用说明.pdf(这是网上大d电子自己生产板子的使用说明可参考)nRF51822DevelopmentKit-Hardwarefiles2_0(这个文件夹里面是dk板的pcb图)page3第二部分:程序编写2.1编写第一个亮灯程序(由于第一个程序就详细的讲解下)硬件准备:pca10000(dongle)软件准备:blinky_exampl(Keil\ARM\Device\Nordic\nrf51822\Board\pca10001\blinky_example文件下,由于pca10000里没有点灯例程)1.打开blinky.uvproj(依次设置)page4(这里IROM,IRAM设置要强调下。Irom1在不在ble协议栈的情况下从0x0开始有ble协议栈s110,S120,s130,rom起始就得从ble协议栈之后开始,比如s110v7是有88k,从而起始就是0x16000)当你是在弄不清楚,就用nrfgo直接下载吧page5(这里修改很重要,因为在main.c文件头文件有#includeboards.h打开如下)上上图的设置里的define里面设置的就是宏定义上图的板子设置,因为现在我们硬件选用pca10000,所以在修改为NRF51BOARD_PCA10000注意:pca10000的引脚灯是LED_RGB_RED,PCA10001是LED_0;所以主程序要将LED_0等修改为pca10000.h里面的引脚设置page6(这里是设置哪些引用的头文件C文件的路径选择)当插上不识别jlink时或者下载不了时,点上面的settings,等到电脑识别jlink,在下图那个地方会有jlink信息,下图由于没插jlink所以没显示,然后再点图中的flashdownloadpage7(要保证上图箭头地方有那个)page82.开始下载编译完后可以选择load下载,下载完后也可进行调试,下图箭头为调试注意事项:下载完ble协议栈程序后,重新下载普通程序必须用nrfgo先擦出其他注意事项可参考:【总结】nRF51822开发过程中的各种奇葩问题解决办法V1.0.pdf软件篇NRF51822开发环境设置.pdf3.程序分析这个程序比较简单就是先设置i/o为输出,然后点灯延时。一般先查看nrf51手册里面的io口寄存器page9我们着重看下pin_cnf寄存器它与main.c里的nrf_gpio_cfg_output(LED_RGB_RED)相对应;看nrf_gpio_cfg_output()定义,一般是不需要修改的,只是了解下一般输入输出配置不需要修改,直接用,但是当需要大电流,比如电机马达,led时需改变驱动能力,具体选用那种,可以实测。page102.2一般程序的编写可参考的例程如下:大D出品0内部Flash编程和UICR用户信息配置寄存器配置.pdf1CLOCK系统时钟.pdf2跑马灯.pdf3Helloworld.pdf4radio.pdf5lowenergy.pdf6MPU6050.pdf7interrupt.pdf8ble_1.pdf8ble_2.pdf9安卓app.pdf清风出品应用程序篇--第二节:系统时钟设置.pdf应用程序篇--第三节:按键扫描.pdf应用程序篇--第四节:按键中断.pdf应用程序篇--第五节:RTC的使用.pdf应用程序篇--第六节:time定时器定时.pdf应用程序篇--第七节:串口UART的使用.pdf应用程序篇--第八节:串口UART中断.pdf应用程序篇--第九节:PPI模块的使用.pdf建议学习例程步骤(纯单片机控制):1.IO控制学习-2.系统时钟-3.按键中断-4.定时器-5.串口-6.ppi模块-7.iic(twi)主要参考例程:(官方的)blinky_exampleppi_exampletimer_exampleuart_exampletwi_sw_master_exampletemperature_example(以后看,关于温度传感器)page11主要学习思路:看例程看芯片手册(nRF51_Series_Reference_Manual_v2.1.pdf)两个方面:方框图(吐槽一句方框图没ti的好),寄存器说明举个栗子:温度传感器temperature_example首先可以打开例程和芯片手册,可以看到有以下寄存器在nrf51822体系里,寄存器分三种,tasks,events,registers。task是执行任务的,events是报告各种状态,类似触发中断.Temp寄存器是储存收集到数值nrf_temp_init();while(1){NRF_TEMP-TASKS_START=1;while(NRF_TEMP-EVENTS_DATARDY==0){}NRF_TEMP-EVENTS_DATARDY=0;temp=(nrf_temp_read()/4);temp=temp*0.6904-0.74;NRF_TEMP-TASKS_STOP=1;/**Stopthetemperaturemeasurement.page12nrf_delay_ms(500);}}}temp=temp*0.6904-0.74;这个是由于按照官方的直接得到的误差太大了,根据实际测得温度值(万用表)和temp=(nrf_temp_read()/4);直接得出的temp用excel求趋势线得出的。下面简单说下一些其他模块的细节:1.Uart:nrf51822默认配置的uart引脚是有四个,RXD;TXD;CTS;RTS.在simple_uart.c里提供调用方法。另外这些引脚都是可以自己设置的,有没有类似FPGA,是不是很方便!!2.GPIOTE:这个功能是通过IO的event来触发tasks的。Tasks有三种状态:set,clear,toggle。Event也有三种Risingedge;Fallingedge;Anychange主要寄存器有:tasks:OUT[0],OUT[1],OUT[2],OUT[3]Event:IN[0],IN[1],IN[2],IN[3]主要结合ppi功能3.定时器:page13主要寄存器通过exanple:timer_example里面需要注意的问题:频率(rtc不同)一般设置步骤:设置时钟—设置mode(timer还是counter)-然后设置分频—设置bitmode(需要注意的是总共有三个定时器,timer0是32bit,timer1,2是16bit)—清定时器。当设置的定时次数溢出了,将从溢出后重新开始计数。就比如例程中bit16位,最多定时2097,当#defineTIMER_DELAY_MS3(3000UL)/**TimerDelayinmilli-second*/时只会定时903.page142.3ble的编写蓝牙程序的编写主要是作为从机s110,和主机s120以及主从机s130。都是需要先下载。教程可参见hex下载教程。主要参考的资料:n36(里面详细阐述了第一个ble程序,入门必看的)S110以及s120的程序Nrf51sdk去官网找问题的答案:学习方法:如果以前接触过无线通信的单片机应用理解比较容易,没接触过可以先从整体把握,先不要拘泥于一些细节问题。看观察下方框图,从整体了解,慢慢接触。(F:\NordicSemiconductor是原来的未修改版备份)学习的话,可以先从ble_app_template,这个例程是一个模板。从机方框图page15从机下载前先下s110协议栈,结合程序和方框图分析:从机经过初始化后,就会进入sd_app_evt_wait();但出现event时进入event处理,在blestackevent,即on_ble_evt(ble_evt_t*p_ble_evt)里。一般肯定有处理的中断connected,disconnected,timeout。具体还包含哪些中断可以直接看ble_gap.h。当需要获取rssi时,需要现在connected里开启sd_ble_gap_rssi_start(m_conn_handle);然后新增eventBLE_GAP_EVT_RSSI_CHANGED:当rssi发送变化时即进入event处理.page16主机方框图主机下载前先下s120协议栈,结合程序和方框图分析:主机经过初始化后,就会进入sd_app_evt_wait();至少有三个event入口。一个硬件连接,一个数据连接,一个客户端连接。page17对于rssi的获取,s120目前只有在连接前扫描阶段可以获取,其他时间不行。可参见下面的描述。数据接收:client_handling_ble_evt_h
本文标题:nrf51822学习记录
链接地址:https://www.777doc.com/doc-4935147 .html