Renesas R7FA8D1BH (Cortex®-M85) 上超声波测距模块(HC-SR04)驱动开发
目录
概述
1 软硬件
1.1 软硬件环境信息
1.2 开发板信息
1.3 调试器信息
2 硬件架构
2.1 硬件框架结构
2.2 测距模块(HC-SR04)介绍
2.2.1 HC-SR04特性
2.2.2 HC-SR04操作时序
2.2.3 计算距离
3 软件实现
3.1 FSP配置项目
3.1.1 配置IO口的外部中断
3.1.2 配置定时器
3.2 代码架构
3.3 驱动实现
4 测试
4.1 编译代码
4.2 验证
源代码下载地址:
https://www.firebbs.cn/forum.php?mod=viewthread&tid=37943
概述
本文主要介绍Renesas R7FA8D1BH (Cortex®-M85) 上超声波测距模块(HC-SR04)驱动开发的过程,笔者介绍了HC-SR04测距模块驱动的实现原理,并使用FSP配置外围驱动接口,并编写驱动代码,实现测距的功能。在Renesas R7FA8D1BH板卡上通过改变距离参数验证驱动程序的功能。
1 软硬件
1.1 软硬件环境信息
软硬件信息 | 版本信息 |
---|---|
Renesas MCU | R7FA8D1BH |
Keil | MDK ARM 5.38 |
FSP 版本 | 5.3.0 |
调试工具:N32G45XVL-STB | DAP-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 硬件架构
2.1 硬件框架结构
IO接口配置功能:
触发信号接口P7_10: 送触发信号(10us)的脉冲
测距数据响应接口P7_09: 该IO配置外部中断响应模式,用于接收HC-SR04发回的脉冲信号
TIMER-0: 配置为10us响应速度,用于计算数据的脉冲宽度
系统工作框架结构如下:
2.2 测距模块(HC-SR04)介绍
2.2.1 HC-SR04特性
2.2.2 HC-SR04操作时序
工作原理:
Step -1: TRIG IO 收到10us 高电平
step - 2: SR04自动发送8个40hz方波,并检测是否有信号返回
step - 3:SR04检测到返回信号,ECHO IO发送高电平,高电平持续时间为SR04发送波信号到返回波信号的时间。
具体工作波形图如下:
2.2.3 计算距离
以厘米为单位计算公式:
距离 = us/58(单位: cm), us为ECHO IO接收的高电平的持续时间,时间单位为: 微妙
以英寸为单位计算公式:
距离 = us/148(单位: 英寸), us为ECHO IO接收的高电平的持续时间,时间单位为: 微妙
3 软件实现
3.1 FSP配置项目
3.1.1 配置IO口的外部中断
1) 创建外部中断stack
2)配置参数
需要配置的参数如下:
1)选择通道号
2)回调函数
3)IO接口
3.1.2 配置定时器
1)创建定时器的stack
2)配置参数
需要配置的参数如下:
1)通道号
2)周期
3) 最小周期单元
4)中断回调函数
3.2 代码架构
完成以上参数配置后,就可以使用FSP生成工程代码,其代码架构如下:
3.3 驱动实现
1)初始化函数
函数static void timer5_Init(void):实现定时器的驱动初始化功能
代码32行:打开定时器
代码36行:启动定时器
代码39行:启动计数功能
函数:void HC_SR04_Init ( void ):实现HC_SR04模块初始化功能,该函数可以被外部其他函数调用
代码48行: 代码IO外部中断aima
代码52行:打开外部中断
代码55行:调用定时器初始化函数,启动定时器,以实现计算脉冲宽度功能
2)触发函数和定时器回调函数
3)外部中断回调函数
代码90行:启动定时器,开始计数
代码94行:停止定时器
代码95行:计算距离数据
源代码文件如下:
/*FILE NAME : sht2x.cDescription: user sht20 interface Author : tangmingfei2013@126.comDate : 2024/06/03*/
#include "hal_data.h"
#include "hc_sr04.h"#define timeDelayUS(us) R_BSP_SoftwareDelay(us, BSP_DELAY_UNITS_MICROSECONDS);#define ICU_IRQN_PIN BSP_IO_PORT_07_PIN_09
#define ICU_IRQN 10#define TRIG BSP_IO_PORT_07_PIN_10#define TRIG_H R_IOPORT_PinWrite(&g_ioport_ctrl, TRIG, BSP_IO_LEVEL_HIGH)
#define TRIG_L R_IOPORT_PinWrite(&g_ioport_ctrl, TRIG, BSP_IO_LEVEL_LOW)static bool bl_trigger = false;
static uint32_t tick_cnt_1us;
static int state =0;static float distance;static void timer5_Init(void)
{fsp_err_t err = FSP_SUCCESS;/* Initializes the module. */err = R_AGT_Open(&g_timer5_ctrl, &g_timer5_cfg);/* Handle any errors. This function should be defined by the user. */assert(FSP_SUCCESS == err);/* Start the timer. */err = R_AGT_Start(&g_timer5_ctrl);assert(FSP_SUCCESS == err);err = R_AGT_Enable(&g_timer5_ctrl);assert(FSP_SUCCESS == err);
}void HC_SR04_Init ( void )
{/* Configure the external interrupt. */fsp_err_t err = R_ICU_ExternalIrqOpen(&g_external_irq10_ctrl, &g_external_irq10_cfg);assert(FSP_SUCCESS == err);/* Enable the external interrupt. *//* Enable not required when used with ELC or DMAC. */err = R_ICU_ExternalIrqEnable(&g_external_irq10_ctrl);assert(FSP_SUCCESS == err);timer5_Init();
}void HC_SR04_Trigger( void )
{bl_trigger = true;TRIG_H;timeDelayUS(10);TRIG_L;state = 0;
}void g_timer5_Callback (timer_callback_args_t * p_args)
{if (TIMER_EVENT_CYCLE_END == p_args->event){tick_cnt_1us++;}
}/* Called from icu_irq_isr */
void external_irq10_callback (external_irq_callback_args_t * p_args)
{fsp_err_t err = FSP_SUCCESS;(void) p_args;switch( state ){default:case 0:tick_cnt_1us = 0;state = 1;err = R_AGT_Enable(&g_timer5_ctrl);assert(FSP_SUCCESS == err);break;case 1:err = R_AGT_Disable(&g_timer5_ctrl);distance = (float)(tick_cnt_1us/5.8);state = 0;tick_cnt_1us = 0;assert(FSP_SUCCESS == err);break;}
}void debug_SR04_LOG( void )
{user_get_rtc();
}float HC_SR04_getDistance( void )
{return distance;
}/* End of this file */
4 测试
4.1 编译代码
系统硬件平台如下:
编译代码下载到板卡中运行:
4.2 验证
改变距离后,在OLED得到当前的距离数据:
相关文章:

