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

【单片机基础】使用51单片机制作函数信号发生器(DAC0832使用仿真)

文章目录

  • (1)DA转换
  • (2)DAC0832简介
  • (3)电路设计
  • (4)参考例程
  • (5)参考文献

(1)DA转换

单片机作为一个数字电路系统,当需要采集外界模拟量的使用需要进行AD转换,将模拟量转换成数字量,供单片机使用。51单片机需要外部配置一个AD转换芯片来进行模拟量的采集,如我之前写了一篇ADC0832的使用。高级的单片机如STC12和STM32已经集成了AD转换功能,只需简单配置一下,便可以采集到AD转换后的数据。

AD转换(Analog to Digital)是模拟量转换数字量,那么DA转换(Digital to Analog)便是数字量转换成模拟量。
在这里插入图片描述
使用DAC0832进行数字到模拟的转换,再使用定时器控制输出波形的频率便可以制作一个函数信号发生器。

(2)DAC0832简介

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
CS:低电平有效,片选输入线
WR1:低电平大于500ms有效,输入锁存器
WR2:高电平有效,与XFER结合可将输入锁存器的8位数据传输到DAC寄存器中
XFER:低电平有效,数据传输控制输入线
DI0~DI7:8位数据位并行输入,有效时间大于90ns有效
VCC:电源输入5V-15V
VERF:基准电压输入线-10V~10V
RFB:反馈信号输入,可以看成一个反馈监测
IOUT1:电流输出1,其值随着输入线性变化
IOUT2:电流输出2,与OUT1值之和为一个常数

(3)电路设计

单片机最小系统
在这里插入图片描述
波形切换控制
在这里插入图片描述
(这里由于博主时间有限,例程代码的LED显示功能就没有写了)
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(4)参考例程

