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

  • 概述
  • 视频教学
  • csdn课程
  • 样品申请
  • 硬件准备
  • 开发板
  • 新建工程
  • 工程模板
  • 保存工程路径
  • 芯片配置
  • 工程模板选择
  • 时钟设置
  • UART配置
  • UART属性配置
  • 回调函数user_uart_callback ()
  • 设置e2studio堆栈
  • e2studio的重定向printf设置
  • printf输出重定向到串口
  • ADC配置
  • ADC属性配置
  • R_ADC_Open()函数原型
  • R_ADC_ScanCfg()函数原型
  • R_ADC_ScanStart()函数原型
  • 回调函数adc_callback ()
  • R_ADC_Read()函数原型
  • 多通道设置
  • 多通道代码
  • 最后

概述

本篇文章主要介绍如何使用e2studio对瑞萨单片机进行ADC通过单次扫描多通道方式采样。
需要样片的可以加qun申请:6_15061293 。

视频教学

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

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

csdn课程

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

样品申请

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

硬件准备

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

开发板

新建工程

工程模板

保存工程路径

芯片配置

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

工程模板选择

时钟设置

开发板上的外部高速晶振为12M,需要修改XTAL为12M.

UART配置

点击Stacks->New Stack->Driver->Connectivity -> UART Driver on r_sci_uart。

UART属性配置

由于开发板的typc-c接口所接的是串口9,故配置为通道9。

回调函数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设置


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)
#endifPUTCHAR_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属性配置


R_ADC_Open()函数原型


故可以用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);

R_ADC_ScanCfg()函数原型


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

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

R_ADC_ScanStart()函数原型


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

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

回调函数adc_callback ()

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

volatile bool scan_complete_flag = false;
void adc_callback (adc_callback_args_t * p_args)
{//宏将告知编译器回调函数不使用参数 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. */}

R_ADC_Read()函数原型


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

多通道设置

开发板有Arduino接口,接入多个AD进行采样。

以读取通道0(P000)、通道1 (P001)、通道3 (P003)为例子,通道配置如下。

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

多通道代码

#include "hal_data.h"
#include <stdio.h>
FSP_CPP_HEADER
void R_BSP_WarmStart(bsp_warm_start_event_t event);
FSP_CPP_FOOTERfsp_err_t err = FSP_SUCCESS;
unsigned char send_buff[100];
volatile bool uart_send_complete_flag = false;
/* Callback function */
void user_uart_callback(uart_callback_args_t *p_args)
{/* TODO: add your own code here */if(p_args->event == UART_EVENT_TX_COMPLETE){uart_send_complete_flag = true;}}#ifdef __GNUC__//串口重定向#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endifPUTCHAR_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;
}
volatile bool scan_complete_flag = false;
/* Callback function */
void adc_callback(adc_callback_args_t *p_args)
{/* TODO: add your own code here *///宏将告知编译器回调函数不使用参数 p_args,从而避免编译器发出警告,FSP_PARAMETER_NOT_USED(p_args);scan_complete_flag = true;
}
void hal_entry(void)
{/* TODO: add your own code here */err = R_SCI_UART_Open(&g_uart9_ctrl, &g_uart9_cfg);assert(FSP_SUCCESS == err);err = R_ADC_Open(&g_adc0_ctrl, &g_adc0_cfg);assert(FSP_SUCCESS == err);err = R_ADC_ScanCfg(&g_adc0_ctrl, &g_adc0_channel_cfg);assert(FSP_SUCCESS == err);printf("hello\n");uint16_t adc_data0=0;uint16_t adc_data1=0;uint16_t adc_data3=0;double a0,a1,a3;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_data0);assert(FSP_SUCCESS == err);a0=(double)(adc_data0/4095.0)*3.3;err = R_ADC_Read(&g_adc0_ctrl, ADC_CHANNEL_1, &adc_data1);assert(FSP_SUCCESS == err);a1=(double)(adc_data1/4095.0)*3.3;err = R_ADC_Read(&g_adc0_ctrl, ADC_CHANNEL_3, &adc_data3);assert(FSP_SUCCESS == err);a3=(double)(adc_data3/4095.0)*3.3;printf("%d,a0=%f\n",adc_data0,a0);printf("%d,a1=%f\n",adc_data1,a1);printf("%d,a3=%f\n",adc_data3,a3);R_BSP_SoftwareDelay (1000, BSP_DELAY_UNITS_MILLISECONDS);}#if BSP_TZ_SECURE_BUILD/* Enter non-secure code */R_BSP_NonSecureEnter();
#endif
}

最后

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

