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
    +关注

    关注

    146

    文章

    17316

    浏览量

    352481
  • ARM
    ARM
    +关注

    关注

    134

    文章

    9164

    浏览量

    368991
  • 嵌入式
    +关注

    关注

    5092

    文章

    19176

    浏览量

    307424
收藏 人收藏

    评论

    相关推荐

    RA2L1入门学习】2. PWM呼吸灯

    .烧录程序: 3.实验图片: 经过这两天的使用,发现e2studio中的stacks页面还是挺好用的,可以拖拽函数,编写程序更加方便快捷。在stacks页面还能看到用到了哪些堆栈,非常的赞。 本人第一使用该开发板,作为入门学习,主要是体验一下
    发表于 01-30 21:55

    RA2L1入门学习】1. 点亮LED

    首次使用单片机,先说一下使用感受。 本次学习使用的是RA-Eco-RA2L1-48PIN-V1.0开发板+e2studio(官方的集成开发环境)+RAFP(官方的程序烧录工具)。
    发表于 01-29 22:17

    RA2L1入门学习】+ MacOS安装e2studio

    在win11下面可以有很多开发方式,但是在macOS下面选择开发方式就是安装e2studio for mac是比较好的方法。 1、下载安装包: https://www.renesas.cn/zh
    发表于 01-22 19:00

    FPB-RA6E2 评估板入门学习

    FPB-RA6E2 评估板入门学习
    的头像 发表于 12-11 09:22 301次阅读
    <b class='flag-5'>瑞</b><b class='flag-5'>萨</b> FPB-RA6<b class='flag-5'>E2</b> 评估板入门学习

    e2studio(1)----芯片之搭建FSP环境

    视频教学 样品申请 请勿添加外链 e2studio软件 e2studio的集成开发环境,FSP 提供了众多可提高效率的工具,用于开发针对
    发表于 09-30 15:28

    如何使用e2studio单片机进行GPIO输出

    本篇文章主要介绍如何使用e2studio单片机进行GPIO输出,并以LED显示。
    的头像 发表于 07-30 16:12 728次阅读
    如何使用<b class='flag-5'>e2studio</b>对<b class='flag-5'>瑞</b><b class='flag-5'>萨</b>单片机进行GPIO输出

    【GD32F303红枫派开发板使用手册】第十二讲 ADC-双轴按键摇杆通道循环采样实验

    本实验是通过ADC规则组通道循环采样方式实现双轴按键摇杆传感器x和y轴电压值的读取,
    的头像 发表于 06-11 09:40 704次阅读
    【GD32F303红枫派开发板使用手册】第十二讲   <b class='flag-5'>ADC</b>-双轴按键摇杆<b class='flag-5'>多</b><b class='flag-5'>通道</b>循环<b class='flag-5'>采样</b>实验

    【GD32H757Z海棠派开发板使用手册】第八讲 ADC-规则组通道采样实验

    通过本实验主要学习以下内容: ADC的简介 GD32FH757 ADC工作原理 DMA和DMAMUX的原理 规则组通道循环
    的头像 发表于 05-14 09:39 742次阅读
    【GD32H757Z海棠派开发板使用手册】第八讲 <b class='flag-5'>ADC</b>-规则组<b class='flag-5'>多</b><b class='flag-5'>通道</b><b class='flag-5'>采样</b>实验

    stm8的ADC工作在扫描模式下时,如果顺次扫描通道1,通道2通道3,转换完成后的数据分别存在哪个数据缓存器中呢?

    stm8的adc工作在扫描模式下时,如果顺次扫描通道1,
    发表于 05-13 06:52

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

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

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

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

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

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

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

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

    GD32 ADC规则组通道采样,数据发生错位?

    我们知道,使用ADC规则组(常规组)通道采样时,必须要配合DMA使用,但有的小伙伴遇到这种应用下数据错位的情况,比如预设的转换顺序是通道0
    的头像 发表于 03-14 09:58 2249次阅读
    GD32 <b class='flag-5'>ADC</b>规则组<b class='flag-5'>多</b><b class='flag-5'>通道</b><b class='flag-5'>采样</b>,数据发生错位?

    STM32的ADC采样通道ADC采样硬件电路图

    每一个ADC通道都对应一个GPIO引脚,看图中的ADC123_IN10,表示这个引脚(PC0)可以配置为ADC1的通道10,或者是
    发表于 03-01 12:34 8360次阅读
    STM32的<b class='flag-5'>ADC</b><b class='flag-5'>采样</b>与<b class='flag-5'>多</b><b class='flag-5'>通道</b><b class='flag-5'>ADC</b><b class='flag-5'>采样</b>硬件电路图