#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int#define DI	P0											//8位数据输入线//sbit sine_wave_LED1					= P1^0;	//正弦波指示灯
//sbit square_wave_LED2 			= P1^1;	//方波指示灯
//sbit triangular_wave_LED3 	= P1^2;	//三角波指示灯
//sbit sawtooth_wave_LED4			= P1^3;	//锯齿波指示灯
sbit change_wave_Key				= P1^4;	//更换波形uint freq = 3906;										//定时数值×16^(-6)×256 = 波形频率 例程使用1KHZ
uint number=1,n=0,THHL,i;//正弦波段码
unsigned code sin[256]={   0x80,0x83,0x85,0x88,0x8A,0x8D,0x8F,0x92,   0x94,0x97,0x99,0x9B,0x9E,0xA0,0xA3,0xA5,   0xA7,0xAA,0xAC,0xAE,0xB1,0xB3,0xB5,0xB7,   0xB9,0xBB,0xBD,0xBF,0xC1,0xC3,0xC5,0xC7,   0xC9,0xCB,0xCC,0xCE,0xD0,0xD1,0xD3,0xD4,   0xD6,0xD7,0xD8,0xDA,0xDB,0xDC,0xDD,0xDE,   0xDF,0xE0,0xE1,0xE2,0xE3,0xE3,0xE4,0xE4,   0xE5,0xE5,0xE6,0xE6,0xE7,0xE7,0xE7,0xE7,   0xE7,0xE7,0xE7,0xE7,0xE6,0xE6,0xE5,0xE5,   0xE4,0xE4,0xE3,0xE3,0xE2,0xE1,0xE0,0xDF,   0xDE,0xDD,0xDC,0xDB,0xDA,0xD8,0xD7,0xD6,   0xD4,0xD3,0xD1,0xD0,0xCE,0xCC,0xCB,0xC9,   0xC7,0xC5,0xC3,0xC1,0xBF,0xBD,0xBB,0xB9,   0xB7,0xB5,0xB3,0xB1,0xAE,0xAC,0xAA,0xA7,   0xA5,0xA3,0xA0,0x9E,0x9B,0x99,0x97,0x94,   0x92,0x8F,0x8D,0x8A,0x88,0x85,0x83,0x80,   0x7D,0x7B,0x78,0x76,0x73,0x71,0x6E,0x6C,   0x69,0x67,0x65,0x62,0x60,0x5D,0x5B,0x59,   0x56,0x54,0x52,0x4F,0x4D,0x4B,0x49,0x47,   0x45,0x43,0x41,0x3F,0x3D,0x3B,0x39,0x37,   0x35,0x34,0x32,0x30,0x2E,0x2D,0x2C,0x2A,   0x29,0x28,0x26,0x25,0x24,0x23,0x22,0x21,   0x20,0x1F,0x1E,0x1D,0x1D,0x1C,0x1C,0x1B,   0x1B,0x1A,0x1A,0x1A,0x19,0x19,0x19,0x19,   0x19,0x19,0x19,0x19,0x1A,0x1A,0x1A,0x1B,   0x1B,0x1C,0x1C,0x1D,0x1D,0x1E,0x1F,0x20,   0x21,0x22,0x23,0x24,0x25,0x26,0x28,0x29,   0x2A,0x2C,0x2D,0x2F,0x30,0x32,0x34,0x35,   0x37,0x39,0x3B,0x3D,0x3F,0x41,0x43,0x45,   0x47,0x49,0x4B,0x4D,0x4F,0x52,0x54,0x56,   0x59,0x5B,0x5D,0x60,0x62,0x65,0x67,0x69,   0x6C,0x6E,0x71,0x73,0x76,0x78,0x7B,0x7D   };   
//三角波段码
unsigned code thr[256]={      0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,   0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,   0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,   0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F,   0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,   0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,   0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF,   0xBF,0xBE,0xBD,0xBC,0xBB,0xBA,0xB9,0xB8,   0xB7,0xB6,0xB5,0xB4,0xB3,0xB2,0xB1,0xB0,0xAF,0xAE,0xAD,0xAC,0xAB,0xAA,0xA9,0xA8,   0xA7,0xA6,0xA5,0xA4,0xA3,0xA2,0xA1,0xA0,   0x9F,0x9E,0x9D,0x9C,0x9B,0x9A,0x99,0x98,   0x97,0x96,0x95,0x94,0x93,0x92,0x91,0x90,   0x8F,0x8E,0x8D,0x8C,0x8B,0x8A,0x89,0x88,   0x87,0x86,0x85,0x84,0x83,0x82,0x81,0x80,   0x7F,0x7E,0x7D,0x7C,0x7B,0x7A,0x79,0x78,   0x77,0x76,0x75,0x74,0x73,0x72,0x71,0x70,   0x6F,0x6E,0x6D,0x6C,0x6B,0x6A,0x69,0x68,   0x67,0x66,0x65,0x64,0x63,0x62,0x61,0x60,   0x5F,0x5E,0x5D,0x5C,0x5B,0x5A,0x59,0x58,   0x57,0x56,0x55,0x54,0x53,0x52,0x51,0x50,   0x4F,0x4E,0x4D,0x4C,0x4B,0x4A,0x49,0x48,   0x47,0x46,0x45,0x44,0x43,0x42,0x41,0x40,   0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,   0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F,   0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,   0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F,   0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,   0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F,   0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,   0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F    }; //方波段码																																	 
unsigned code squ[256]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,	0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,	0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,													0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,	0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,			0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,	0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff												};//10ms延时函数
void delay_10ms(uchar i)
{//毫秒级延时函数//在12MHZ下晶振下,大约延时10ms/次uchar a,b,c;for(c = i; c > 0; --c)for(b = 129; b > 0; b--)for(a = 38; a > 0; a--);
}//定时器0初始化
void Timer0Init(void)
{unsigned int THHL;TMOD &= 0xF0;				//定时器1失效TMOD |= 0x01;				//定时器0,16位计数THHL=65536-freq;TL0 =THHL%256;			//设置定时初值TH0 =THHL/256;			//设置定时初值TF0 = 0;						//清除TF0标志TR0 = 1;						//定时器0开始计时ET0=1;							//开定时器0中断EA=1;								//开总中断PT0=0;							//定时器0中断最优
}void main()
{/*指示灯初始化,全部熄灭*/
//	triangular_wave_LED3  = 1;
//	square_wave_LED2			= 1;
//	sine_wave_LED1				= 1;Timer0Init();//初始化定时器0while(1){if(change_wave_Key == 0){delay_10ms(1);//延时消抖if(change_wave_Key == 0){while(!change_wave_Key);//松手检测number++;if(number == 5){number = 0;}}}switch(number){case 1:	{DI=sin[n]; break;}//正弦波case 2: {DI=thr[n]; break;}//三角波case 3: {for(i=0;i<256;i++){DI=squ[i];} break;}//方波case 4:	{DI=256-n; break;}//锯齿波default:{break;}}}
}//定时器0中断处理函数
void Timer0_Routine() interrupt 1
{THHL=65536-freq;TL0=THHL%256;TH0=THHL/256;  if(n>=255) {n=0;} else {n++;}   
}

