nrf52832 saadc使用

前言

大概记录自己使用nrf52832做adc采集。

nRF52832的ADC采集

此ADC采集是使用的10位,共有8个adc引脚分别是
AINX PIN
AIN0 P0.02
AIN1 P0.03
AIN2 P0.04
AIN3 P0.05
AIN4 P0.28
AIN5 P0.29
AIN6 P0.30
AIN7 P0.31
我是使用的是P0.30 ,其初始化代码如下:

void saadc_init(void)
{
	ret_code_t err_code;
	//定义SAADC初始化结构体
	//使用默认的宏初始化时需要指定该通道的模拟输入引脚
	//具体的引脚分布参考数据手册
	nrf_saadc_channel_config_t mmysaadc =  NRF_DRV_SAADC_DEFAULT_CHANNEL_CONFIG_SE(NRF_SAADC_INPUT_AIN6);//配置
	//初始化SAADC,注册事件回调函数,
    //注意,本例使用的是非阻塞模式,非阻塞模式下,采样完成后以事件
	//的方式通知应用程序,应用程序在事件回调函数中读取采样数据
	err_code = nrf_drv_saadc_init(NULL,saadc_callback);
	APP_ERROR_CHECK(err_code);
	//初始化SAADC通道
	err_code = nrf_drv_saadc_channel_init(NULL, &mmysaadc);
    APP_ERROR_CHECK(err_code);
	
	//设置好缓存,等待应用程序启动采样
    err_code = nrf_drv_saadc_buffer_convert(m_buffer_pool[0], SAMPLES_IN_BUFFER);
    APP_ERROR_CHECK(err_code);
	//设置好缓存,等待应用程序启动采样
    err_code = nrf_drv_saadc_buffer_convert(m_buffer_pool[1], SAMPLES_IN_BUFFER);
    APP_ERROR_CHECK(err_code);
}

nrf_drv_saadc_init(NULL,saadc_callback);中的saadc_callback是自己实现的回调函数。主要是处理数据,其代码如下:

void saadc_callback(nrf_drv_saadc_evt_t const *p_event)
{
	double number = 0;
	double val;  //保存SAADC采样数据计算的实际电压值
	
	if(p_event->type == NRF_DRV_SAADC_EVT_DONE)  //Event generated when the buffer is filled with samples
	{
		ret_code_t err_code;
		//设置好缓存,为下一次采样准备
		err_code = nrf_drv_saadc_buffer_convert(p_event->data.done.p_buffer,SAMPLES_IN_BUFFER);	  
		APP_ERROR_CHECK(err_code);
		//均值滤波
		for(int i=0; i < SAMPLES_IN_BUFFER; i++)
		{
			number += p_event->data.done.p_buffer[i];		
		}
		number = number / 10.0f;
		//电压数据
		val = ((float)number)*3.3f/1024.0f;	
	}
}

事件处理完成后需要调用另一函数,不然adc采集会出错,函数如下:

void saadc_sampling_trigger(void)
{
    ret_code_t err_code;
    //Event handler is called immediately after conversion is finished.
    err_code = nrf_drv_saadc_sample(); // Check error
    APP_ERROR_CHECK(err_code);
}

总结

其sdk包里有很多例程都很好修改的,用是没什么大问题的,本来还有串口透传部分的使用。。。。。。下次再来,勉励自己

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值