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 测试

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

 通过调节按钮

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/41478.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机应用数学--第三次作业

第三次作业计算题编程题1 基于降维的机器学习2 深度学习训练方法总结 第三次作业 计算题 (15 分)对于给定矩阵 A A A(规模为 42),求 A A A 的 SVD(奇异值分解),即求 U U U, Σ …

重塑通信边界,基于ZYNQ7000 FPGA驱动的多频段多协议软件无线电平台

01、产品概述 本平台是基于高性能ZYNQ-7000系列中的XC7Z045处理器构建的多频段多协议软件无线电解决方案,集成了AD9364芯片——一款业界领先的1x1通道RF敏捷收发器,为无线通信应用提供了强大支持。其存储架构包括2路高速4GB DDR3内存、1路32GB EMMC存储以…

一道有意思的简单题 [NOIP2010 普及组] 接水问题

题目&#xff1a; 题解&#xff1a; 每一次新来的同学的接水时间都加在现在已有的水龙头中接水时间最短的&#xff0c;总时间就为n次操作后水龙头中接水时间的最长值。 #include<bits/stdc.h> using namespace std; multiset<int>s;int main(){int n,m;scanf(&qu…

uni-app组件 子组件onLoad、onReady事件无效

文章目录 导文解决方法 导文 突然发现在项目中&#xff0c;组件 子组件的onLoad、onReady事件无效 打印也出不来值 怎么处理呢&#xff1f; 解决方法 mounted() {console.log(onLoad, this.dateList);//有效// this.checkinDetails()},onReady() {console.log(onReady, this.da…

空间数据采集与管理:为什么选择ArcGISPro和Python?

你还在为找不到合适的数据而苦恼吗&#xff1f;你还在面对大量数据束手无策&#xff0c;不知如何处理吗&#xff1f;对于从事生产和科研的人员来说&#xff0c;空间数据的采集与管理是地理信息系统&#xff08;GIS&#xff09;和空间分析领域的关键环节。通过准确高效地采集和管…

PHP源码:美容护理按摩预约系统(附管理端+前台)

一. 前言 今天小编给大家带来了一款可学习&#xff0c;可商用的&#xff0c;预约系统 源码&#xff0c;支持二开&#xff0c;无加密。项目的内容可以是美容护理&#xff0c;按摩护理等&#xff0c;你也可以扩展。 预约下单大致流程&#xff1a; 客户登录下预约单&#xff0c…

电机驱动----L298N

一、介绍 L298N 是一种双H桥电机驱动芯片&#xff0c;其中每个H桥可以提供2A的电流&#xff0c;内含4路逻辑驱动电路&#xff0c;功率部分的供电电压范围是2.5-48v&#xff0c;逻辑部分5v供电&#xff0c;接受5vTTL电平。一般情况下&#xff0c;功率部分的电压应大于6V否则芯片…

Spring源码十一:事件驱动

上一篇Spring源码十&#xff1a;BeanPostProcess中&#xff0c;我们介绍了BeanPostProcessor是Spring框架提供的一个强大工具&#xff0c;它允许我们开发者在Bean的生命周期中的特定点进行自定义操作。通过实现BeanPostProcessor接口&#xff0c;开发者可以插入自己的逻辑&…

昇腾910B部署Qwen2-7B-Instruct进行流式输出【pytorch框架】NPU推理

目录 前情提要torch_npu框架mindsport框架mindnlp框架 下载模型国外国内 环境设置代码适配&#xff08;非流式&#xff09;MainBranch结果展示 代码适配&#xff08;流式&#xff09; 前情提要 torch_npu框架 官方未适配 mindsport框架 官方未适配 mindnlp框架 官方适配…

HTTP与HTTPS的主要区别

HTTP&#xff08;超文本传输协议&#xff09;与HTTPS&#xff08;超文本传输安全协议&#xff09;的主要区别在于安全性、数据传输方式、默认使用的端口以及对网站的影响。 一、安全性&#xff1a; HTTP是一种无加密的协议&#xff0c;数据在传输过程中以明文形式发送&#x…

