0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

瑞萨e2studio----ADC通过单次扫描多通道方式采样

RA生态工作室 2021-11-02 16:30 次阅读
pYYBAGGA3i6Af0z4AABdWrtWoBM374.png

1.概述

本篇文章主要介绍如何使用e2studio对瑞萨单片机进行Adc通过单次扫描多通道方式采样。

2.硬件准备

首先需要准备一个开发板,这里我准备的是芯片型号 R7FA2L1AB2DFL 的开发板。

3.新建工程

16000776-2dec-11ec-aa30-dac502259ad0.png

4.工程模板

16754e82-2dec-11ec-aa30-dac502259ad0.png

5.保存工程路径

16e5803a-2dec-11ec-aa30-dac502259ad0.png

6.芯片配置

本文中使用R7FA2L1AB2DFL来进行演示。

1727724c-2dec-11ec-aa30-dac502259ad0.png

7

7.工程模板选择

17698984-2dec-11ec-aa30-dac502259ad0.png

8.ADC配置

点击Stacks->New Stack->Driver->Analog -> ADC Driver on r_adc。

179ca7e2-2dec-11ec-aa30-dac502259ad0.png

9.ADC属性配置

17d0650a-2dec-11ec-aa30-dac502259ad0.png

180922dc-2dec-11ec-aa30-dac502259ad0.png

10.R_ADC_Open()函数原型

18466f48-2dec-11ec-aa30-dac502259ad0.png

故可以用R_ADC_Open() 函数进行配置,开启和初始化ADC模式。

	/* 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);

11.R_ADC_ScanCfg()函数原型

18840c0e-2dec-11ec-aa30-dac502259ad0.png

配置ADC扫描参数,赋能ADC通道。在此函数中设置通道特定设置。


	 /* Enable channels. */
    err = R_ADC_ScanCfg(&g_adc0_ctrl, &g_adc0_channel_cfg);
    assert(FSP_SUCCESS == err);

12.R_ADC_ScanStart()函数原型

18bef292-2dec-11ec-aa30-dac502259ad0.png

启动扫描,若设置为单次扫描,没扫描完一次都需要重新开启。

		/* Enable scan triggering from ELC events. */
        (void) R_ADC_ScanStart(&g_adc0_ctrl);

故可以用R_IOPORT_PinRead()函数进行读取IO口电平状态,该函数只能读取一个端口的电平。

bsp_io_level_t p_port_value_port_151;
R_IOPORT_PinRead(&g_ioport_ctrl, BSP_IO_PORT_00_PIN_15, &p_port_value_port_151);

13. 回调函数adc_callback ()

每次扫描完之后都会进入回调函数中。

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. */
        }

14.R_ADC_Read()函数原型

18ed9a02-2dec-11ec-aa30-dac502259ad0.png

读取单个通道的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;

15.多通道设置

以读取通道0(P000)和通道1 (P010)为例子,通道配置如下。

191798ca-2dec-11ec-aa30-dac502259ad0.png

通道配置要注意通道数,配置错误可能会读取错误。

195862c4-2dec-11ec-aa30-dac502259ad0.png

