【嵌入式硬件芯片开发笔记】HART协议调制解调芯片AD5700配置流程
【嵌入式硬件芯片开发笔记】HART协议调制解调芯片AD5700配置流程

XTAL_EN接地,CLK_CFG的两个引脚由同一个GPIO控制
初始时HART_CLK_CFG输出低电平
由RTS引脚控制调制/解调。当RTS处于高电平时,为解调(输入);否则为调制(输出)。切换时,延时1ms
HART协议部分,符合HART物理层要求(修订版8.1)。
一个标准UART帧,该帧包含一个起始位、8位数据、一个奇偶校验和一个停止位
UART:1200波特率 1停止位 无校验 数据长度8
开始运行
- 检测HART_VDD,至少大于2.7V
- 引脚HART_CLK_CFG初始时为低电平,拉高后CLKOUT输出1.2288MHz,用定时器进行捕获,计算频率是否达标
- 最后开启调制或解调
初始化 - 使能CFG引脚,进行时钟检测
- 采用定时器捕获的方式计算频率(计算速度不够则可能算不准)
- 关闭CFG引脚
- 解调模式接收数据
- 当串口接收中断发生时,解析命令并切换调制模式,返回数据
代码例程
uint8_t UART4_RxBuffer[256]={0};
uint8_t UART4_RxFlag=0;


