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