Renesas R7FA8D1BH (Cortex®-M85) 上超声波测距模块(HC-SR04)驱动开发
目录 概述 1 软硬件 1.1 软硬件环境信息 1.2 开发板信息 1.3 调试器信息 2 硬件架构 2.1 硬件框架结构 2.2 测距模块(HC-SR04)介绍 2.2.1 HC-SR04特性 2.2.2 HC-SR04操作时序 2.2.3 计算距离 3 软件实现 3.1 FSP配置项目 3.1.1 配置IO口的外…...

短视频矩阵系统独立源码/源头开发
短视频矩阵系统独立源码/源头开发 #抖音矩阵系统源码开发 #短视频矩阵系统源码开发 #短视频seo源码开发 一、 抖音短视频seo矩阵系统源码开发,需要掌握以下技术: 网络编程:能够使用Python、Java或其他编程语言进行网络编程,比如…...

k8s部署jenkins集群,配置集群kubernetes plugin的pod模板
一、配置集群 填写k8s地址:https://kubernetes.default.svc.cluster.local 命名空间:kubernetes-plugin Jenkins地址:http://jenkins:18080 Jenkins通道:jenkins:50000 jenkins是容器别名 设置jenkinsslave的标签属性 二、…...

微软确认Word离奇Bug 命名不当会导致文件被删
微软近日确认Word应用中存在一个Bug,该漏洞可能导致用户在特定情况下错误地删除文件。该问题主要出现在文件命名过程中,如果用户在保存Word文件时采用特定的命名方式,文件可能会被移动到回收站。 根据微软支持中心的消息,如果用户…...

Vue包的安装使用
文章目录 vue介绍一、灵活易用1.渐进式框架2.简洁的语法 二、高效的响应式系统1.数据驱动2.响应式原理 三、强大的组件化开发1.组件化思想2.组件通信 四、丰富的生态系统1.插件和库2.社区支持 安装依赖删除新增文件夹components设置(1)home.vue(2)data.vue(3)zero.vue router配…...

