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

描述

mcu

 

 

 

    1.概述      

 

 

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

 

 

  2.硬件准备   

 

 

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

 

 

  3.新建工程   

 

 

mcu

 

 

 

  4.工程模板   

 

 

mcu

 

 

  5.保存工程路径  

 

 

mcu

 

 

   6.芯片配置    

 

 

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

mcu

 

7

   7.工程模板选择    

 

 

mcu

 

 

   8.ADC配置    

 

 

    

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

mcu

 

 

   9.ADC属性配置    

    

   

mcu

 

mcu

 

 

   10.R_ADC_Open()函数原型    

 

 

mcu

 

    故可以用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()函数原型    

 

    

mcu

 

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

 


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

 

 

   12.R_ADC_ScanStart()函数原型    

 

 

mcu

 

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

 

		/* 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()函数原型    

 

 

mcu

 

    读取单个通道的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)为例子,通道配置如下。

 

mcu

 

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

 

mcu

 

 

 

   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站视频更新~

 

 

mcu

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

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

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

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分