瑞萨e2studio(16)----基于DTC的多通道ADC采集

63 篇文章 104 订阅

概述

本篇文章主要介绍如何使用e2studio对瑞萨进行DTC配置,并且对多通道ADC进行采集。
需要样片的可以加Q_QUN申请:6_15061293。

视频教学

听不到声音的请点击跳转进行观看。
https://www.bilibili.com/video/BV1cW4y1J783/

瑞萨e2studio(17)----基于DTC的多通道ADC采集

csdn课程

csdn课程更加详细。
https://edu.csdn.net/course/detail/36131

样品申请

https://www.wjx.top/vm/wBbmSFp.aspx#

完整代码下载

https://download.csdn.net/download/qq_24312945/87371587

硬件准备

硬件准备:这里我准备的是芯片型号R7FA4M2AD3CFP的开发板。

在这里插入图片描述

开发板

在这里插入图片描述

新建工程

在这里插入图片描述

工程模板

在这里插入图片描述

保存工程路径

在这里插入图片描述

芯片配置

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

在这里插入图片描述

工程模板选择

在这里插入图片描述

uart配置

点击Stacks->New Stack->Driver->Connectivity -> UART Driver on r_sci_uart。
在这里插入图片描述

uart属性配置

在这里插入图片描述

回调函数user_uart_callback ()

发送完毕可以用UART_EVENT_TX_COMPLETE进行判断。

volatile bool uart_send_complete_flag = false;
void user_uart_callback (uart_callback_args_t * p_args)
{
    if(p_args->event == UART_EVENT_TX_COMPLETE)
    {
        uart_send_complete_flag = true;
    }
}

在这里插入图片描述

设置e2studio堆栈

在这里插入图片描述

e2studio的重定向printf设置

在这里插入图片描述

e2studio的重定向printf设置

C++ 构建->设置->GNU ARM Cross C Linker->Miscellaneous去掉Other linker flags中的 “–specs=rdimon.specs”
在这里插入图片描述

printf输出重定向到串口

打印最常用的方法是printf,所以要解决的问题是将printf的输出重定向到串口,然后通过串口将数据发送出去。
注意一定要加上头文件#include <stdio.h>

#ifdef __GNUC__                                 //串口重定向
    #define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
    #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif

PUTCHAR_PROTOTYPE
{
        err = R_SCI_UART_Write(&g_uart9_ctrl, (uint8_t *)&ch, 1);
        if(FSP_SUCCESS != err) __BKPT();
        while(uart_send_complete_flag == false){}
        uart_send_complete_flag = false;
        return ch;
}
int _write(int fd,char *pBuffer,int size)
{
    for(int i=0;i<size;i++)
    {
        __io_putchar(*pBuffer++);
    }
    return size;
}


ADC配置

点击Stacks->New Stack->Driver->Analog -> ADC Driver on r_adc。
在这里插入图片描述

ADC属性配置

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

DTC配置

RA mcu上DTC外设的驱动程序。这个模块实现传输接口。
数据传输控制器(DTC)将数据从一个内存位置传输到另一个内存位置,而不使用CPU。
DTC使用基于RAM的向量表。向量表中的每个条目对应于ISR向量表中的一个条目。当DTC被中断触发时,它读取DTC向量表,获取传输信息,然后执行传输。传输执行后,DTC将更新的传输信息写回DTC向量表所指向的位置。

点击Stacks->Transfer->Transfer(r_dtc)。
在这里插入图片描述

DTC属性配置

在这里插入图片描述

R_DTC_Open()函数原型

在这里插入图片描述
故可以用 R_DTC_Open () 函数进行配置,开启DTC和初始化配置。

 // Source is first ADC result register
        g_transfer0_cfg.p_info->p_src = (void*)&R_ADC0->ADDR[0];
        // Destination is results buffer
        g_transfer0_cfg.p_info->p_dest = &adc_result_buffer[0];
        /* Open the transfer instance with initial configuration. */
        err = R_DTC_Open(&g_transfer0_ctrl, &g_transfer0_cfg);
        /* Handle any errors. This function should be defined by the user. */
        assert(FSP_SUCCESS == err);

R_DTC_Enable()函数原型

在这里插入图片描述
在这个激活源上启用DTC传输。

 /* Enable the DTC to handle incoming transfer requests. */
        err = R_DTC_Enable(&g_transfer0_ctrl);
        assert(FSP_SUCCESS == err);

R_DTC_Reset()函数原型

在这里插入图片描述
重置传输源、目的地和传输数。

/* Callback function */
void adc_callback(adc_callback_args_t *p_args)
{
    /* TODO: add your own code here */
    if( p_args->event == ADC_EVENT_SCAN_COMPLETE )
    {
        err = R_DTC_Reset( &g_transfer0_ctrl,
                           (void*)&R_ADC0->ADDR[0],     // reset source address
                           &adc_result_buffer[0],       // reset destination address
                           1 );                         // reset block size
        if( FSP_SUCCESS != err )
        {
            __BKPT(1);
        }
    }
}


打印数据

 while(1)
       {
           /* In software trigger mode, start a scan by calling R_ADC_ScanStart(). In other modes, enable external
            * triggers by calling R_ADC_ScanStart(). */
           err = R_ADC_ScanStart(&g_adc0_ctrl);
           assert(FSP_SUCCESS == err);
           printf("adc[0]_v=%f\n",(float)adc_result_buffer[0]/4095*3.3);
           printf("adc[1]_v=%f\n",(float)adc_result_buffer[1]/4095*3.3);
           printf("adc[2]_v=%f\n",(float)adc_result_buffer[3]/4095*3.3);
           R_BSP_SoftwareDelay(1000, BSP_DELAY_UNITS_MILLISECONDS); // NOLINT100->160
       }

最后

以上的代码会在Q_QUN里分享。Q_QUN:615061293。
或者关注『记帖』,持续更新文章和学习资料!
在这里插入图片描述

多通道ADC采集通过DTC传输例程

现在设置3个ADC通道的输入电压如下所示。

ADC通道管脚输入电压
AN0P000GND(0V)
AN1P001VCC(3.3V)
AN3P0031.5V

结果演示

通过串口打印出的数据如下所示。
在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

记帖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值