InfluxDB时序数据库基本使用介绍

1、概要介绍 1.1、时序数据库使用场景 所谓时序数据库就是按照一定规则的时间序列进行数据读写操作的数据库。它们常被用于以下业务场景&#xff1a; 物联网IOT场景&#xff1a;可用于IOT设备的指标、状态监控数据存取。IT建设场景&#xff1a;可用于服务器、虚拟机、容器的…

等保测评需要什么SSL证书

在进行信息安全等级保护&#xff08;简称“等保”&#xff09;测评时&#xff0c;选择合适的HTTPS证书对于确保网站的安全性和合规性至关重要。以下是在等保测评中选择HTTPS证书时应考虑的因素&#xff1a; 国产证书&#xff1a; 等保测评倾向于使用国产品牌的SSL证书&#x…

上网行为管理系统是什么?有哪些好用的上网行为管理系统?

IT经理&#xff08;ITM&#xff09;: 大家好&#xff0c;今天我们聚在这里&#xff0c;是为了讨论一个对我们公司来说越来越重要的议题&#xff1a;上网行为管理系统&#xff08;WBS&#xff09;。我们知道&#xff0c;员工的网络使用已经不仅仅是个人行为&#xff0c;它直接影…

序列化Serializable

一、传输对象的方式 将对象从内存传输到磁盘进行保存&#xff0c;或者进行网络传输&#xff0c;有两种方式&#xff1a; 实现Serializable接口&#xff0c;直接传输对象转成json字符串后&#xff0c;进行字符串传输 二、直接传输对象 implements Serializable Data Equal…

resp 无法连接 redis 服务器

问题原因可能是&#xff1a;防火墙 防火墙对这个端口没有开放&#xff0c;所以主机访问不到 解决方法&#xff1a; 步骤1&#xff1a;开发指定端口号 #放通6379/tcp端口 firewall-cmd --zonepublic --permanent --add-port6379/tcp 步骤2&#xff1a;重启防火墙 firewall-c…

.netcore微服务——项目搭建

在.NET Core中&#xff0c;微服务是一种架构风格&#xff0c;它将应用程序构造为一组小型服务的集合&#xff0c;这些服务都通过HTTP-based API进行通信。每个服务都是独立部署的&#xff0c;可以用不同的编程语言编写&#xff0c;并且可以使用不同的数据存储技术。 微服务的主…

什么是网络抓取|常见用例和问题

你可能听说过数据被称为现代信息社会的新石油。由于线上信息量庞大&#xff0c;能够有效地收集和分析网页数据已经成为企业、研究人员和开发人员的关键技能。这就是网页抓取技术的用武之地。网页抓取&#xff0c;也称为网页数据提取&#xff0c;是一种强大的技术&#xff0c;能…

IDEA 2018提交Git之后撤销commit

1、选择项目——>右击git——>找到Repostiory——>执行rest head 2、编辑reset head 3、回退到上一个版本&#xff08;HEAD~1&#xff09;&#xff0c;点击reset即可&#xff0c;如果还想继续回滚&#xff0c;再次执行即可

Linux平台x86_64|aarch64架构如何实现轻量级RTSP服务

技术背景 我们在做Linux平台x86_64架构或aarch64架构的推送模块的时候&#xff0c;有公司提出这样的技术需求&#xff0c;希望在Linux平台&#xff0c;实现轻量级RTSP服务&#xff0c;实现对摄像头或屏幕对外RTSP拉流&#xff0c;同步到大屏上去。 技术实现 废话不多说&…

在 Baklib Experience 中实现混合 CMS 架构

“还记得 CMS 主要用于在网页上布局内容吗&#xff1f;当时&#xff0c;这满足了网站管理需求。然而&#xff0c;行业正在发生变化&#xff0c;数字体验平台 Baklib Digital Content Experience 正在引领潮流。继续阅读以了解如何以及详细了解可用于确保全渠道成功的两个原则。…