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

news2024/11/20 7:17:16

目录

概述

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.coloradmin.cn/o/1899605.html

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

相关文章

无人机云台类型及作用

无人机云台主要分为三种类型: 单轴云台:仅支持单向旋转,适合拍摄平滑的延时摄影和全景照片。 双轴云台:支持水平和垂直旋转,可用于拍摄流畅的视频和运动物体。 三轴云台:全面支持所有旋转轴,…

ModuleNotFoundError: No module named ‘blinker._saferef‘

报错信息&#xff1a; 截图 代码 File "D:\Code\Python\flask-api\.venv\Lib\site-packages\seleniumwire\webdriver.py", line 28, in <module>from seleniumwire import backend, utilsFile "D:\Code\Python\flask-api\.venv\Lib\site-packages\selen…

充分利用东芝 TB67H450FNG 实现电机控制需求

在当今快速发展的技术环境中&#xff0c;高效且可靠的电机控制对于各种应用来说都是至关重要的&#xff0c;无论是工业机械还是消费电子产品。东芝的 TB67H450FNG&#xff0c;一款PWM斩波型直流有刷电机驱动器&#xff0c;以其高电压和大电流驱动能力脱颖而出&#xff0c;能够满…

[SAP ABAP] 函数Function

Function函数与子例程类似&#xff0c;按照功能将代码模块化 我们可以使用事务码SE37查看需要使用的函数以及对该函数进行测试 我们也可以对STRING_SPLIT_AT_POSITION函数进行测试 1.函数调用 我们可以使用事务码SE38进入ABAP编辑器界面&#xff0c;使用"模式/Pattern&q…

51单片机基础11——蓝牙模块控制亮灭

串口初试——蓝牙模块 蓝牙模块的使用1. 软硬件条件2. 蓝牙模块3. 代码(分文件处理之后的代码) 蓝牙模块的使用 1. 软硬件条件 单片机型号&#xff1a;STC89C52RC开发环境&#xff1a;KEIL4烧录软件串口通信软件&#xff1a;stc-isp蓝牙模块&#xff1a;HC-04LED模块(高电平点…

利用Redis bitmap 实现签到案例

数据库实现 设计签到功能对应的数据库表 CREATE TABLE sign_record (id bigint NOT NULL AUTO_INCREMENT COMMENT 主键,user_id bigint NOT NULL COMMENT 用户id,year year NOT NULL COMMENT 签到年份,month tinyint NOT NULL COMMENT 签到月份,date date NOT NULL COMMENT 签…

项目部署_持续集成_Jenkins

1 今日内容介绍 1.1 什么是持续集成 持续集成&#xff08; Continuous integration &#xff0c; 简称 CI &#xff09;指的是&#xff0c;频繁地&#xff08;一天多次&#xff09;将代码集成到主干 持续集成的组成要素 一个自动构建过程&#xff0c; 从检出代码、 编译构建…

HTML+CSS+JavaScript入门学习

目录 1. 前言2. HTML2.1 HTML简介2.2 HTML标签 3. CSS3.1 CSS知识整理及总结3.2 CSS之flex布局 4. JavaScript4.1 JavaScript知识整理及总结1-基础篇4.2 JavaScript知识整理及总结2-进阶篇 1. 前言 本文主要采用转载的形式&#xff0c;偶尔发现了一个比较不错的博客站点&#…

Java需要英语基础吗?

Java编程语言本身并不要求必须有很强的英语基础&#xff0c;因为Java的语法和逻辑是独立于任何特定语言的。我收集归类了一份嵌入式学习包&#xff0c;对于新手而言简直不要太棒&#xff0c;里面包括了新手各个时期的学习方向编程教学、问题视频讲解、毕设800套和语言类教学&am…

嵌入式linux面试1

1. linux 1.1. Window系统和Linux系统的区别 linux区分大小写windows在dos&#xff08;磁盘操作系统&#xff09;界面命令下不区分大小写&#xff1b; 1.2. 文件格式区分 windows用扩展名区分文件&#xff1b;如.exe代表执行文件&#xff0c;.txt代表文本文件&#xff0c;.…

短视频父亲:成都柏煜文化传媒有限公司

短视频父亲&#xff1a;镜头背后的温情与力量 在这个信息爆炸的时代&#xff0c;短视频以其短小精悍、直观生动的特点&#xff0c;迅速占据了人们碎片化的时间&#xff0c;成为情感交流与文化传播的重要平台。而在这些纷繁复杂的短视频中&#xff0c;有一类内容尤为触动人心—…

前缀和数组 差分数组

前缀和 一维&#xff1a;通过空间换时间适用于需要频繁查询某一段区间和的场景。 一维数组&#xff1a; 一维前缀和中的每一项&#xff1a; &#xff0c;该前缀和中的每一项也就是数组中对应的前 i 项和。 一维前缀和数组的构造&#xff1a; 在输入原数组时同步构造前缀和…

linux之管道重定向

管道与重定向 一、重定向 将原输出结果存储到其他位置的过程 标准输入、标准正确输出、标准错误输出 ​ 进程在运行的过程中根据需要会打开多个文件&#xff0c;每打开一个文件会有一个数字标识。这个标识叫文件描述符。 进程使用文件描述符来管理打开的文件&#xff08;FD--…

【proteus可调直流稳压电源LM317】2022-4-11

缘由直流稳压电源的设计。-编程语言-CSDN问答 缘由proteus电路仿真设计-嵌入式-CSDN问答 仿真是什么?就是可以恣意妄为,从错误中学习,电感量1安培1伏特1亨利,220亨利220伏特1安培.

数据库原理之并发控制的基本概念

我们今天继续来看数据库原理&#xff0c;我们简单讲讲数据库的并发控制。 并发控制的定义 并发控制是为了保证事务的隔离性和一致性&#xff0c;数据库管理系统需要对并发操作进行正确调度。并发控制的主要技术有&#xff1a;、时间戳、乐观控制法、多版本并发控制等。 并发操…

加入运动健康数据开放平台,共赢鸿蒙未来

HarmonyOS SDK运动健康服务&#xff08;Health Service Kit&#xff09;是为华为生态应用打造的基于华为帐号和用户授权的运动健康数据开放平台。在获取用户授权后&#xff0c;开发者可以使用运动健康服务提供的开放能力获取运动健康数据&#xff0c;基于多种类型数据构建运动健…

读人工智能全传04NP完全问题

1. 问题解决与搜索 1.1. 解决问题的能力无疑是区分人类和其他动物的关键能力之一 1.1.1. 解决问题是需要智慧的 1.2. 汉诺塔 1.2.1. 对于三个金环而言 1.2.1.1. 你不可能找到少于7次的解决方案了 1.2.2. 最初&#xff0c;我们只能选择移动最小的金环&#xff0c;只有将它…

【MySQL系列】VARCHAR 类型详解及其使用策略

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

IT高手修炼手册(2)cmd命令

一、前言 CMD&#xff08;命令提示符&#xff09;是Windows操作系统中的一个重要工具&#xff0c;用于执行命令行操作&#xff0c;旨在提高用户在CMD中的操作效率和便利性。 二、常用cmd命令及其简要说明 1. 快捷键F1&#xff1a;按F1一次&#xff0c;命令提示符向后切换到已经…

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

第二次作业计算题编程题 第二次作业 计算题 给定图 G G G&#xff08;如图 1&#xff0c;图中数值为边权值&#xff09;&#xff0c;图切割将其分割成多个互不连通的⼦图。请使⽤谱聚类算法将图 G G G 聚类成 k 2 k 2 k2 类&#xff0c;使得&#xff1a; (a) RatioCut 最…