欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 家装 > Renesas R7FA8D1BH (Cortex®-M85) ADC模块应用

Renesas R7FA8D1BH (Cortex®-M85) ADC模块应用

2025/11/25 14:37:13 来源:https://blog.csdn.net/mftang/article/details/140093756  浏览:    关键词:Renesas R7FA8D1BH (Cortex®-M85) ADC模块应用

目录

概述

1 软硬件

1.1 软硬件环境信息

1.2 开发板信息

1.3 调试器信息

2 FSP和KEIL配置ADC

2.1 ADC硬件接口

2.2 FSP配置ADC

3 软件功能实现

3.1 FSP生成项目

3.2 FSP ADC模块库函数介绍

3.2.1 库函数列表

 3.2.2 函数介绍

4 ADC功能代码

4.1 编写代码

4.2 代码调用

 5 测试


概述

本文主要介绍Renesas R7FA8D1BH (Cortex®-M85) ADC模块的应用方法,包括使用FSP配置ADC模块的参数,并生成基于KEIL的工程代码。还编写一个ADC的应用程序,以实现模数转换功能,并将读到的数字量通过UART发送至控制台,以观察期数据的变化。

1 软硬件

1.1 软硬件环境信息

软硬件信息版本信息
Renesas MCUR7FA8D1BH
KeilMDK ARM 5.38
FSP 版本5.3.0
调试工具:N32G45XVL-STBDAP-LINK

1.2 开发板信息

笔者选择使用野火耀阳开发板_瑞萨RA8,该板块的主控MCU为R7FA8D1BHECBD,7FA8D1BHECBD的内核为ARM Contex-M85。

1.3 调试器信息

对于R7FA8D1BHECBD芯片,其使用的内核为Cortex®-M85 Core, ST-LINK-V2或者J-LINK-V9不支持下载和调试功能。笔者经过多次尝试,发现N32G45XVL-STB板卡上自带的DAP-LINK可以下载和调试R7FA8D1BHECBD。

下图为N32G45XVL-STB开发板实物图:

2 FSP和KEIL配置ADC

2.1 ADC硬件接口

耀阳开发板_瑞萨RA8上提供一个可调电阻,用于验证ADC的功能,该接口对应的PIN引脚为P000,可使用FSP工具来配置参数。

2.2 FSP配置ADC

 1) 在Pin面板上配置ADC 输出通道

2)创建ADC模块

3)配置ADC单元

P000 对应的ADC channel为ADC1_AN100

介绍ADC1_AN100: 

ADC1:  对应Unit-1

AN100: 表示ADC1 的 channel-0

4)  配置通道号

 pin引脚参数

3 软件功能实现

3.1 FSP生成项目

在完成FSP的参数配置之后,就可以使用Generate Project生成项目代码,打开项目后在hal_data.c中已经生成了adc的相关代码。

3.2 FSP ADC模块库函数介绍

3.2.1 库函数列表

概述

ADC模块支持以下特性:

1)12,14或16位最大分辨率取决于MCU
2)配置扫描包括:
      多个模拟通道
       温度传感器通道
       电压传感器通道


3)可配置扫描启动触发器:
       软件扫描触发器
      硬件扫描触发器(例如,计时器过期)
      外部扫描触发器从adtrn端口引脚


4)可配置扫描模式:
     单扫描模式,其中每个触发器启动一次扫描
     连续扫描模式,连续扫描所有通道
     群组扫描模式,将通道分为A组和B组。群组可以配置不同的启动触发器,A组可以优先于B组。当A组优先于B组时,A组触发器暂停正在进行的B组扫描。

5)支持添加和平均转换的样本
6)扫描完成时可选回调
7)取样和保持支撑
8)双层支持
9)具有中断和事件输出的硬件比较器

 3.2.2 函数介绍

1)R_ADC_Open()

fsp_err_t R_ADC_Open	(	adc_ctrl_t * 	p_ctrl,
adc_cfg_t const *const 	p_cfg 
)	

参数介绍

设置整个外设的操作模式、触发源、中断优先级和配置。如果中断被启用,该函数注册一个回调函数指针,以便在扫描完成时通知用户。

Return values

FSP_SUCCESSModule is ready for use.
FSP_ERR_ASSERTIONAn input argument is invalid.
FSP_ERR_ALREADY_OPENThe instance control structure has already been opened.
FSP_ERR_IRQ_BSP_DISABLEDA callback is provided, but the interrupt is not enabled.
FSP_ERR_IP_CHANNEL_NOT_PRESENTThe requested unit does not exist on this MCU.
FSP_ERR_INVALID_HW_CONDITIONThe ADC clock must be at least 1 MHz

