八、nrf52832的temp传感器和random number随机数

八、nrf52832的temp传感器和random number随机数,第1张

八、nrf52832的temp传感器和random number随机数 temp
1.temp传感器的分辨率:0.25℃
2.温度传感器初始化函数:nrf_temp_init();
3.开启温度传感器:触发start任务
    NRF_TEMP->TASKS_START = 1;
4.关闭温度传感器:触发stop任务
    NRF_TEMP->TASKS_STOP = 1;
5.读取温度值函数:
    nrf_temp_read()/4   (分辨率为0.25℃)
    需要等待NRF_TEMP->EVENTS_DATARY事件触发
temp示例程序
#include 
#include 
#include "nrf_delay.h"
#include "boards.h"

#include "nrf_log.h"
#include "nrf_log_ctrl.h"
#include "nrf_log_default_backends.h"

#include "app_uart.h"
#if defined (UART_PRESENT)
#include "nrf_uart.h"
#endif
#if defined (UARTE_PRESENT)
#include "nrf_uarte.h"
#endif

#include "nrfx_temp.h"


#define 	UART_TX_BUF_SIZE		256
#define		UART_RX_BUF_SIZE		256


static void log_init(void)
{
	ret_code_t err = NRF_LOG_INIT(NULL);		//log初始化
	APP_ERROR_CHECK(err);						//检测log配置信息
	NRF_LOG_DEFAULT_BACKENDS_INIT();			//开启log
}


void uart_event_handle(app_uart_evt_t* event)
{
	//uart通讯出错事件
	if(event->evt_type == APP_UART_COMMUNICATION_ERROR)
	{
		APP_ERROR_HANDLER(event->data.error_communication);
	}
	//fifo错误事件
	else if(event->evt_type == APP_UART_FIFO_ERROR)
	{
		APP_ERROR_HANDLER(event->data.error_code);
	}
}


void uart_config(void)
{
	uint32_t err;
	
	const app_uart_comm_params_t comm_params = {
		RX_PIN_NUMBER,									//接收引脚p0.08
		TX_PIN_NUMBER,									//发送引脚p0.06
		RTS_PIN_NUMBER,									//输出信号引脚p0.05
		CTS_PIN_NUMBER,									//输入信号引脚p0.07
		APP_UART_FLOW_CONTROL_DISABLED,					//使能软件控制流
		false,											//不校验
		NRF_UART_BAUDRATE_115200						//串口波特率115200
	};
	
	APP_UART_FIFO_INIT(&comm_params,					//串口结构体
						UART_RX_BUF_SIZE,				//串口接收缓冲区大小
						UART_TX_BUF_SIZE,				//串口发送缓冲区大小
						uart_event_handle,				//串口事件回调函数
						APP_IRQ_PRIORITY_LOWEST,		//串口中断优先级最低
						err);							//配置信息
	APP_ERROR_CHECK(err);								//检测配置是否成功
}



int main(void)
{
	uint32_t volatile temp;
	//log初始化
	log_init();
	//串口初始化
	uart_config();
	//打印串口信息
	NRF_LOG_INFO("uart example start");
	NRF_LOG_FLUSH();
	
	nrf_temp_init();									//初始化温度传感器

	while(1)
	{
		NRF_TEMP->TASKS_START = 1;						//开启温度任务
		
		while(NRF_TEMP->EVENTS_DATARDY == 0);			//等待读取数据完成事件,
		temp = (nrf_temp_read()/4);						//以0.25度为计量单位
		printf("temp = %u 度rn",temp);
		NRF_TEMP->TASKS_STOP = 1;						//关闭温度传感器
		nrf_delay_ms(500);
	}
}
random number
1.初始化随机发生器函数:
    nrf_drv_rng_init(NULL);
2.查询缓冲池中随机数的数量:
    nrf_drv_rng_bytes_avaliable(p_bytes)
3.读取随机数函数:
    nrf_drv_rng_rand(p_buf,length)
随机数示例程序
#include 
#include 
#include "nrf_delay.h"
#include "boards.h"

#include "nrf_log.h"
#include "nrf_log_ctrl.h"
#include "nrf_log_default_backends.h"

#include "app_uart.h"
#if defined (UART_PRESENT)
#include "nrf_uart.h"
#endif
#if defined (UARTE_PRESENT)
#include "nrf_uarte.h"							//带easydma的串口
#endif

#include "nrf_drv_rng.h"


#define 	RANDOM_NUMBER_SIZE		16

#define 	UART_TX_BUF_SIZE		256
#define		UART_RX_BUF_SIZE		256


static void log_init(void)
{
	ret_code_t err = NRF_LOG_INIT(NULL);		//log初始化
	APP_ERROR_CHECK(err);						//检测log配置信息
	NRF_LOG_DEFAULT_BACKENDS_INIT();			//开启log
}


void uart_event_handle(app_uart_evt_t* event)
{
	//uart通讯出错事件
	if(event->evt_type == APP_UART_COMMUNICATION_ERROR)
	{
		APP_ERROR_HANDLER(event->data.error_communication);
	}
	//fifo错误事件
	else if(event->evt_type == APP_UART_FIFO_ERROR)
	{
		APP_ERROR_HANDLER(event->data.error_code);
	}
}


void uart_config(void)
{
	uint32_t err;
	
	const app_uart_comm_params_t comm_params = {
		RX_PIN_NUMBER,									//接收引脚p0.08
		TX_PIN_NUMBER,									//发送引脚p0.06
		RTS_PIN_NUMBER,									//输出信号引脚p0.05
		CTS_PIN_NUMBER,									//输入信号引脚p0.07
		APP_UART_FLOW_CONTROL_DISABLED,					//使能软件控制流
		false,											//不校验
		NRF_UART_BAUDRATE_115200						//串口波特率115200
	};
	
	APP_UART_FIFO_INIT(&comm_params,					//串口结构体
						UART_RX_BUF_SIZE,				//串口接收缓冲区大小
						UART_TX_BUF_SIZE,				//串口发送缓冲区大小
						uart_event_handle,				//串口事件回调函数
						APP_IRQ_PRIORITY_LOWEST,		//串口中断优先级最低
						err);							//配置信息
	APP_ERROR_CHECK(err);								//检测配置是否成功
}



int main(void)
{
	uint32_t err;
	uint8_t i=0;
	uint8_t avaliable;
	uint8_t length;
	uint8_t rng_buf[RANDOM_NUMBER_SIZE];

	log_init();

	uart_config();
	err = nrf_drv_rng_init(NULL);									//初始化内部随机数发生器
	APP_ERROR_CHECK(err);

	NRF_LOG_INFO("uart example start");
	NRF_LOG_FLUSH();

	while(1)
	{
		nrf_drv_rng_bytes_available(&avaliable);					//获取缓冲池中具有的随机数数量
		printf("number of random numbers is %drn",avaliable);
		length = MIN(RANDOM_NUMBER_SIZE,avaliable);					//比较随机数的数量,最多为16
		err = nrf_drv_rng_rand(rng_buf,length);						//读取随机数的值到rng_buf缓冲区中
		APP_ERROR_CHECK(err);
		printf("random numberrn");
		for(i=0;i					
										


					

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5670417.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存