
本篇文章主要介绍如何使用e 2 studio对瑞萨单片机进行ADC通过单次扫描多通道方式采样。 硬件准备:这里准备的是芯片型号R7FA4M2AD3CFP的开发板。 这里准备使用的是芯片型号R7FAM2AD3CFP的开发板。 开发板上的外部高速晶振为12M,需要修改XTAL为12M。 点击Stacks->New Stack->Driver->Connectivity -> UART Driver on r_sci_uart。 发送完毕可以用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; }} C++构建->设置->GNU ARM Cross C Linker->Miscellaneous去掉Other linker flags中的“--specs=rdimon.specs” 在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)#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]}[="" align][align="left] 点击Stacks-">New Stack->Driver->Analog -> ADC Driver on r_adc。 故可以用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); 配置ADC扫描参数,赋能ADC通道。在此函数中设置通道特定设置。 /* Enable channels. */ err = R_ADC_ScanCfg(&g_adc0_ctrl, &g_adc0_channel_cfg); assert(FSP_SUCCESS == err); 启动扫描,若设置为单次扫描,每扫描完一次都需要重新开启。 /* Enable scan triggering from ELC events. */ (void) R_ADC_ScanStart(&g_adc0_ctrl); 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. */ } 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_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/ </size;i++)[></stdio.h></size;i++)[></stdio.h> 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |