当前位置: 首页 > news >正文

【嵌入式硬件芯片开发笔记】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
开始运行

  1. 检测HART_VDD,至少大于2.7V
  2. 引脚HART_CLK_CFG初始时为低电平,拉高后CLKOUT输出1.2288MHz,用定时器进行捕获,计算频率是否达标
  3. 最后开启调制或解调
    初始化
  4. 使能CFG引脚,进行时钟检测
  5. 采用定时器捕获的方式计算频率(计算速度不够则可能算不准)
  6. 关闭CFG引脚
  7. 解调模式接收数据
  8. 当串口接收中断发生时,解析命令并切换调制模式,返回数据

代码例程

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接地&#xff0c;CLK_CFG的两个引脚由同一个GPIO控制 初始时HART_CLK_CFG输出低电平 由RTS引脚控制调制/解调。当RTS处于高电平时&#xff0c;为解调&#xff08;输入&#xff09;&#xff1b;否则为调…...

Go语言异步下载视频

异步下载mp4视频列表 下面是一个简单的Go语言示例&#xff0c;用于异步下载视频。我们将使用goroutines来实现异步下载&#xff0c;并使用sync.WaitGroup来等待所有下载任务完成。此示例依赖于net/http包来执行HTTP请求。 package mainimport ("fmt""io"…...

前缀树(字典树/Trie) -----Java实现

目录 一.前缀树 1.什么是前缀树 2.前缀树的举例 二.前缀树的实现 1.前缀树的数据结构 1.插入字符串 2.查找字符串 3.查找前缀 三.词典中最长的单词 1.题目描述 2.问题分析 3.代码实现 一.前缀树 1.什么是前缀树 字典树&#xff08;Trie树&#xff09;是一种树形…...

​申请专利需要具备什么条件

​申请专利需要具备什么条件 在我国&#xff0c;如果创造出来了新的发明都可以申请专利权&#xff0c;一旦申请成功之后&#xff0c;自己的发明就受到了法律的保护&#xff0c;任何人不得以违法的手段进行侵犯。那么申请专利需要具备什么条件&#xff1f;今天律赢时代网就为大家…...

【C++】一篇带你搞懂C++“引用”

前言在C语言的学习中&#xff0c;并没有引用这个概念&#xff0c;但是在C中&#xff0c;加入了引用这个概念&#xff0c;说明引用也是很重要的&#xff0c;但是我们怎么理解引用呢&#xff1f;我是这么理解的&#xff0c;例如在水浒传中&#xff0c;108个英雄好汉都是自己的外号…...

蓝桥杯刷题冲刺 | 倒计时19天

作者&#xff1a;指针不指南吗 专栏&#xff1a;蓝桥杯倒计时冲刺 &#x1f43e;马上就要蓝桥杯了&#xff0c;最后的这几天尤为重要&#xff0c;不可懈怠哦&#x1f43e; 文章目录1.抓住那头牛2.排列序数1.抓住那头牛 题目 链接&#xff1a; 抓住那头牛 - C语言网 (dotcpp.com…...

Java每日一练(20230321)

目录 1. 出现次数最多的字符 &#x1f31f; 2. 最后一个单词的长度 &#x1f31f; 3. 两数之和 &#x1f31f; &#x1f31f; 每日一练刷题专栏 &#x1f31f; Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每日一练 专栏 1. 出现次数最多的字符并…...

【三维几何学习】从零开始网格上的深度学习-3:Transformer篇(Pytorch)

本文参加新星计划人工智能(Pytorch)赛道&#xff1a;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]时使用&#xff1a; int b…...

Spring 源码解析 - Bean创建过程 以及 解决循环依赖

一、Spring Bean创建过程以及循环依赖 上篇文章对 Spring Bean资源的加载注册过程进行了源码梳理和解析&#xff0c;我们可以得到结论&#xff0c;资源文件中的 bean 定义信息&#xff0c;被组装成了 BeanDefinition 存放进了 beanDefinitionMap 容器中&#xff0c;那 Bean 是…...

移除元素(双指针)

给你一个数组 nums 和一个值 val&#xff0c;你需要 原地 移除所有数值等于 val 的元素&#xff0c;并返回移除后数组的新长度。 不要使用额外的数组空间&#xff0c;你必须仅使用 O(1) 额外空间并原地修改输入数组。 元素的顺序可以改变。你不需要考虑数组中超出新长度后面的…...

76.qt qml-QianWindow开源炫酷界面框架(支持白色暗黑渐变自定义控件均以适配)

界面介绍界面支持: 透明 白色 黑色 渐变 单色 静态图 动态图侧边栏支持:抽屉、带折叠、多模式场景控件已集成: 暗黑风格 高亮风格、并附带个人自定义控件及开源demo白色场景如下所示:单色暗黑风格如下所示:用户自定义皮肤如下所示:皮肤预览如下所示:b站入口:https://www.bilibi…...

Python生日蛋糕

目录 前言 底盘 蛋糕 蜡烛 祝福 前言 Hello&#xff0c;小伙伴们晚上好吖&#xff01;前两天博主满20岁啦&#xff08;要开始奔三辽呜呜呜&#xff09;&#xff0c;这几天收到了不少小伙伴们的祝福&#xff0c;浪漫的小博主想送给大家一份不一样的生日蛋糕&#xff0c…...

QT 如何提高 Qt Creator 的编译速度

如何提高编译速度&#xff0c;貌似是一个老生常谈的话题。对于Qter而言&#xff0c;如何提高QT Creator 的编辑速度是一直都是大家所期盼的。本文也是查阅了各路大神的方法后整理出来的&#xff0c;希望对各位有所帮助。 1、在*.pro文件添加预编译机制 QT官方给出的示例&…...

STM32之震动传感器、继电器介绍及实战

目录 一、震动传感器介绍及实战 二、编程代码实现 1、gpio.c---------初始化GPIO口引脚函数 2、调用中断服务函数 3、中断服务函数 4、中断服务回调函数 5、把上述的中断服务回调函数&#xff0c;放入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 题&#xff1a;排列字母 问题描述 运行限制 代码&#xff1a; 第 2 题&#xff1a;GCD_数论 问题描述 输入格式 输出格式 样例输入 样例输出 评测用例规模与约定 运行限制 第 3 题&#xff1a;选数异或 第 4 题&#xff1a;背包与魔法 第 1 题&#x…...

软件测试拿了几个20K offer,分享一波面经

1、你的测试职业发展是什么? 测试经验越多&#xff0c;测试能力越高。所以我的职业发展是需要时间积累的&#xff0c;一步步向着高级测试工程师奔去。而且我也有初步的职业规划&#xff0c;前3年积累测试经验&#xff0c;按如何做好测试工程师的要点去要求自己&#xff0c;不断…...

spring2

1.Spring配置数据源1.1 数据源&#xff08;连接池&#xff09;的作用 数据源(连接池)是提高程序性能如出现的事先实例化数据源&#xff0c;初始化部分连接资源使用连接资源时从数据源中获取使用完毕后将连接资源归还给数据源常见的数据源(连接池)&#xff1a;DBCP、C3P0、BoneC…...

后进先出(LIFO)详解

LIFO 是 Last In, First Out 的缩写&#xff0c;中文译为后进先出。这是一种数据结构的工作原则&#xff0c;类似于一摞盘子或一叠书本&#xff1a; 最后放进去的元素最先出来 -想象往筒状容器里放盘子&#xff1a; &#xff08;1&#xff09;你放进的最后一个盘子&#xff08…...

基于算法竞赛的c++编程(28)结构体的进阶应用

结构体的嵌套与复杂数据组织 在C中&#xff0c;结构体可以嵌套使用&#xff0c;形成更复杂的数据结构。例如&#xff0c;可以通过嵌套结构体描述多层级数据关系&#xff1a; struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...

conda相比python好处

Conda 作为 Python 的环境和包管理工具&#xff0c;相比原生 Python 生态&#xff08;如 pip 虚拟环境&#xff09;有许多独特优势&#xff0c;尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处&#xff1a; 一、一站式环境管理&#xff1a…...

应用升级/灾备测试时使用guarantee 闪回点迅速回退

1.场景 应用要升级,当升级失败时,数据库回退到升级前. 要测试系统,测试完成后,数据库要回退到测试前。 相对于RMAN恢复需要很长时间&#xff0c; 数据库闪回只需要几分钟。 2.技术实现 数据库设置 2个db_recovery参数 创建guarantee闪回点&#xff0c;不需要开启数据库闪回。…...

macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用

文章目录 问题现象问题原因解决办法 问题现象 macOS启动台&#xff08;Launchpad&#xff09;多出来了&#xff1a;Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显&#xff0c;都是Google家的办公全家桶。这些应用并不是通过独立安装的…...

Rapidio门铃消息FIFO溢出机制

关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系&#xff0c;以下是深入解析&#xff1a; 门铃FIFO溢出的本质 在RapidIO系统中&#xff0c;门铃消息FIFO是硬件控制器内部的缓冲区&#xff0c;用于临时存储接收到的门铃消息&#xff08;Doorbell Message&#xff09;。…...

深度学习习题2

1.如果增加神经网络的宽度&#xff0c;精确度会增加到一个特定阈值后&#xff0c;便开始降低。造成这一现象的可能原因是什么&#xff1f; A、即使增加卷积核的数量&#xff0c;只有少部分的核会被用作预测 B、当卷积核数量增加时&#xff0c;神经网络的预测能力会降低 C、当卷…...

python打卡第47天

昨天代码中注意力热图的部分顺移至今天 知识点回顾&#xff1a; 热力图 作业&#xff1a;对比不同卷积层热图可视化的结果 def visualize_attention_map(model, test_loader, device, class_names, num_samples3):"""可视化模型的注意力热力图&#xff0c;展示模…...

GC1808:高性能音频ADC的卓越之选

在音频处理领域&#xff0c;高质量的音频模数转换器&#xff08;ADC&#xff09;是实现精准音频数字化的关键。GC1808&#xff0c;一款96kHz、24bit立体声音频ADC&#xff0c;以其卓越的性能和高性价比脱颖而出&#xff0c;成为众多音频设备制造商的理想选择。 GC1808集成了64倍…...

【学习记录】使用 Kali Linux 与 Hashcat 进行 WiFi 安全分析:合法的安全测试指南

文章目录 &#x1f4cc; 前言&#x1f9f0; 一、前期准备✅ 安装 Kali Linux✅ 获取支持监听模式的无线网卡 &#x1f6e0; 二、使用 Kali Linux 进行 WiFi 安全测试步骤 1&#xff1a;插入无线网卡并确认识别步骤 2&#xff1a;开启监听模式步骤 3&#xff1a;扫描附近的 WiFi…...