16.代码

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);

    double a0,a5;
    uint16_t adc_data1=0;
    uint16_t adc_data2=0;
    while(1)
    {

    /* Enable scan triggering from ELC events. */
           (void) 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;

           err =R_ADC_Read(&g_adc0_ctrl, ADC_CHANNEL_5, &adc_data1);
           assert(FSP_SUCCESS == err);
           a5=(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
}

17.视频教学

视频教学稍后会在B站官方账号更新,请留意B站视频更新~

198d40e8-2dec-11ec-aa30-dac502259ad0.jpg

原文标题:瑞萨e2studio----ADC通过单次扫描多通道方式采样

文章出处:【微信公众号:RA生态工作室】欢迎添加关注!文章转载请注明出处。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • mcu
    mcu
    +关注

    关注

    145

    文章

    15986

    浏览量

    343320
  • ARM
    ARM
    +关注

    关注

    134

    文章

    8639

    浏览量

    361633
  • 嵌入式
    +关注

    关注

    4976

    文章

    18237

    浏览量

    287872
收藏 人收藏

    评论

    相关推荐

    STM32F0 ADC通道转换,最后一个通道的EOC不置位是为什么?

    STM32F030 ADC采样序列中包括IN0,IN1,IN2三个通道,采用转换模式,软件触
    发表于 04-16 06:34

    STM32F030K6T6 ADC连续采样通道切换是否会有延时?

    STM32F030K6T6这款芯片只有一个独立的ADC。在我的设计中,ADC时钟设置为12MHz,双通道采样,来回切换(设想中是每个通道
    发表于 04-01 07:53

    电子推出采用自研RISC-V CPU内核的通用32位MCU

    5.5V 封装:16 WLCSP、24/32/48 QFN封装(QFP可选) R9A02G021 RISC-V MCU得到e² studio集成开发环境(IDE)的全方位支持,客户
    发表于 03-30 22:08

    STM32F205利用DMA实现通道ADC采样,但是每启动一转换才能更新一结果是为什么?

    1、ADC配置采样12个规则通道,采用扫描模式,允许DMA,配置每次转换结束都有DMA r
    发表于 03-27 06:37

    关于STM32U575 ADC通道采样配置问题求解

    倍; 2.通道采样是否可以如上面代码所示,在ADC
    发表于 03-26 06:25

    关于STM32G474 ADC通道数据采集遇到的问题求解

    STM32G474 ADC时钟:168MHz/4=42MHz 分辨率 12bit 端输入 ADC1 采集6通道数据 采样时间6.5cyc
    发表于 03-14 08:11

    44个ADC通道配置为队列扫描,为什么无法更快的采样

    我有 44 个 ADC 通道配置为队列扫描。 我使用给定的函数初始化它们,但是尽管我选择了采样时间为 1e-7,但我无法让它们更快地
    发表于 01-19 07:18

    AD7175-2采样模式建立时间为何多出20us?

    使用场景: 使用AD7175-2时,使能了4个通道,并将滤波器输出数据速率设置为17,857SPS。 在中断到来时使用采样模式,AD
    发表于 12-13 09:00

    N76E003 ADC连续采样不准问题怎么解决?

    测试条件: 1,线性电源12.6V,分压电阻20K:2K 2,AMS1117降压到5V供电 N76E003 ; 3,ADC_BandGap读出来是比较稳定的。 4,
    发表于 06-25 13:23

    【CW32饭盒派开发板试用体验】+ ADC通道采样测试

    模式: 本次使用的是通道序列扫描转换模式。每启动一,4个通道依次转换一。 下面是中断读取
    发表于 06-12 23:15

    FPB-RA6E1快速原型板】环境搭建+e2studio项目搭建+编译 DBUG

    下载下来,我就要超时间了。 1.资料准备工具 - RA MCU 生态社区 软件我是下载最新的。 这个文档是不错的,拿出来就能看明白,就是有些地方字写的少了点。 贴上来:*附件:e2+fsp+qe安装
    发表于 06-11 20:51

    FPB-RA6E1快速原型板】开箱+环境搭建+e2studio项目搭建

    比较舒服。 e2studio的下载,建议在RA生态社区的资料下载--工具--E2开发环境的链接:https://www.ramcu.cn/lists/21.html直接下载,在官网
    发表于 05-25 01:17

    RA MCU创意氛围赛】以RA2E的车载VFD屏幕时钟

    引言 很高兴能有机会参加【RA MCU创意氛围赛】,在以前学习stm32的时候,就是野火的开发板、文档以及视频带我入门的。现在有空体验一下野火的产品——系统的 启明4M
    发表于 05-21 17:02

    CH32V103基础教程30-ADC通道DMA读取方式

    本章主要在上一章第二十九章ADC通道DMA读取方式的基础上进行ADC通道DMA读取
    发表于 04-20 16:50

    CH32V103基础教程29-ADC(单通道DMA读取方式

    关于ADC,前面第十章已经对其基础配置和应用进行过讲解。但ADC功能繁多,它有多达18个通道,可测量16个外部和2个内部信号源,且各通道的A
    发表于 04-20 16:39