瑞萨e2studio(7)----ADC通过单次扫描多通道方式采样相关推荐

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

    瑞萨e2studio.16--基于DTC的多通道ADC采集 概述 视频教学 csdn课程 样品申请 完整代码下载 硬件准备 开发板 新建工程 工程模板 保存工程路径 芯片配置 工程模板选择 uart配 ...

  2. 瑞萨e2studio(1)----瑞萨芯片之搭建FSP环境

    瑞萨e2studio.1--瑞萨芯片之搭建FSP环境 视频教学 csdn课程 样品申请 e2studio软件 开发板 最后 视频教学 https://www.bilibili.com/video/BV ...

  3. 瑞萨e2studio(6)----编译调试

    瑞萨e2studio.6----编译调试 概述 视频教学 样品申请 csdn课程 硬件准备 开发板 调试配置 启动栏配置 调试窗口 DEBUG调试按钮 中断点视图 表达式视图 内存视图 反汇编视图 I ...

  4. 瑞萨e2studio(5)----使用UART串口烧写程序到瑞萨芯片

    瑞萨e2studio.5----使用UART串口烧写程序到瑞萨芯片 概述 视频教学 csdn课程 样品申请 硬件准备 软件准备 hex文件准备 UART串口与瑞萨开发板进行接线 烧录 概述 本篇文章主 ...

  5. 瑞萨e2studio(8)----PWM

    瑞萨e2studio.8--PWM 概述 视频教学 csdn课程 样品申请 硬件准备 新建工程 工程模板 保存工程路径 芯片配置 工程模板选择 时钟设置 选择定时器 开发板 PWM(脉冲宽度调制) 定 ...

  6. 瑞萨e2studio(15)----Code FlashData Flash读写

    瑞萨e2studio.15--Code Flash&Data Flash读写 概述 硬件准备 新建工程 工程模板 保存工程路径 芯片配置 工程模板选择 FLASH配置 FLASH属性配置 设置 ...

  7. 瑞萨e2studio(15)----外部中断定时器配置输入捕获测量频率

    瑞萨e2studio.15--外部中断&定时器配置输入捕获测量频率 概述 视频教学 csdn课程 完整代码下载 样品申请 硬件准备 开发板 新建工程 工程模板 保存工程路径 芯片配置 工程模板 ...

  8. 瑞萨e2studio(20)----更新FSP版本

    瑞萨e2studio.20--更新FSP版本 概述 视频教学 csdn付费课程 软件准备 软件安装 更新e2studio 最后 概述 本章主要讲解如何在瑞萨的FSP版本更新后,对e2studio软件中 ...

  9. 瑞萨e2studio(18)----看门狗WDT

    瑞萨e2studio.18--看门狗WDT 概述 硬件准备 新建工程 工程模板 保存工程路径 芯片配置 工程模板选择 WDT配置 WDT属性配置 RTC配置 RTC属性配置 设置e2studio堆栈 ...

最新文章

  1. C++零碎知识点(一)
  2. Qt中的QStackedLayout
  3. SAP Spartacus 默认的 pwa,处于关闭状态还是打开状态?
  4. svn merge 回滚
  5. java并发框架支持锁包括,jdk1.8锁
  6. js setTimeout 使用方法
  7. python 队列实现_Python Queue队列实现线程通信
  8. 远程打开其他电脑的computer management
  9. 汇编语言学习之汇编语言源程序的输入
  10. Java 高级知识系列篇
  11. 动态更新 fqdn ptr linux,DNS简单概念 一
  12. Pinterest模式的魅力何在?国内山寨有哪些?
  13. oracle 用户创建赋权,oracle 建表空间用户及赋权
  14. mysql frm怎么打开_frm 文件怎么打开?
  15. 深度解析Java中的Comparable接口和Comparator接口
  16. Julia数据可视化:Gadfly.jl包的使用
  17. linux 添加快捷命令,linux 添加快捷指令
  18. DHT11温湿度模块入门
  19. STM32CubeIDE导入机智云生成基于MDK的STM32工程
  20. 分享超好用的微信和QQ缓存清理APP(无广告)

热门文章

  1. js中的数组方法以及循环数组的方法
  2. 数据结构和算法(C语言)
  3. 吃鸡第一弹——安卓投影到电脑客户端
  4. 大数据运维到底是什么 又需要做些什么
  5. (十)python之多态
  6. 物流管理和计算机那个专业好,家长眼中的专业与现实中的专业,形成鲜明对比,尴尬又现实...
  7. AIDAS原理(转载)
  8. iOS10适配及Xcode8配置
  9. pycharm创建vue项目
  10. 长的有点像计算机的小型手机,6英寸也能叫小屏手机?其实是单手操控的时代回来了!...