大模型1-本地部署实现交互问答
任务 在本地部署大模型,调用大模型进行对话。 添加库: 1、Transformer Transformers 是由 Hugging Face 开发的一个开源库,广泛应用于自然语言处理(NLP)任务。其主要功能是简化了对大型预训练语言模型的加载和使用…...

鸿蒙架构-系统架构师(七十八)
1信息加密是保证系统机密性的常用手段。使用哈希校验是保证数据完整性的常用方法。可用性保证合法用户对资源的正常访问,不会被不正当的拒绝。()就是破坏系统的可用性。 A 跨站脚本攻击XSS B 拒绝服务攻击DoS C 跨站请求伪造攻击CSRF D 缓…...

大数据存储计算平台EasyMR:多集群统一管理助力企业高效运维
随着全球企业进入数字化转型的快车道,数据已成为企业运营、决策和增长的核心驱动力。为了处理海量数据,同时应对数据处理的复杂性和确保系统的高可用性,企业往往选择部署多个Hadoop集群,这样的策略可以将生产环境、测试环境和灾备…...

代理IP的类型及其在爬虫中的应用
1 动态住宅代理 这些IP地址来自真实的住宅用户,因此具有很高的匿名性和隐私性,不易被别为代理IP。而增加了爬虫任务的安全性。这类代理有以下特点: 高安全性:使用这类代理可发起真实有效的请求,提高爬虫效率的同时&am…...

