nrf52832sdk15的SAADC

由于有使用52832的需求,所以19年8月下载了一份最新的SDK,版本为SDK15.3.0,得创建一个新的工程然后移植原来的应用代码到这个新的SDK下,IO什么的跟原来SDK12没啥区别,但是我在demo里没找到ADC的demo,反倒是找到一个叫SAADC的(手册里SA是Successive approximation),由于时间关系先看了一下demo然后网上在搜索看了别人写的,跑了一下这个demo然后开始着手移植.初始化函数大概长这样:

void saadc_init(void)
{	
	ret_code_t err_code;
	m_channel_used = 0;
	
    nrf_saadc_channel_config_t channel_config[ADC_CHANNEL_USED];
    	
	nrf_saadc_channel_config_t channel_default_config =
		NRF_DRV_SAADC_DEFAULT_CHANNEL_CONFIG_SE(NRF_SAADC_INPUT_AIN0);	
	//这里整一个默认配置的adc配置 设置的输入是0 对于p02 具体哪些io对应哪些adc通道可以看手册
    
    for(i = 0 ;i < ADC_CHANNEL_USED; i++)
    {
            /*do something*/
			channel_config[i] 			 = channel_default_config;
			channel_config[i].pin_p      = (nrf_saadc_input_t)adc_ain;
            // 设置对应的第几个输入
			channel_config[i].gain		 = NRF_SAADC_GAIN1_6;
            //增益1*6 默认设置参考电压为内部0.6v 所以这里ADC的采集范围最大为3.6V
			err_code = nrf_drv_saadc_channel_init(adc_channel, &channel_config[i]);
            //第几个输入对应的第几个adc通道
    }
    
    

    err_code = nrf_drv_saadc_init(NULL, saadc_callback);//set adc 10 bit
    APP_ERROR_CHECK(err_code);
   //必须要有一个回调函数,在这个函数nrf_drv_saadc_init里看到默认把adc设置为10位的adc

	err_code = nrf_drv_saadc_buffer_convert(m_buffer_pool, m_channel_used);
    //m_buffer_pool是一个一维数组;m_channel_used是我使用的ADC路数
    //注意:这个adc采集按照adc通道顺序得到值 例如使用了adc通道 0 3 1 
    //那到时候回调函数里buff采集回来的值从下标0~2对于的为通道 0 1 3 的值
	APP_ERROR_CHECK(err_code);							

}

在我的代码里没有滤波啥的,只是一个全局数组,里面保存的值对应相对的adc通道值。我在一个task里设置了10ms调用一次下面代码

void hw_adc_val_get(void){
	APP_ERROR_CHECK(nrf_drv_saadc_sample());//采样
}

然后采集到了就会触发刚刚设置的那个回调函数,回调函数大概长这样:

void saadc_callback(nrf_drv_saadc_evt_t const * p_event)
{
	uint8_t i;
    if (p_event->type == NRF_DRV_SAADC_EVT_DONE)
    {
        ret_code_t err_code;

        err_code = nrf_drv_saadc_buffer_convert(p_event->data.done.p_buffer, m_channel_used);
        APP_ERROR_CHECK(err_code);

        /*
            在这里可以做一些判断或者处理,因为采样回来的值有可能是负数
        */

		for(i = 0;i<SAMPLES_IN_BUFFER;i++)
		{
            /*do something*/
			((uint16_t*)&m_adc_data)[i] = p_event->data.done.p_buffer[i];
            //这是个全局结构体用来存放adc采用值 
		}

		//一次adc采集完成
    }
	else{
		//未完成
	}
}

注意:采样回来的adc值在上面p_event->data.done.p_buffer里的值是按照adc通道顺序排序过的

上面代码都是我删减过的,为了适应各种的代码框架需要做相应的处理例如我的就无奈做了排序>_<

nrf的saadc就大概了解那么多,还有一些其他模式关于saadc的在CSDN都能查到,由于我是给摇杆、电池这些用的,这个代码已经足够使用。

最后一点,休眠的时候记得把ADC外设关掉,具体在nrfx_saadc.h里,nrf的所有头文件都有函数接口说明

### 回答1: 要下载青风nRF52832 SDK,首先需要访问青风官方网站。在该网站上,您可以找到一个专门的SDK下载页面。在该页面上,您会看到一些相关的信息,例如nRF52832芯片的版本号,SDK的最新版本号以及其他支持的硬件和软件要求。 在页面上,您可以找到一个下载按钮,点击该按钮将开始SDK的下载过程。下载过程可能需要一些时间,具体取决于您的网络连接速度。 下载完成后,您将获得一个压缩文件,其中包含青风nRF52832 SDK的所有文件和文件夹。您可以将该文件解压缩到您选择的目标文件夹中。 解压缩后,您将可以看到一些重要的文件和文件夹,如示例代码、文档、库文件和支持工具等。在这些文件和文件夹中,您可以找到有关SDK的详细信息和使用指南。 如果您打算在开发项目中使用这个SDK,您可以根据需要选择和使用适当的示例代码和库文件。此外,您还可以参考SDK的文档和指南,以获得更多有关SDK的信息和帮助。 总之,要下载青风nRF52832 SDK,您需要访问青风官网的SDK下载页面,并按照提示完成下载和解压缩过程。下载后,您可以开始使用SDK的示例代码和其他支持工具来进行开发。 ### 回答2: 青风nrf52832是一款基于Nordic Semiconductor的nRF52832芯片的开发板,可以进行蓝牙低功耗设备的开发和应用。nRF52832 SDK是青风nrf52832开发板所需要的软件开发工具包。以下是青风nrf52832 SDK下载的步骤: 1. 首先,打开浏览器,进入青风官方网站的下载页面。 2. 在下载页面中找到nRF52832 SDK软件包,它通常以压缩文件的形式提供。 3. 点击下载链接,开始下载nRF52832 SDK软件包。下载过程可能需要一些时间,取决于您的网络连接速度。 4. 下载完成后,使用解压软件将软件包解压到您希望保存的位置。解压后,您将得到一个包含SDK的文件夹。 5. 进入解压后的文件夹,可以看到SDK的各种软件工具和示例代码。 6. 根据自己的需求,可以使用SDK提供的示例代码进行开发,或者查看SDK文档进行更详细的学习和使用。 请注意,下载过程中需要确保网络连接正常,同时确保您的设备符合软件包的系统要求,以确保成功下载和使用青风nrf52832 SDK
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值