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.c
 Description:  adc interface
 Author     :  tangmingfei2013@126.com
 Date       :  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.mfbz.cn/a/776777.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

盘点各个国家的国宝

中国:熊猫 熊猫已有800万年的历史,和它们同时代的动物都已灭绝,大熊猫生存至今成为“活化石”。 俄罗斯:北极熊 北极熊是世界上最大的陆地食肉动物,体型巨大,性格凶猛。 美国:白头海雕 白头海雕…

Python | Leetcode Python题解之第218题天际线问题

题目: 题解: class Solution:def getSkyline(self, buildings: List[List[int]]) -> List[List[int]]:buildings.sort(keylambda bu:(bu[0],-bu[2],bu[1]))buildings.append([inf,inf,inf])heap [[-inf,-inf,-inf]]ans []for l,r,h in buildings:i…

二维树状数组区域查询

落谷4514 过关代码如下 #define _CRT_SECURE_NO_WARNINGS #include<bits/stdc.h> using namespace std; //#define int long longconst int N 2050; int t1[N][N], t2[N][N], t3[N][N], t4[N][N]; int lowbit(int x) { return x & (-x); } int n, m; void update(…

C++ 对象模型 -- vptr 和 vtbl

是看侯捷老师讲解c对象模型 虚表和虚指针的笔记和程序验证。 先看两张关键的图吧&#xff0c;右边的三个基类和派生类 A&#xff0c;B&#xff0c;C。定义了两个虚函数&#xff0c;两个一般成员函数&#xff0c;以及几个成员变量。 只有在类中有虚函数时&#xff0c;才会有虚指…

LT8711UXE2 国产芯片 Type-C with 2lane@8.1Gbps/lane 4K60 USB3.0 在线提供软硬件技术支持服务

2.一般说明 LT8711UXE2是一款高性能的Type-C/DP1.4到HDMI2.0转换器&#xff0c;设计用于将USBType-C源或DP1.4源连接到HDMI2.0收发器。该LT8711UXE2集成了一个符合DP1.4标准的接收器和一个符合HDMI2.0标准的发射器。此外&#xff0c;还包括用于CC通信的两个CC控制器&#xff0c…

深入解析代理模式:静态代理与动态代理的比较及JDK与CGLIB动态代理技术

1. 静态代理与动态代理的区别 静态代理和动态代理都是实现代理模式的方式&#xff0c;它们在实现上有很大的不同。下面是它们的主要区别&#xff1a; 实现方式不同 静态代理 静态代理是在编译期就已经确定代理对象的类型。代理类需要手动编写&#xff0c;并实现被代理类的接…

C++20中的基于范围的for循环(range-based for loop)

C11中引入了对基于范围的for循环(range-based for loop)的支持&#xff1a;该循环对一系列值(例如容器中的所有元素)进行操作。代码段如下&#xff1a; const std::vector<int> vec{ 1,2,3,4,5 }; for (const auto& i : vec)std::cout << i << ", …

免费鼠标连点器有吗?需要付费吗?鼠标连点器电脑版免费推荐6款!

在数字化时代&#xff0c;鼠标连点器成为了许多用户提高工作效率、优化游戏体验的得力助手。然而&#xff0c;面对市场上琳琅满目的鼠标连点器软件&#xff0c;很多用户都会产生疑问&#xff1a;是否有免费的鼠标连点器&#xff1f;它们真的需要付费吗&#xff1f;今天&#xf…

转盘输入法-单独鼠标版本

序 转盘输入法&#xff0c;给你的聊天加点新意。它不用常见的九宫格或全键盘&#xff0c;而是把字母摆在圆盘上&#xff0c;一滑一滑&#xff0c;字就出来了&#xff0c;新鲜又直接。 单独鼠标版本GIF演示 演示软件下载 转盘输入法https://download.csdn.net/download/u0146…

优化LabVIEW代码以提高软件性能

