2.2一般程序的编写
可参考的例程如下:
大D出品 | 0内部Flash编程和UICR用户信息配置寄存器配置.pdf |
1CLOCK 系统时钟.pdf | |
2跑马灯.pdf | |
3Helloworld.pdf | |
4radio.pdf | |
5lowenergy.pdf | |
6MPU6050.pdf | |
7interrupt.pdf | |
8ble _1.pdf | |
8ble_2.pdf | |
9安卓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_example
ppi_example
timer_example
uart_example
twi_sw_master_example
temperature_example(以后看,关于温度传感器)
主要学习思路:
Ø 看例程
Ø 看芯片手册(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; /** Stop the temperature measurement.
nrf_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;Falling edge;Any change
主要寄存器有:tasks:OUT[0] ,OUT[1],OUT[2] ,OUT[3]
Event:IN[0],IN[1],IN[2],IN[3]
主要结合ppi功能
3.
定时器:
主要寄存器
通过exanple: timer_example
里面需要注意的问题: 频率
(rtc不同)
一般设置步骤:设置时钟—>设置mode(timer还是counter)->然后设置分频—>设置bitmode(需要注意的是总共有三个定时器,timer0是32bit,timer1,2是16bit)—>清定时器。
当设置的定时次数溢出了,将从溢出后重新开始计数。就比如例程中bit16位,最多定时2097,当
#define TIMER_DELAY_MS3 (3000UL) /**< Timer Delay in milli-second*/
时只会定时903.