RA生态之ADC 采样
Posted 衾许°
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了RA生态之ADC 采样相关的知识,希望对你有一定的参考价值。
ADC 配置点击 Stacks->New Stack-> Analog -> ADC r_adc
先是单通道ADC
默认12位ADC精度,对齐方式扫描(也最常见的方式)
下图是设置回调函数adc_callback,和回调中断优先级为2
在PIN那里选择通道
R_ADC_Open()函数:开启和初始化 ADC 模式(在这里是开启adc0)
/* Initializes the module. */ err = R_ADC_Open(&g_adc0_ctrl, &g_adc0_cfg); /* Handle any errors. This function should be defined by the user. */ assert (FSP_SUCCESS == err);
R_ADC_ScanCfg()函数: 配置 ADC 扫描参数,赋能 ADC 通道(在这里是赋能adc的通道0)
/* Enable channels. */ err = R_ADC_ScanCfg(&g_adc0_ctrl, &g_adc0_channel_cfg); assert (FSP_SUCCESS == err);
R_ADC_ScanStart()函数:启动扫描,若设置为单次扫描,没扫描完一次都需要重新开启
/* Enable scan triggering from ELC events. */ 、 ( void ) R_ADC_ScanStart(&g_adc0_ctrl);
回调函数 adc_callback ()(名字是自己定义的):学过51都知道中断吧,差不多的意思
volatile bool scan_complete_flag = false ; void adc_callback ( adc_callback_args_t * p_args) FSP_PARAMETER_NOT_USED(p_args); scan_complete_flag = true ;
故需要在扫描时候在主程序中等待其扫描完毕
scan_complete_flag = false ; while (!scan_complete_flag) /* Wait for callback to set flag. */
R_ADC_Read()函数:读取单个通道的 ADC 值
err =R_ADC_Read(&g_adc0_ctrl, ADC_CHANNEL_0, &adc_data1); assert (FSP_SUCCESS == err); a1=( double )(adc_data1/ 4095.0 )* 3.3 ;
示例代码:
double a0; uint16_t adc_data1=0; volatile bool scan_complete_flag = false; void adc_callback (adc_callback_args_t * p_args) FSP_PARAMETER_NOT_USED(p_args); scan_complete_flag = true; void hal_entry ( void ) /* TODO : add your own code here */ fsp_err_t err = FSP_SUCCESS ; /* Initializes the module. */ err = R_ADC_Open(&g_adc0_ctrl, &g_adc0_cfg); /* Handle any errors. This function should be defined by the user. */ assert( FSP_SUCCESS == err); /* Enable channels. */ err = R_ADC_ScanCfg(&g_adc0_ctrl, &g_adc0_channel_cfg); assert( FSP_SUCCESS == err); while (1) /* Enable scan triggering from ELC events. */ R_ADC_ScanStart(&g_adc0_ctrl); scan_complete_flag = false; while (!scan_complete_flag) /* Wait for callback to set flag. */ err =R_ADC_Read(&g_adc0_ctrl, ADC_CHANNEL_0, &adc_data1); assert( FSP_SUCCESS == err); a0=(adc_data1/4095.0)*3.3; R_BSP_SoftwareDelay (20, BSP_DELAY_UNITS_MILLISECONDS ); #if BSP_TZ_SECURE_BUILD /* Enter non-secure code */ R_BSP_NonSecureEnter(); #endif现象:可读取通道 0( P000)电压值a0
以上是关于RA生态之ADC 采样的主要内容,如果未能解决你的问题,请参考以下文章