优化LabVIEW代码对于提高软件性能、减少执行时间和资源消耗至关重要。以下是一些具体的策略和方法&#xff0c;可以帮助LabVIEW程序员优化代码&#xff1a; 1. 代码结构和模块化 使用子VI&#xff1a;将重复使用的代码段封装成子VI&#xff0c;提高代码的可读性和可维护性。 避…

为什么https比http更安全

读完本文&#xff0c;希望你能明白&#xff1a; HTTP通信存在什么问题HTTPS如何改进HTTP存在那些问题HTTPS工作原理是什么 一、什么是HTTPS HTTPS是在HTTP上建立SSL加密层&#xff0c;并对传输数据进行加密&#xff0c;是HTTP协议的安全版。现在它被广泛用于万维网上安全敏感…

Python酷库之旅-第三方库Pandas(005)

目录 一、用法精讲 7、pandas.read_clipboard函数 7-1、语法 7-2、参数 7-3、功能 7-4、返回值 7-5、说明 7-6、用法 7-6-1、代码示例 7-6-2、结果输出 8、pandas.DataFrame.to_clipboard函数 8-1、语法 8-2、参数 8-3、功能 8-4、返回值 8-5、说明 8-6、用法…

C语言自定义类型——联合体、枚举

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、联合体&#xff08;一&#xff09;、联合体的声明&#xff08;二&#xff09;、联合体的特点&#xff08;三&#xff09;、联合体大小的计算&#xff01;&a…

提取重复数据

直接上控制台代码&#xff1a; Module Module1Sub Main()Console.WriteLine("请输入数据&#xff0c;以""&#xff0c;""相隔&#xff1a;")Dim str As String Console.ReadLineDim result From x In str.Split(",")Group By x Int…

【吊打面试官系列-MyBatis面试题】MyBatis 实现一对一有几种方式?具体怎么操作的?

大家好&#xff0c;我是锋哥。今天分享关于 【MyBatis 实现一对一有几种方式?具体怎么操作的&#xff1f;】面试题&#xff0c;希望对大家有帮助&#xff1b; MyBatis 实现一对一有几种方式?具体怎么操作的&#xff1f; 有联合查询和嵌套查询,联合查询是几个表联合查询,只查询…

Springboot助农农产品销售系统-计算机毕业设计源码16718

摘要 SpringBoot助农农产品销售系统旨在通过利用SpringBoot框架开发一个便捷高效的农产品销售平台。该系统包括用户注册登录、商品浏览、购物车管理、订单生成、支付功能等模块。通过整合支付接口、地图定位、推荐系统等技术&#xff0c;提供给用户更好的购物体验。本文介绍了…

宿舍报修小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;管理员管理&#xff0c;基础数据管理&#xff0c;论坛管理&#xff0c;故障上报管理&#xff0c;新闻信息管理&#xff0c;维修人员管理 微信端账号功能包括&#xff1a;系统首页&#xff0c;新闻信息…

B组亚太赛数学建模

问题1 1.对训练数据集进行数据清洗&#xff0c;处理缺失值和异常值。 2.采用散点图作为可视化手段。 3.采用皮尔逊相关系数进行相关性分析。 4.提出预防措施。 问题2 1.采用k-means聚类算法将洪水概率分为高中低三个群组。 2.通过线性回归模型计算特征权重。 3.选择特定…

SpringBoot | 大新闻项目源码打包

对于一个完成好的后端项目&#xff0c;如何进行打包发送给其他人&#xff0c;在电脑上进行查看 1.在pom.xml添加&#xff1a; <build><plugins> <!-- 打包插件--><plugin><groupId>org.springframework.boot</groupId><art…

刷题之移除元素(leetcode)

移除元素 这题简单题&#xff0c;但是前面思路是先找到左边第一个不是val的&#xff0c;和右边第一个不是val的&#xff0c;进行交换&#xff0c;边界条件没有处理好&#xff0c;导致报错&#xff08;水平真菜&#xff09; 也可以直接把left是val的与right进行交换&#xf…