鸿蒙Swiper动态加载翻页数据(等同于安卓动态加载viewPager)
我这里是加载一个实体类列表 类似 List 的数据,那么首先写一个dataSource: export class MyDataSource implements IDataSource {private list: MyBean[] []constructor(list: MyBean[]) {this.list list}totalCount(): number {return this.list.len…...

嵌入式面试——FreeRTOS篇(八) Tickless低功耗
本篇为:FreeRTOS Tickless 低功耗模式篇 一、低功耗模式简介 1、低功耗介绍 答: 很多应用场合对于功耗的要求很严格,比如可穿戴低功耗产品、物联网低功耗产品等;一般MCU都有相应的低功耗模式,裸机开发时可以使用MCU的…...

基于facefusion的换脸
FaceFusion是一个引人注目的开源项目,它专注于利用深度学习技术实现视频或图片中的面部替换。作为下一代换脸器和增强器,FaceFusion在人脸识别和合成技术方面取得了革命性的突破,为用户提供了前所未有的视觉体验。 安装 安装基础软件 安装…...

Hive数仓操作(十三)
一、JSON 数据 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,在不同的编程语言之间进行数据传输时非常通用和常用。JSON 格式简单直观,易于阅读和编写,并且可以被大多数编程语言轻松解析和生成。 1.…...

MyBatis XML映射文件
XML映射文件 XML映射文件的名称与Mapper接口名称一致,并且将XML映射文件和Mapper接口放置在相同包下(同包同名)XML映射文件的namespace属性为Mapper接口全限定名一致XML映射文件中SQL语句的id与Mapper接口中的方法名一致,并保持返…...

「PYTHON」配置支持cuda计算的torch环境
本教程用于配置可支持cuda加速计算的torch环境 如果单纯使用命令行的pip安装torch,几乎都是cpu版本的,所以想要下载支持cuda的torch,我们只能通过手动下载安装包到本地,再使用pip从下载好的本地文件离线安装 而要想使用cuda加速…...

Chromium 中chrome.history扩展接口c++实现
一、前端 chrome.history定义 使用 chrome.history API 与浏览器的已访问网页的记录进行交互。您可以在浏览器的历史记录中添加、移除和查询网址。如需使用您自己的版本替换历史记录页面,请参阅覆盖网页。 更多参考:chrome.history | API | Chrome…...

(Linux和数据库)1.Linux操作系统和常用命令
了解Linux操作系统介绍 除了办公和玩游戏之外不用Linux,其他地方都要使用Linux(it相关) iOS的本质是unix(unix是付费版本的操作系统) unix和Linux之间很相似 Linux文件系统和目录 bin目录--放工具使用的 操作Linux远程…...

Linux——echo-tail-重定向符
echo命令 类似printf 输出 反引号 重定向符 > 和 >> > 覆盖 >> 追加 tail命令 查看文件尾部内容,追踪文件最新更改 tail -num 从尾部往上读num行,默认10行 tail -f 持续跟踪...

GitHub Copilot 使用手册(一)--配置
一、 什么是GitHub Copilot GitHub Copilot 是GitHub和OpenAI合作开发的一个人工智能工具,在使用Visual Studio Code、Microsoft Visual Studio、Vim、Cursor或JetBrains等IDE时可以协助用户编写代码等工作,实现虚拟的结对编程。 二、 GitHub Copilot …...

【论文阅读】Cross Attention Network for Few-shot Classification
用于小样本分类的交叉注意力网络 引用:Hou, Ruibing, et al. “Cross attention network for few-shot classification.” Advances in neural information processing systems 32 (2019). 论文地址:下载地址 论文代码:https://github.com/bl…...

CV图像处理小工具——json文件转P格式mask
CV图像处理小工具——json文件转P格式mask import cv2 import json import numpy as np import osdef func(file_path: str) -> np.ndarray:try:with open(file_path, moder, encoding"utf-8") as f:configs json.load(f)# 检查JSON是否包含必要的字段if "…...

Typora 快捷键操作大全
Typora 是一款简洁的 Markdown 编辑器,它提供了一些快捷键来帮助用户更高效地编辑文档。以下是一些常用的 Typora 快捷键,这些快捷键可能会根据操作系统有所不同(Windows 和 macOS): 常用格式化快捷键 加粗ÿ…...

<Project-8.1.1 pdf2tx-mm> Python 调用 ChatGPT API 翻译PDF内容 历程心得
原因 用ZhipuAI,测试用的PDF里,有国名西部省穆斯林,翻译结果返回 “系统检测到输入或生成内容可能包含不安全或敏感内容,请您避免输入易产生敏感内容的提 示语,感谢您的配合” 。想过先替换掉省名、民族名等ÿ…...

JDK1.1主要特性
JDK 1.1,也被称为Java Development Kit 1.1,是Java编程语言的第一个更新版本,由Sun Microsystems公司在1997年发布。JDK 1.1在JDK 1.0的基础上进行了许多重要的改进和扩展,进一步巩固了Java作为一种强大、安全的编程语言和平台的地…...

软件测试工作中-商城类项目所遇bug点
商城的 bug 1、跨设备同步问题 当用户在不同设备上使用同一个账户时,购物车数据无法正确同步这可能是由于购物车数据存储和同步机制不完善,导致购物车内容在设备之间无法实时更新。怎么解决:开发把同步机制代码修改了一下,就不会出现这个 bug 了。 2、数…...

Java多线程面试题
1.进程和线程的区别 程序由指令和数据组成,但这些指令要运行,数据要读写,就必须将指令加载至 CPU中,数据加载至内存。在指令运行过程中还需要用到磁盘、网络等设备。进程就是用来加载指令、管理内存、管理 IO 的。 当一个程序被运…...

安徽大学《2022年+2023年831自动控制原理真题》 (完整版)
本文内容,全部选自自动化考研联盟的:《安徽大学831自控考研资料》的真题篇。后续会持续更新更多学校,更多年份的真题,记得关注哦~ 目录 2022年真题 2023年真题 Part1:2022年2023年完整版真题 2022年真题 2023年真题…...

Vulnhub靶场案例渗透[6]- DC6
文章目录 1. 靶场搭建2. 信息收集2.1 确定靶机ip2.2 主机信息收集2.3 主机目录扫描2.4 网站用户名和密码爆破 3. 反弹shell4. 提权 1. 靶场搭建 靶场源地址 检验下载文件的检验码,对比没问题使用vmware打开 # windwos 命令 Get-FileHash <filePath> -Algori…...

FreeSWITCH 分机网关路由
不废话了,直接贴代码: --[[作用:分机网关呼叫第一个参数: 分机号码第二个参数: 被叫号码第三个参数: 主叫号码使用例子:<extension name"usergw"><condition><action applicatio…...

数据交换的金钟罩:合理利用安全数据交换系统,确保信息安全
政府单位为了保护网络不受外部威胁和内部误操作的影响,通常会进行网络隔离,隔离成内网和外网。安全数据交换系统是专门设计用于在不同的网络环境(如内部不同网络,内部网络和外部网络)之间安全传输数据的解决方案。 使用…...