119
个编辑
更改
→温度传感器实验
=== 温度传感器实验 ===
NRF52832芯片内部,自带一个温度传感器,并有线性补尝。它最大的分辨率为0.25度。本实验利用温度传感测量芯片周围环境的温度。它工作不需要外围电路。
温度测量通过触发TASK_START,当完成测量时DATARDY事件将会产生。通过读取TEMP寄存器,读取当前温度。
==== 代码分析 ====
开发者打开谷雨物联提供的peripheral_ghostyu文件夹中10_temp_example工程(IAR工程)。
在IAR的Workspace中点开Application,双击main.c文件,打开main.c。<syntaxhighlight lang="c" line="1">
int main(void)
{
int32_t volatile temp = INT32_MAX;
LED_Init(); //LED 初始化
bsp_board_lcd_init(); //LCD 实始化
GUI_Init();
UpdateLCD(temp);
for(;;)
{
NRF_TEMP->TASKS_START = 1; //启动温度测量任务
while (NRF_TEMP->EVENTS_DATARDY == 0)
{
// Do nothing.
}
NRF_TEMP->EVENTS_DATARDY = 0;
//读取温度值
temp = (nrf_temp_read() / 4);
NRF_TEMP->TASKS_STOP = 1; //停止测量任务
UpdateLCD(temp);
LED_Toggle(0); //翻转LED0
nrf_delay_ms(500);
}
}
</syntaxhighlight>在main函数前部,对用到的外设进行初始化,包括LED,LCD。在for循环中,启动,停止温度测量。RNF_TEMP->TASKS_START置1,将启动温度测量,NRF_TEMP->EVENTS_DATARDY是测量完成事件,如果DATARDY事件置1,表明温度测量已经完成。nrf_temp_read函数将读取TEMP寄存器返回当前温度值。其值除以4,即丢弃小数部分。
UpdateLCD函数,用于改变屏幕的内部。其输入参数为当前的温度值。在其内部对温度区间进行划分,小于20度属于NORMAL,显示屏会显示绿色背景;在20到27度之间,属于WARN,显示屏会显示黄色;大于27度,属于EMERGENT,显示屏会显示红色。同时也会显示当前温度值。<syntaxhighlight lang="c" line="1">
void UpdateLCD(int32_t temp)
{
static TEMP_RANGE LEVEL = TEMP_DEFAULT;
bool isChange = false;
if(temp == INT32_MAX)
{
LEVEL = TEMP_DEFAULT;
isChange = true ;
}
else
{
if(temp < 20)
{
if(LEVEL != TEMP_NORMAL)
{
LEVEL = TEMP_NORMAL;
isChange = true;
}
}
else if(temp < 27)
{
if(LEVEL != TEMP_WARN)
{
LEVEL = TEMP_WARN;
isChange = true;
}
}
else
{
if(LEVEL != TEMP_EMERGENT)
{
LEVEL = TEMP_EMERGENT;
isChange = true;
}
}
}
if(isChange)
{
switch(LEVEL)
{
case TEMP_DEFAULT:
GUI_SetBkColor(GUI_WHITE);//设置蓝色背景色
break;
case TEMP_NORMAL:
GUI_SetBkColor(GUI_GREEN);//设置蓝色背景色
break;
case TEMP_WARN:
GUI_SetBkColor(GUI_YELLOW);//设置绿色背景色
break;
default:
GUI_SetBkColor(GUI_RED);//设置红色背景色
break;
}
GUI_Clear();
GUI_DispString("Temperture\r\nExample");
isChange = false;
}
if(LEVEL)
{
GUI_DisprintfAt(0,32,"Temp:%dC",temp);
}
}
</syntaxhighlight>
==== 实验现象 ====
硬件准备:
# Jlink-Lite仿真器或J-Link仿真器
# NRF52832DK评估板
# TFT-LCD-144或TFT-LCD-130显示屏
编译工程,点击IAR IDE工具栏中绿色三角仿真按钮,IAR便会将程序下载到nRF52832中,点击全速运行即可。此时NRF52832DK上的LCD显示屏会显示当前的温度值。并根据温度值,显示屏的背景色也会改变。