电路仿真及代码例程
链接:https://share.weiyun.com/ALLrnKTu 密码:cchvph

(5)参考文献

基于51单片机的DAC0832波形发生器

由于作者水平有限,如有错误望指摘。

相关文章:

【单片机基础】使用51单片机制作函数信号发生器(DAC0832使用仿真)

文章目录 &#xff08;1&#xff09;DA转换&#xff08;2&#xff09;DAC0832简介&#xff08;3&#xff09;电路设计&#xff08;4&#xff09;参考例程&#xff08;5&#xff09;参考文献 &#xff08;1&#xff09;DA转换 单片机作为一个数字电路系统&#xff0c;当需要采集…...

springcloud组件

https://www.bilibili.com/video/BV1QX4y1t7v5?p32&vd_source297c866c71fa77b161812ad631ea2c25 eureka : 主要是收集服务的注册信息。 如果有了eureka启动了。内部之前的调用其实就可以用服务名了&#xff0c; 本来是要是用ip端口来访问的&#xff0c;只要eureka启来了…...

手机爬虫用Appium详细教程:利用Python控制移动App进行自动化抓取数据

Appium是一个强大的跨平台工具&#xff0c;它可以让你使用Python来控制移动App进行自动化操作&#xff0c;从而实现数据的抓取和处理。今天&#xff0c;我将与大家分享一份关于使用Appium进行手机爬虫的详细教程&#xff0c;让我们一起来探索Appium的功能和操作&#xff0c;为手…...

deb包构建详解

deb包构建详解 一、deb包构建流程二、deb包构建描述文件详解2.1 control文件2.2 postinst 文件 (post-installation script)2.3 postrm 文件 (post-removal script)2.4 prerm 文件 (pre-removal script)2.5 preinst 文件 (pre-installation script)2.6 rules 文件2.7 changelog…...

【Spring Cloud】网关Gateway的请求过滤工厂RequestRateLimiterGatewayFilterFactory

概念 关于微服务网关Gateway中有几十种过滤工厂&#xff0c;这一篇博文记录的是关于请求限流过滤工厂&#xff0c;也就是标题中的RequestRateLimiterGatewayFilterFactory。这个路由过滤工厂是用来判断当前请求是否应该被处理&#xff0c;如果不会被处理就会返回HTTP状态码为42…...

自己写spring boot starter问题总结

1. Unable to find main class 创建spring boot项目写自己的starterxi写完之后使用install出现Unable to find main class&#xff0c;这是因为spring boot打包需要一个启动类&#xff0c;按照以下写法就没事 <plugins><plugin><groupId>org.springframewo…...

vue3如何打开页面即向后端发送请求

目录 背景&#xff1a; 实现&#xff1a; 1、使用 2、案例 补充&#xff1a; 1、如何定义一个集合来接受后端返回的list 2、加入请求头 背景&#xff1a; 如果想在页面刚加载时向后端发送请求&#xff0c;可以使用Vue 3的生命周期钩子函数onMounted来实现 实现&#xff…...

【软考】9.2 串/数组/矩阵/广义表/树

《字符串》 一种特殊的线性表&#xff0c;数据元素都为字符模式匹配&#xff1a;寻找子串第一次在主串出现的位置 模式匹配算法 1. 暴力破解法&#xff08;布鲁特-福斯算法&#xff09; 主串与子串一个个匹配效率低 2. KMP算法 主串后缀和子串前缀能否找到一样的元素&#xf…...

大数据 DataX 数据同步数据分析入门

目录 一、DataX 概览 1.1 DataX 是什么 1.2 DataX 3.0 概览 设计理念 当前使用现状 二、DataX 详解 2.1 DataX 3.0 框架设计 2.2 DataX 3.0 插件体系 2.3 DataX 3.0 核心架构 2.3.1 核心模块介绍 2.3.2 DataX 调度流程 2.4 DataX 3.0 的六大核心优势 2.4.1 可靠的…...

【京东开源项目】微前端框架MicroApp 1.0正式发布

介绍 MicroApp是由京东前端团队推出的一款微前端框架&#xff0c;它从组件化的思维&#xff0c;基于类WebComponent进行微前端的渲染&#xff0c;旨在降低上手难度、提升工作效率。MicroApp无关技术栈&#xff0c;也不和业务绑定&#xff0c;可以用于任何前端框架。 源码地址…...

多个子div在父中垂直居中

在一个div下&#xff0c;有多个子div&#xff0c;且子div都是水平垂直居中 <template><div><div class"far"><!-- 注意需要多包裹一层 --><div><div class"son1">1</div><div class"son2">222…...

[C国演义] 第十五章

第十五章 最长湍流子数组环绕字符串中唯⼀的⼦字符串 最长湍流子数组 力扣链接 子数组 ⇒ dp[i]的含义: 以arr[i] 结尾的所有子数组中的最长湍流子数组的长度 子数组 ⇒ 状态转移方程根据 最后一个位置来划分&#x1f447;&#x1f447;&#x1f447; 初始化: 都初始化为…...

Docker Compose和Consul

目录 Docker-compose Docker-compose 简介 YAML 文件格式及编写注意事项 Docker Compose配置常用字段 Docker Compose 常用命令 Docker Compose 文件结构 compose 部署 Docker Compose 环境安装 准备依赖文件 编写配置文件docker-compose.yml Consul consul 部署 c…...

Wireshark新手小白基础使用方法

一、针对IP抓取 1、过滤格式&#xff1a; &#xff08;1&#xff09;、ip.src eq x.x.x.x &#xff08;2&#xff09;、ip.dst eq x.x.x.x &#xff08;3&#xff09;ip.src eq x.x.x.x or ip.dst eq x.x.x.x 二、针对端口过滤 1、过滤格式&#xff1a; &#xff08;1&a…...

互动设计:深入了解用户体验的关键

交互是人与计算机系统之间的互动过程。在计算机领域中&#xff0c;交互是人机交互技术的核心内容之一。交互设计是一种基于人类行为科学、心理学、人体工程学等领域的专业设计&#xff0c;目的是创造用户友好的、易于使用的计算机软件、网络、移动应用等。交互的本质在于用户的…...

maven的坐标元素

maven的坐标&#xff1a;使用三个向量在Maven仓库中唯一的定位到一个jar包 * groupId&#xff1a;公司或组织的ID * artifactId&#xff1a;一个项目或者是项目中的一个模块的ID * version&#xff1a;版本号 <groupId>com.gz.maven</groupId> <artifactId&…...

蓝桥杯 题库 简单 每日十题 day13

01 乘积尾零 题目描述 本题为填空题&#xff0c;只需要算出结果后&#xff0c;在代码中使用输出语句将 所填结果输出即可。如下的10行数据&#xff0c;每行有10个整数&#xff0c;请你求出它们的乘积的末尾有多少个零&#xff1f; 5650 4542 3554 473 946 4114 3871 9073 90 …...

联想G50笔记本直接使用F键功能(F1~F12)需要在BIOS设置关闭热键功能可以这样操作!