2)R_ADC_ScanCfg()


fsp_err_t R_ADC_ScanCfg	(	adc_ctrl_t * 	p_ctrl,
void const *const 	p_channel_cfg 
)	

 参数介绍

配置ADC扫描参数。通道特定设置在此函数中设置。将指向adc_channel_cfg_t的指针传递给p_channel_cfg。

请注意如果adc_channel_cfg_t::priority_group_a设置为ADC_GROUP_A_GROUP_B_CONTINUOUS_SCAN,则启动组B扫描。

Return values

FSP_SUCCESSChannel specific settings applied.
FSP_ERR_ASSERTIONAn input argument is invalid.
FSP_ERR_NOT_OPENUnit is not open.

3)R_ADC_ScanStart()

fsp_err_t R_ADC_ScanStart	(	adc_ctrl_t * 	p_ctrl	)	

 根据R_ADC_Open调用中如何配置触发器,启动软件扫描或启用扫描的硬件触发器。如果单元配置为ELC或外部硬件触发,则此功能允许触发信号到达ADC单元。该函数不能控制触发器本身的生成。如果设备配置为软件触发,则此功能启动软件触发扫描。

Precondition

Call R_ADC_ScanCfg after R_ADC_Open before starting a scan.

On MCUs that support calibration, call R_ADC_Calibrate and wait for calibration to complete before starting a scan.

Return values

FSP_SUCCESSScan started (software trigger) or hardware triggers enabled.
FSP_ERR_ASSERTIONAn input argument is invalid.
FSP_ERR_NOT_OPENUnit is not open.
FSP_ERR_NOT_INITIALIZEDUnit is not initialized.
FSP_ERR_IN_USEAnother scan is still in progress (software trigger).

4)R_ADC_StatusGet()

fsp_err_t R_ADC_StatusGet	(	adc_ctrl_t * 	p_ctrl,
adc_status_t * 	p_status 
)	

 参数介绍

提供已启动的任何扫描进程的状态,包括由ELC或外部触发器启动的扫描以及支持校准的mcu上的校准扫描。

Return values

FSP_SUCCESSModule status stored in the provided pointer p_status
FSP_ERR_ASSERTIONAn input argument is invalid.
FSP_ERR_NOT_OPENUnit is not open.

5)R_ADC_Read()


fsp_err_t R_ADC_Read	(	adc_ctrl_t * 	p_ctrl,
adc_channel_t const 	reg_id,
uint16_t *const 	p_data 
)	

 参数介绍

从单个通道或传感器读取转换结果。

Return values

FSP_SUCCESSData read into provided p_data.
FSP_ERR_ASSERTIONAn input argument is invalid.
FSP_ERR_NOT_OPENUnit is not open.
FSP_ERR_NOT_INITIALIZEDUnit is not initialized.

4 ADC功能代码

4.1 编写代码

编写bsp_adc.c,实现如下代码

 /*FILE NAME  :  bsp_adc.cDescription:  adc interfaceAuthor     :  tangmingfei2013@126.comDate       :  2024/06/03*/
#include "bsp_adc.h" 
#include "hal_data.h"void adc_basic_init( void )
{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);
}void adc_basic_get_value (uint16_t *result)
{fsp_err_t err = FSP_SUCCESS;adc_status_t status;/* In software trigger mode, start a scan by calling R_ADC_ScanStart(). In other modes, enable external* triggers by calling R_ADC_ScanStart(). */(void) R_ADC_ScanStart(&g_adc0_ctrl);/* Wait for conversion to complete. */status.state = ADC_STATE_SCAN_IN_PROGRESS;while (ADC_STATE_SCAN_IN_PROGRESS == status.state){(void) R_ADC_StatusGet(&g_adc0_ctrl, &status);}/* Read converted data. */err = R_ADC_Read(&g_adc0_ctrl, ADC_CHANNEL_0, result);assert(FSP_SUCCESS == err);float voltage = (float)(((*result)*3.3)/4096);printf(" ADC_CHANNEL_0:  %d , voltage(v): %.02f\n", *result , voltage);
}

4.2 代码调用

代码第45行: 初始化adc

代码第51行: 读取adc的值

 5 测试

编译代码,下载代码到板卡中,运行代码其结果如下:

 通过调节按钮

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词