抖音粉丝群1
『7x24小时有问必答』

本文来源于:记贴

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

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

硬件准备
这里准备使用的是芯片型号R7FAM2AD3CFP的开发板。
1.png

新建工程
2.png

软件准备
3.png

保存工程路径
4.png

芯片配置
本文中使用R7FA4M2AD3CFP来进行演示。
5.png

时钟配置
开发板上的外部高速晶振为12M,需要修改XTAL为12M。
6.png

uart配置
点击Stacks->New Stack->Driver->Connectivity -> UART Driver on r_sci_uart。
7.png

uart属性配置
8.png

回调函数user_uart_callback()
发送完毕可以用UART_EVENT_TX_COMPLETE进行判断。
9.png

左右滑动查看完整内容
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;      }}

设置e   2  studio堆栈
10.png

e   2  studio的重定向printf设置
11.png

C++构建->设置->GNU ARM Cross C Linker->Miscellaneous去掉Other linker flags中的“--specs=rdimon.specs”

12.png

printf输出重定向到串口
在C语言中最常用的打印方法是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++)[ span][="" span]="" {[="" __io_putchar(*pbuffer++);[="" }[="" return[="" span]="" size;[="" span]}[="" align][align="left]

ADC配置
点击Stacks-">New Stack->Driver->Analog -> ADC Driver on r_adc。
13.png

ADC属性配置
14.jpeg
15.jpeg

R_ADC_Open()函数原型
16.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);

R_ADC_ScanCfg()函数原型
17.png

配置ADC扫描参数,赋能ADC通道。在此函数中设置通道特定设置。
左右滑动查看完整内容
/* Enable channels. */      err = R_ADC_ScanCfg(&g_adc0_ctrl, &g_adc0_channel_cfg);      assert(FSP_SUCCESS == err);

R_ADC_ScanStart()函数原型
18.png

启动扫描,若设置为单次扫描,每扫描完一次都需要重新开启。
左右滑动查看完整内容
/* 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()函数原型
19.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;

多通道设置
开发板有Arduino接口,接入多个AD进行采样。
20.png

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

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

多通道代码
左右滑动查看完整内容
#include "hal_data.h"#include <stdio.h>FSP_CPP_HEADERvoid 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++)[ span][="" span]="" {[="" __io_putchar(*pbuffer++);[="" }[="" return[="" span]="" size;[="" span]}[="" span]volatile[="" bool[="" scan_complete_flag="false;/*" callback="" function="" *="" [="" span]void[="" adc_callback[="" span](adc_callback_args_t[="" *p_args)[="" span]{[="" ="" todo:[="" add="" your="" own="" code="" here="" 宏将告知编译器回调函数不使用参数="" p_args,从而避免编译器发出警告,[="" fsp_parameter_not_used(p_args);[="" hal_entry[="" span](void[="" span])[="" err="R_SCI_UART_Open(&g_uart9_ctrl," &g_uart9_cfg);[="" assert(fsp_success="=" err);[="" &g_adc0_cfg);[="" &g_adc0_channel_cfg);[="" printf[="" span]("hello\n"[="" span]);[="" uint16_t[="" adc_data0="0;" adc_data1="0;" adc_data3="0;" double[="" a0,a1,a3;[="" while[="" span](1[="" enable="" scan="" triggering="" from="" elc="" events.="" (void[="" span])="" r_adc_scanstart(&g_adc0_ctrl);[="" (!scan_complete_flag)[="" wait="" for="" to="" set="" flag.="" adc_channel_0,="" &adc_data0);[="" a0="(double)(adc_data0/4095.0)*3.3;" adc_channel_1,="" &adc_data1);[="" a1="(double)(adc_data1/4095.0)*3.3;" adc_channel_3,="" &adc_data3);[="" a3="(double)(adc_data3/4095.0)*3.3;" span]("%d,a0="%f\n",adc_data0,a0);" span]("%d,a1="%f\n",adc_data1,a1);" span]("%d,a3="%f\n",adc_data3,a3);" r_bsp_softwaredelay="" (1000[="" span],="" bsp_delay_units_milliseconds);[="" span]#if[="" bsp_tz_secure_build[="" enter="" non-secure="" r_bsp_nonsecureenter();[="" span]#endif[="" span]

[="" p][="" align][align="left]

<img" src="https://mmbiz.qpic.cn/mmbiz_svg/Xmnun9Io49TgmDBbGkAuTZWpfHtJXd3smVJia4TqApXxx8RRzK3BNtIO4EEGoeAYtmhmlM5pZV0PM996Udd8KDcliciajCb1Euc/640?wx_fmt=svg&from=appmsg#imgIndex=23">
需要技术支持?
如您在使用瑞萨MCU/MPU产品中有任何问题,可识别下方二维码或复制网址到浏览器中打开,进入瑞萨技术论坛寻找答案或获取在线技术支持。
https://community-ja.renesas.com/zh/forums-groups/mcu-mpu/

未完待续

推荐阅读
更多精彩,敬请关注
26.jpg
27.jpeg

</size;i++)[></stdio.h></size;i++)[></stdio.h>

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

上一主题上一主题         下一主题下一主题
QQ手机版小黑屋粤ICP备17165530号

关于我们·投诉举报· 用户帮助· 联系我们 · 本站服务 · 版权声明· 隐私政策 · 投搞指南

法律保护:PLC技术网,plcjs.com,plcjs.net等字样
Copyright 2010-2030. All rights reserved. 


微信公众号二维码 抖音二维码 百家号二维码 今日头条二维码哔哩哔哩二维码