如果开启启用热键模式按F1就会出现FnF1的效果&#xff0c;不喜欢此方式按键的用户可以进入BIOS设置界面停用热键模式即可。 停用热键模式方法如下&#xff1a; 1、重新启动笔记本电脑&#xff0c;当笔记本电脑屏幕出现Lenovo标识的时候&#xff0c;立即按FnF2进入BIOS设置界面…...

C++入门(头文件,命名空间,作用域,输入输出流,引用,缺省参数,函数重载)

目录 一&#xff0c;头文件 二,命名空间 三&#xff0c;作用域 四&#xff0c;输入输出流 五&#xff1a;引用 六&#xff0c;缺省参数 七&#xff0c;函数重载 一&#xff0c;头文件 C的头文件与C是有差距的&#xff0c;C的头文件是#include<stdio.h>,而C是#inc…...

“Linux免除系统交互操作方法、expect自动化交互工具” 及 “SSH批量修改主机密码脚本”

一、Linux系统免除交互操作方法 1、EOF多文本输入 案例&#xff1a;为机器磁盘进行分区并实现挂载&#xff0c;免交互式操作&#xff0c;如何实现&#xff1f; #!/bin/bash fdisk /dev/sdb <<EOF n p 1 wq EOFmkfs.xfs /dev/sdb1 && mkdir -p /data &&am…...

MPNet:旋转机械轻量化故障诊断模型详解python代码复现

目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...

Cloudflare 从 Nginx 到 Pingora:性能、效率与安全的全面升级

在互联网的快速发展中&#xff0c;高性能、高效率和高安全性的网络服务成为了各大互联网基础设施提供商的核心追求。Cloudflare 作为全球领先的互联网安全和基础设施公司&#xff0c;近期做出了一个重大技术决策&#xff1a;弃用长期使用的 Nginx&#xff0c;转而采用其内部开发…...

select、poll、epoll 与 Reactor 模式

在高并发网络编程领域&#xff0c;高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表&#xff0c;以及基于它们实现的 Reactor 模式&#xff0c;为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。​ 一、I…...

Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)

参考官方文档&#xff1a;https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java&#xff08;供 Kotlin 使用&#xff09; 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...

重启Eureka集群中的节点,对已经注册的服务有什么影响

先看答案&#xff0c;如果正确地操作&#xff0c;重启Eureka集群中的节点&#xff0c;对已经注册的服务影响非常小&#xff0c;甚至可以做到无感知。 但如果操作不当&#xff0c;可能会引发短暂的服务发现问题。 下面我们从Eureka的核心工作原理来详细分析这个问题。 Eureka的…...

搭建DNS域名解析服务器(正向解析资源文件)

正向解析资源文件 1&#xff09;准备工作 服务端及客户端都关闭安全软件 [rootlocalhost ~]# systemctl stop firewalld [rootlocalhost ~]# setenforce 0 2&#xff09;服务端安装软件&#xff1a;bind 1.配置yum源 [rootlocalhost ~]# cat /etc/yum.repos.d/base.repo [Base…...

基于PHP的连锁酒店管理系统

有需要请加文章底部Q哦 可远程调试 基于PHP的连锁酒店管理系统 一 介绍 连锁酒店管理系统基于原生PHP开发&#xff0c;数据库mysql&#xff0c;前端bootstrap。系统角色分为用户和管理员。 技术栈 phpmysqlbootstrapphpstudyvscode 二 功能 用户 1 注册/登录/注销 2 个人中…...

安卓基础(Java 和 Gradle 版本)

1. 设置项目的 JDK 版本 方法1&#xff1a;通过 Project Structure File → Project Structure... (或按 CtrlAltShiftS) 左侧选择 SDK Location 在 Gradle Settings 部分&#xff0c;设置 Gradle JDK 方法2&#xff1a;通过 Settings File → Settings... (或 CtrlAltS)…...

MyBatis中关于缓存的理解

MyBatis缓存 MyBatis系统当中默认定义两级缓存&#xff1a;一级缓存、二级缓存 默认情况下&#xff0c;只有一级缓存开启&#xff08;sqlSession级别的缓存&#xff09;二级缓存需要手动开启配置&#xff0c;需要局域namespace级别的缓存 一级缓存&#xff08;本地缓存&#…...