/*** @brief UART4 Initialization Function* @param None* @retval None*/
static void MX_UART4_Init(void)
{/* USER CODE BEGIN UART4_Init 0 *//* USER CODE END UART4_Init 0 *//* USER CODE BEGIN UART4_Init 1 *//* USER CODE END UART4_Init 1 */huart4.Instance = UART4;huart4.Init.BaudRate = 1200;huart4.Init.WordLength = UART_WORDLENGTH_8B;huart4.Init.StopBits = UART_STOPBITS_1;huart4.Init.Parity = UART_PARITY_NONE;huart4.Init.Mode = UART_MODE_TX_RX;huart4.Init.HwFlowCtl = UART_HWCONTROL_NONE;huart4.Init.OverSampling = UART_OVERSAMPLING_16;huart4.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;huart4.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;if (HAL_UART_Init(&huart4) != HAL_OK){Error_Handler();}/* USER CODE BEGIN UART4_Init 2 */HAL_UART_Receive_IT(&huart4,UART4_RxBuffer,1);/* USER CODE END UART4_Init 2 */}
/*!* @brief 初始化AD5421** @param None** @return None*/
void Init_AD5421(void)
{ uint16_t offset = 0;uint16_t gain = 0;Ctrl_AD5421(&hspi2,AD5421_RESET,0,true);delay_us(50);Ctrl_AD5421(&hspi2,AD5421_Control,0xFC00,true); offset = Ctrl_AD5421(&hspi2,AD5421_Offset_Adjust,0,false); gain = Ctrl_AD5421(&hspi2,AD5421_Gain_Adjust,0,false);Ctrl_AD5421_DAC(20,true,offset,gain);Ctrl_AD5421_ADC(1,true);Ctrl_AD5421_ADC(0,true);
}/*!* @brief 使能HART_CLK_OUT的定时器,用于输入捕获,上升沿捕获,4次有效** @param None** @return freq: 浮点型频率变量,单位为Hz*/
float Get_HART_CLK_Cycle(void)
{uint32_t Count=0;float freq=0;TIM3_CH2_Flag=0;TIM3_CH2_Overflow=0;TIM3_CH2_Count[0]=0;TIM3_CH2_Count[1]=0; TIM_RESET_CAPTUREPOLARITY(&htim3,TIM_CHANNEL_2); __HAL_TIM_SET_CAPTUREPOLARITY(&htim3, TIM_CHANNEL_2, TIM_INPUTCHANNELPOLARITY_FALLING); HAL_TIM_Base_Start_IT(&htim3);HAL_TIM_IC_Start_IT(&htim3, TIM_CHANNEL_2);while(TIM3_CH2_Flag<2);TIM3_CH2_Flag=0;Count=TIM3_CH2_Overflow*(0xFFFF+1)+TIM3_CH2_Count[1]-TIM3_CH2_Count[0]; freq=50000000.0f/Count;TIM3_CH2_Overflow=0;TIM3_CH2_Count[0]=0;TIM3_CH2_Count[1]=0;printf("[INFO] HART_CLK: %0.4f Hz\n",freq);return freq;
}/*!* @brief 操作AD5700的HART调制/解调** @param [in] dat_buf: 要写入的数据,可以填NULL* [in] size: 要写入的数据个数,单位byte* [in] WriteNotRead: true,写入(调制),发送UART数据然后通过HART发出来* false,读取(解调),接收HART数据,解调以后以中断的方式接收UART数据** @return None*/
void Ctrl_AD5700_HART(uint8_t *dat_buf,uint8_t size,bool WriteNotRead)
{if(WriteNotRead){Disable_AD5700_RTS;delay_ms(1);HAL_UART_Transmit(&huart4,dat_buf,size,0xFFFF);}else{Enable_AD5700_RTS;delay_ms(1);HAL_UART_Receive_IT(&huart4,&UART4_RxBuffer[UART4_RxFlag],1); //开启中断 填入的buf最好是HART专用的数据buf 全局变量 然后在回调里面也改成HART的buf}
}/*!* @brief 初始化AD5700** @param None** @return None*/
void Init_AD5700(void)
{//ADC检测 Enable_HART_CLK_CFG;
// //时钟检测
// Get_HART_CLK_Cycle();// Disable_HART_CLK_CFG;Ctrl_AD5700_HART(NULL,0,false);
}
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{if(huart==&huart2){ HAL_UART_Transmit(&huart2,&RxBuffer,1,0xFFFF);HAL_UART_Receive_IT(&huart2,&RxBuffer,1);}else if(huart==&huart3){ HAL_UART_Transmit(&huart3,&RxBuffer,1,0xFFFF);HAL_UART_Receive_IT(&huart3,&RxBuffer,1);}else if(huart==&huart4){
// HAL_UART_Transmit(&huart4,&UART4_RxBuffer[UART4_RxFlag],1,0xFFFF);UART4_RxFlag++;HAL_UART_Receive_IT(&huart4,&UART4_RxBuffer[UART4_RxFlag],1);}else if(huart==&huart5){ HAL_UART_Transmit(&huart5,&RxBuffer,1,0xFFFF);if((RxBuffer>>5)==6){load_dac=(RxBuffer&0x1F);}HAL_UART_Receive_IT(&huart5,&RxBuffer,1);}
}相关文章:
【嵌入式硬件芯片开发笔记】HART协议调制解调芯片AD5700配置流程
【嵌入式硬件芯片开发笔记】HART协议调制解调芯片AD5700配置流程 XTAL_EN接地,CLK_CFG的两个引脚由同一个GPIO控制 初始时HART_CLK_CFG输出低电平 由RTS引脚控制调制/解调。当RTS处于高电平时,为解调(输入);否则为调…...
Go语言异步下载视频
异步下载mp4视频列表 下面是一个简单的Go语言示例,用于异步下载视频。我们将使用goroutines来实现异步下载,并使用sync.WaitGroup来等待所有下载任务完成。此示例依赖于net/http包来执行HTTP请求。 package mainimport ("fmt""io"…...
前缀树(字典树/Trie) -----Java实现
目录 一.前缀树 1.什么是前缀树 2.前缀树的举例 二.前缀树的实现 1.前缀树的数据结构 1.插入字符串 2.查找字符串 3.查找前缀 三.词典中最长的单词 1.题目描述 2.问题分析 3.代码实现 一.前缀树 1.什么是前缀树 字典树(Trie树)是一种树形…...
申请专利需要具备什么条件
申请专利需要具备什么条件 在我国,如果创造出来了新的发明都可以申请专利权,一旦申请成功之后,自己的发明就受到了法律的保护,任何人不得以违法的手段进行侵犯。那么申请专利需要具备什么条件?今天律赢时代网就为大家…...
【C++】一篇带你搞懂C++“引用”
前言在C语言的学习中,并没有引用这个概念,但是在C中,加入了引用这个概念,说明引用也是很重要的,但是我们怎么理解引用呢?我是这么理解的,例如在水浒传中,108个英雄好汉都是自己的外号…...
蓝桥杯刷题冲刺 | 倒计时19天
作者:指针不指南吗 专栏:蓝桥杯倒计时冲刺 🐾马上就要蓝桥杯了,最后的这几天尤为重要,不可懈怠哦🐾 文章目录1.抓住那头牛2.排列序数1.抓住那头牛 题目 链接: 抓住那头牛 - C语言网 (dotcpp.com…...
Java每日一练(20230321)
目录 1. 出现次数最多的字符 🌟 2. 最后一个单词的长度 🌟 3. 两数之和 🌟 🌟 每日一练刷题专栏 🌟 Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每日一练 专栏 1. 出现次数最多的字符并…...
【三维几何学习】从零开始网格上的深度学习-3:Transformer篇(Pytorch)
本文参加新星计划人工智能(Pytorch)赛道:https://bbs.csdn.net/topics/613989052 从零开始网格上的深度学习-3:Transformer篇引言一、概述二、核心代码2.1 位置编码2.2 网络框架三、基于Transformer的网格分类3.1 分类结果3.2 全部代码引言 本文主要内容如下&#…...
一、基础算法3:二分 模板题+算法模板(数的范围,数的三次方根)
文章目录算法模板整数二分算法模板浮点数二分算法模板模板题数的范围原题链接题目题解数的三次方根原题链接题目题解算法模板 整数二分算法模板 bool check(int x) {/* ... */} // 检查x是否满足某种性质// 区间[l, r]被划分成[l, mid]和[mid 1, r]时使用: int b…...
Spring 源码解析 - Bean创建过程 以及 解决循环依赖
一、Spring Bean创建过程以及循环依赖 上篇文章对 Spring Bean资源的加载注册过程进行了源码梳理和解析,我们可以得到结论,资源文件中的 bean 定义信息,被组装成了 BeanDefinition 存放进了 beanDefinitionMap 容器中,那 Bean 是…...
移除元素(双指针)
给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。 不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并原地修改输入数组。 元素的顺序可以改变。你不需要考虑数组中超出新长度后面的…...
76.qt qml-QianWindow开源炫酷界面框架(支持白色暗黑渐变自定义控件均以适配)
界面介绍界面支持: 透明 白色 黑色 渐变 单色 静态图 动态图侧边栏支持:抽屉、带折叠、多模式场景控件已集成: 暗黑风格 高亮风格、并附带个人自定义控件及开源demo白色场景如下所示:单色暗黑风格如下所示:用户自定义皮肤如下所示:皮肤预览如下所示:b站入口:https://www.bilibi…...
Python生日蛋糕
目录 前言 底盘 蛋糕 蜡烛 祝福 前言 Hello,小伙伴们晚上好吖!前两天博主满20岁啦(要开始奔三辽呜呜呜),这几天收到了不少小伙伴们的祝福,浪漫的小博主想送给大家一份不一样的生日蛋糕,…...
QT 如何提高 Qt Creator 的编译速度
如何提高编译速度,貌似是一个老生常谈的话题。对于Qter而言,如何提高QT Creator 的编辑速度是一直都是大家所期盼的。本文也是查阅了各路大神的方法后整理出来的,希望对各位有所帮助。 1、在*.pro文件添加预编译机制 QT官方给出的示例&…...
STM32之震动传感器、继电器介绍及实战
目录 一、震动传感器介绍及实战 二、编程代码实现 1、gpio.c---------初始化GPIO口引脚函数 2、调用中断服务函数 3、中断服务函数 4、中断服务回调函数 5、把上述的中断服务回调函数,放入main主函数里 6、结果演示 三、继电器介绍及实战 一、震动传感器介…...
RK3588平台开发系列讲解(显示篇)RK3588 平台 的DP介绍
平台内核版本安卓版本RK3588Linux 5.10Android 12文章目录 一、功能特性二、 DP 输⼊三、DP 输出四、 代码路径沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇将介绍 RK3588 平台 DP 的使⽤与调试⽅法。 一、功能特性 RK3588 的 DP ⽀持 1.4a 版本的 DP 协议,最…...
【Java】i++和++i的实现原理
文章目录 i++案例反编译分析扩展 x = x++我们接下来从字节码层面分析: 不了解字节码的可以参考这篇:【精通JVM】字节码指令全解 i++案例 package org.example;public class Main {public static void main...
第十四届蓝桥杯三月真题刷题训练——第 18 天
目录 第 1 题:排列字母 问题描述 运行限制 代码: 第 2 题:GCD_数论 问题描述 输入格式 输出格式 样例输入 样例输出 评测用例规模与约定 运行限制 第 3 题:选数异或 第 4 题:背包与魔法 第 1 题&#x…...
软件测试拿了几个20K offer,分享一波面经
1、你的测试职业发展是什么? 测试经验越多,测试能力越高。所以我的职业发展是需要时间积累的,一步步向着高级测试工程师奔去。而且我也有初步的职业规划,前3年积累测试经验,按如何做好测试工程师的要点去要求自己,不断…...
spring2
1.Spring配置数据源1.1 数据源(连接池)的作用 数据源(连接池)是提高程序性能如出现的事先实例化数据源,初始化部分连接资源使用连接资源时从数据源中获取使用完毕后将连接资源归还给数据源常见的数据源(连接池):DBCP、C3P0、BoneC…...
智能车越野组硬件拆解:我们如何用CYT4BB7核心板与四硅麦矩阵搞定声音信标定位?
智能车越野组硬件拆解:四硅麦矩阵与CYT4BB7核心板的声学定位实战 全国大学生智能车竞赛越野组的硬件设计,本质上是一场关于精度、效率和可靠性的极限挑战。当其他队伍还在为三硅麦方案的布线发愁时,我们已经用四硅麦矩阵将声音信标定位误差控…...
提升社区运营效率:用快马ai为openclaw网站快速生成搜索与数据看板模块
提升社区运营效率:用快马AI为OpenClaw网站快速生成搜索与数据看板模块 维护一个活跃的开源技术社区网站,比如OpenClaw中文社区,经常需要根据用户反馈快速迭代功能。最近我们社区就遇到了两个需求:一是现有的搜索功能太简单&#…...
ImageGlass:轻量级全能图像查看器的效率革命
ImageGlass:轻量级全能图像查看器的效率革命 【免费下载链接】ImageGlass 🏞 A lightweight, versatile image viewer 项目地址: https://gitcode.com/gh_mirrors/im/ImageGlass 价值定位:重新定义图像浏览体验 在数字内容爆炸的时代…...
FGA智能自动战斗全攻略:解放双手,高效玩转F/GO
FGA智能自动战斗全攻略:解放双手,高效玩转F/GO 【免费下载链接】FGA FGA - Fate/Grand Automata,一个为F/GO游戏设计的自动战斗应用程序,使用图像识别和自动化点击来辅助游戏,适合对游戏辅助开发和自动化脚本感兴趣的程…...
扩散模型之(十八)ControlNet 原理与指南
概述在当今瞬息万变的科技环境中,如何在人类创造力和机器精确性之间取得平衡变得日益重要。而这正是我们ControlNet发挥作用的地方——它如同“引导之手”,为基于扩散的文本到图像合成模型提供指导,从而解决传统图像生成模型中常见的局限性。…...
AI教材写作新趋势,低查重助力高效教材编写!
编写痛点与AI解法 整理教材的知识点简直就是一项“精细的工作”,其难点在于如何保持平衡与衔接性!要么令人担忧的是核心知识点的遗漏,要么把握不好难度的层次——小学教材往往深奥,让学生难以理解;高中教材却又过于浅…...
三步解决Windows 11卡顿难题:开源工具Win11Debloat让系统效率提升3倍
三步解决Windows 11卡顿难题:开源工具Win11Debloat让系统效率提升3倍 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to de…...
电价狂降、负值频现!2026电力现货市场惊变,出清电价底层逻辑全拆解
当“0电价”甚至“负电价”成为常态,电力行业的盈利逻辑正在被彻底颠覆。2026年的春天,电力行业迎来了一场前所未有的“地震”。就在刚刚过去的一季度,辽宁电力现货市场全天均价首次跌入负值区间,1月1日至25日短短25天内ÿ…...
保姆级教程:用PHPStudy+红日靶场复现一次完整的内网渗透(从外网打到域控)
从零构建内网渗透实战:PHPStudy环境下的红日靶场攻防演练 在网络安全领域,内网渗透测试是检验企业防御体系完整性的重要手段。本文将带领读者使用常见的PHPStudy环境搭建红日靶场,通过模拟真实攻击路径,从外网Web渗透逐步深入内网…...
新手入门DetectionLab:10个步骤掌握企业网络安全检测基础
新手入门DetectionLab:10个步骤掌握企业网络安全检测基础 【免费下载链接】DetectionLab clong/DetectionLab: DetectionLab是一个开源项目,旨在建立一个高度可配置的虚拟环境以模拟企业网络,用于检测恶意活动、演练入侵检测系统(…...
