【 RA4M2 设计挑战赛 】RA4M2 ADC采样
R7FA4M2AD3CFP芯片提供了16路A/D转换,转换精度为16/24bit可选,可采用轮训的方式同时进行多通道转换。本文主要介绍在RTthread开发环境下,如何进行AD转换。基于FSP库函数可参考:
瑞萨e2studio(7)----ADC通过单次扫描多通道方式采样-电子发烧友网 (elecfans.com)
一、
环境设置
基于RTthread开发环境进行AD转换,需要下载最新版RTthread开发环境,RA4M2_ECO,下载地址:rt-thread (gitee.com),同时需要安装RTthread ENV。
选择BSP目录下的..\bsp\renesas\ra4m2-eco。
1、Rtthread环境配置
第一步:打开board目录下的kconfig文件,将下列代码加入,如图:
menuconfig BSP_USING_I2C
bool "Enable I2C BUS"
default n
select RT_USING_I2C
select RT_USING_I2C_BITOPS
select RT_USING_PIN
if BSP_USING_I2C
config BSP_USING_HW_I2C
bool "Enable Hardware I2C BUS"
default n
if BSP_USING_HW_I2C
config BSP_USING_HW_I2C1
bool "Enable Hardware I2C1 BUS"
default n
endif
if !BSP_USING_HW_I2C
menuconfig BSP_USING_I2C1
bool "Enable I2C1 BUS (software simulation)"
default y
if BSP_USING_I2C1
config BSP_I2C1_SCL_PIN
hex "i2c1 scl pin number"
range 0x0000 0x0B0F
default 0x050C
config BSP_I2C1_SDA_PIN
hex "I2C1 sda pin number"
range 0x0000 0x0B0F
default 0x050B
endif
endif
endif
2、在ENV环境下配置ADC
按下图顺序配置:
保存。返回ENV环境,输入scons –target=mdk5生成keil工程文件。
3、FSP配置
打开新建的keil工程文件,打开环境设置对话框,按下图操作进入FSP。
注意:如果无法打开FSP,需要打开keil工程所在的目录下rasc_version.txt文件,将rasc.exe的目录修改为rasc.exe的安装目录。
按照图示1->2->3,生成4。双击4,按下图设置:
点击保存,点击生成按钮
生成keil代码。
4、在hal_entry.cpp增加如下代码
#include "adc.h"
//ADC通道参数初始化
#define ADC_DEV_NAME
"adc0" // 定义ADC设备名
#define ADC_DEV_CHANNEL
BSP_IO_PORT_00_PIN_00 // 定义ADC转换引脚输入端为PA1
#define REFER_VOLTAGE
3.3 //定义ADC电压转换标准值
#define CONVERT_BITS (1
<< 12) //定义ADC转换位数为12位
rt_uint32_t value,vol;
void ADC_caiji(){
rt_adc_device_t adc_dev;
rt_err_t ret = RT_EOK;
adc_dev =(rt_adc_device_t)rt_device_find(ADC_DEV_NAME);
if (adc_dev == RT_NULL)
{
rt_kprintf("adc sample run failed! can't find %s device!\n", ADC_DEV_NAME);
}
//*
ret = rt_adc_enable(adc_dev,ADC_DEV_CHANNEL);
if(ret == RT_EOK)
{
rt_kprintf("adc sample run success! find %s
device!\n", ADC_DEV_NAME);
}
value =rt_adc_read(adc_dev, ADC_DEV_CHANNEL);
vol = (value *REFER_VOLTAGE)/CONVERT_BITS;
printf(".%d\r\n",value);
printf("ADC: .%d\r\n",vol);
}
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)函数中加入调用ADC_caiji()即可。
二、
运行结果
三、小结
在配置ADC时需要仔细阅读手册和原理图,注意参考电压的设置,可参见手册ADC部分的37.6.10和37.6.11内容。