瑞萨RA4M2集成了● 12-bit A/D Converter (ADC12)● 12-bit 及温度传感器(TSN)。可以8位、10位、12位来采集数据,转换速率1M
【学习资料】
①B站的视频教程:https://www.bilibili.com/video/BV1E3411Y7Gi/?spm_id_from=333.880.my_history.page.click
②CSDN博客:https://blog.csdn.net/qq_24312945/article/details/120791923
③官方提供的例程:r20an0608eu0121-ek-ra4m2-exampleprojects\ek_ra4m2\adc
【开发步骤】
在上面printf的工程上添加adc功能:
1、打开配置工具:
2、选择P002这个脚来进行ADC检测:
3、选择12位转换、右对齐,单次转换、Channel2
4、定义回调函数为adc0_callback、中断级别2:
5、同步工程,回到keil.
6、添加bsp_adc.c、bsp_adc.h,并把这两个文件添加到工程:
7、编写bsp_adc.c内容如下:
#include "bsp_adc.h"
#include "bsp_debug_uart.h"
void bsp_adc_init(void)
{
fsp_err_t err = FSP_SUCCESS;
err = R_ADC_Open(&g_adc0_ctrl, &g_adc0_cfg);
if(FSP_SUCCESS != err)
{
printf("ADC0 Open API failed\r\n");
}
err = R_ADC_ScanCfg(&g_adc0_ctrl, &g_adc0_channel_cfg);
assert(FSP_SUCCESS == err);
}
volatile bool scan_complete_flag = false;
void adc0_callback(adc_callback_args_t * p_args)
{
FSP_PARAMETER_NOT_USED(p_args);
scan_complete_flag = true;
}
void read_adc(void)
{
fsp_err_t err = FSP_SUCCESS;
double a0;
uint16_t adc_data0=0;
(void) R_ADC_ScanStart(&g_adc0_ctrl);
scan_complete_flag = false;
while (!scan_complete_flag)
{
}
err = R_ADC_Read(&g_adc0_ctrl, ADC_CHANNEL_2, &adc_data0);
assert(FSP_SUCCESS == err);
a0=(double)(adc_data0/4095.0)*3.3;
printf("v: %.02f \r\n",a0);
}
bsp_adc.h:
#ifndef __BSP_ADC_H__
#define __BSP_ADC_H__
#include "hal_data.h"
#include <stdio.h>
void bsp_adc_init(void);
void read_adc(void);
#endif
8、在hal_entry.c中增加如下内容:
void hal_entry(void)
{
bsp_uart_init();
bsp_can0_init();
bsp_adc_init();
while(1)
{
can_send();
read_adc();
R_BSP_SoftwareDelay(1000, BSP_DELAY_UNITS_MILLISECONDS);
}
#if BSP_TZ_SECURE_BUILD
R_BSP_NonSecureEnter();
#endif
}
下载到开发板,把P002接到3.3v上,可以看到测得的电压为3.30V:
把p002接到数据电源上,测试动态数据,非常准确:
附上动态检测的视频。
ADC录制
|