【正点原子STM32连载】 第三十二章 光敏传感器实验 摘自【正点原子】STM32F103 战舰开发指南V1.2

news2024/11/16 21:22:47

1)实验平台:正点原子stm32f103战舰开发板V4
2)平台购买地址:https://detail.tmall.com/item.htm?id=609294757420
3)全套实验源码+手册+视频下载地址: http://www.openedv.com/thread-340252-1-1.html

第三十三章 DAC实验

本章,我们将介绍STM32F103的DAC(Digital -to- analog converters,数模转换器)功能。我们通过三个实验来学习DAC,分别是DAC输出实验、DAC输出三角波实验和DAC输出正弦波实验。

33.1 DAC简介

STM32F103的DAC模块(数字/模拟转换模块)是12位数字输入,电压输出型的DAC。DAC可以配置为8位或12位模式,也可以与DMA控制器配合使用。DAC工作在12位模式时,数据可以设置成左对齐或右对齐。DAC模块有2个输出通道,每个通道都有单独的转换器。在双DAC模式下,2个通道可以独立地进行转换,也可以同时进行转换并同步地更新2个通道的输出。DAC可以通过引脚输入参考电压Vref+以获得更精确的转换结果。
STM32的DAC模块主要特点有:
① 2个DAC转换器:每个转换器对应1个输出通道
② 8位或者12位单调输出
③ 12位模式下数据左对齐或者右对齐
④ 同步更新功能
⑤ 噪声\三角波形生成
⑥ 双DAC双通道同时或者分别转换
⑦每个通道都有DMA功能
DAC通道框图如图33.1.1所示:
在这里插入图片描述

图33.1.1 DAC通道框图
图中VDDA和VSSA为DAC模块模拟部分的供电,而VREF+则是DAC模块的参考电压。DAC_OUTx就是DAC的两个输出通道了(对应PA4或者PA5引脚)。ADC的这些输入/输出引脚信息如下表所示:
引脚名称 信号类型 说明
VREF+ 正模拟参考电压输入 DAC高/正参考电压,VREF+≤VDDA(3.3V)
VDDA 模拟电源输入 模拟电源
VSSA 模拟电源地输入 模拟电源地
DAC_OUTx 模拟输出信号 DAC通道x模拟输出,x=1、2
表33.1.1 DAC输入/输出引脚
从图33.1.1可以看出,DAC输出是受DORx(x=1/2,下同)寄存器直接控制的,但是我们不能直接往DORx寄存器写入数据,而是通过DHRx间接的传给DORx寄存器,实现对DAC输出的控制。
前面我们提到,STM32F103的DAC支持8/12位模式,8位模式的时候是固定的右对齐的,而12位模式又可以设置左对齐/右对齐。DAC单通道模式下的数据寄存器对齐方式,总共有3种情况,如下图所示:
在这里插入图片描述

图33.1.2 DAC单通道模式下的数据寄存器对齐方式
①8位数据右对齐:用户将数据写入DAC_DHR8Rx[7:0]位(实际存入DHRx[11:4]位)。
②12位数据左对齐:用户将数据写入DAC_DHR12Lx[15:4]位(实际存入DHRx[11:0]位)。
③12位数据右对齐:用户将数据写入DAC_DHR12Rx[11:0]位(实际存入DHRx[11:0]位)。
我们本章实验中使用的都是单通道模式下的DAC通道1,采用12位右对齐格式,所以采用第③种情况。另外DAC还具有双通道转换功能。
对于DAC双通道(可用时),也有三种可能的方式,如下图所示:
在这里插入图片描述

图33.1.3 DAC双通道模式下的数据寄存器对齐方式
①8位数据右对齐:用户将DAC通道1的数据写入DAC_DHR8RD[7:0]位(实际存入DHR1[11:4]位),将DAC通道2的数据写入DAC_DHR8RD[15:8]位(实际存入DHR2[11:4]位)。
②12位数据左对齐:用户将DAC通道1的数据写入DAC_DHR12LD[15:4]位(实际存入DHR1[11:0]位),将DAC通道2的数据写入DAC_DHR12LD[31:20]位(实际存入DHR2[11:0]位)。
③12位数据右对齐:用户将DAC通道1的数据写入DAC_DHR12RD[11:0]位(实际存入DHR1[11:0]位),将DAC通道2的数据写入DAC_DHR12RD[27:16]位(实际存入DHR2[11:0]位)。
DAC可以通过软件或者硬件触发转换,通过配置TENx控制位来决定。
如果没有选中硬件触发(寄存器DAC_CR的TENx位置0),存入寄存器DAC_DHRx的数据会在1个APB1时钟周期后自动传至寄存器DAC_DORx。如果选中硬件触发(寄存器DAC_CR的TENx位置1),数据传输在触发发生以后3个APB1时钟周期后完成。一旦数据从DAC_DHRx寄存器装入DAC_DORx寄存器,在经过时间tSETTLING之后,输出即有效,这段时间的长短依电源电压和模拟输出负载的不同会有所变化。我们可以从《《STM32F103ZET6.pdf》数据手册查到tSETTLING的典型值为3us,最大是4us,所以DAC的转换速度最快是333K左右。
不使用硬件触发(TEN=0),其转换的时间框图如图33.1.4所示:
在这里插入图片描述

图33.1.4 TEN=0时DAC模块转换时间框图
当DAC的参考电压为Vref+的时候,DAC的输出电压是线性的从0~Vref+,12位模式下DAC输出电压与Vref+以及DORx的计算公式如下:
DACx输出电压= Vref *(DORx/4096)
如果使用硬件触发(TENx=1),可通过外部事件(定时计数器、外部中断线)触发DAC转换。由TSELx[2:0]控制位来决定选择8个触发事件中的一个来触发转换。触发事件如下表所示:
在这里插入图片描述

表33.1.3 DAC触发选择
原表见《STM32F10xxx参考手册_V10(中文版).pdf》第185页表71。
每个DAC通道都有DMA功能,两个DMA通道分别用于处理两个DAC通道的DMA请求。如果DMAENx位置1时,如果发生外部触发(而不是软件触发),就会产生一个DMA请求,然后DAC_DHRx寄存器的数据被转移到DAC_NORx寄存器。
33.2 DAC输出实验
本实验我们来学习DAC输出实验。
33.2.1 DAC寄存器
下面,我们介绍要实现DAC的通道1输出,需要用到的一些DAC寄存器。
 DAC控制寄存器(DAC_CR)
DAC控制寄存器描述如图33.2.1.1所示:
在这里插入图片描述

图33.2.1.1 DACx_CR寄存器
DAC_CR的低16位用于控制通道1,高16位用于控制通道2,下面介绍本实验需要设置的一些位:
EN1位用于DAC通道1的使能,我们需要用到DAC通道1的输出,该位必须设置为1。
BOFF1位用于DAC输出缓存控制,这里STM32的DAC输出缓存做的有些不好,如果使能的话,虽然输出能力强一点,但是输出没法到0,这是个很严重的问题。所以本章的三个实验我们都不使用输出缓存,即该位设置为1。
TEN1位用于DAC通道1的触发使能,我们设置该位为0,不使用触发。写入DHR1的值会在1个APB1周期后传送到DOR1,然后输出到PA4口上。
TSEL1[2:0]位用于选择DAC通道1的触发方式,这里我们没有用到外部触发,所以这几位设置为0即可。
WAVE1[1:0]位用于控制DAC通道1的噪声/波形输出功能,我们这里没用到波形发生器,所以默认设置为00,不使能噪声/波形输出。
MAMP[3:0]位是屏蔽/幅值选择器,用来在噪声生成模式下选择屏蔽位,在三角波生成模式下选择波形的幅值。本实验没有用到波形发生器,所以设置为0即可。
DMAEN1位用于DAC通道1的DMA使能,本实验没有用到DMA功能,所以设置为0。
 DAC通道1 12位右对齐数据保持寄存器(DAC_DHR12R1)
DAC通道1的12位右对齐数据保持寄存器描述如图33.2.1.3所示:
在这里插入图片描述

图33.2.1.3 DAC0_ DHR12R1寄存器
该寄存器用来设置DAC输出,通过写入12位数据到该寄存器,就可以在DAC输出通道1(PA4)得到我们所要的结果。
33.2.2 硬件设计

  1. 例程功能
    使用KEY1/KEY_UP两个按键,控制STM32内部DAC的通道1输出电压大小,然后通过ADC2的通道14采集DAC输出的电压,在LCD模块上面显示ADC采集到的电压值以及DAC的设定输出电压值等信息。也可以通过usmart调用dac_set_voltage函数,来直接设置DAC输出电压。LED0闪烁,提示程序运行。
  2. 硬件资源
    1)LED灯 LED0 – PB5
    2)串口1(PA9/PA10连接在板载USB转串口芯片CH340上面)
    3)正点原子 2.8/3.5/4.3/7/10寸TFTLCD模块(仅限MCU屏,16位8080并口驱动)
    4)独立按键 :KEY1 - PE3、WK_UP - PA0
    5)ADC3 :通道1 – PA1
    6)DAC1 :通道1 – PA4
  3. 原理图
    我们来看看原理图上ADC3通道1(PA1)和DAC1通道1(PA4)引出来的引脚,如下图所示:
    在这里插入图片描述

图33.2.2.1 ADC和DAC在开发板上的连接关系原理图
我们只需要通过跳线帽连接ADC和DAC,就可以使得ADC3通道1(PA1)和DAC1通道1(PA4)连接起来。对应的硬件连接如图33.2.2.2所示:
在这里插入图片描述

图33.2.2.2 硬件连接示意图
33.2.3 程序设计
33.2.3.1 DAC的HAL库驱动
DAC在HAL库中的驱动代码在stm32f1xx_hal_dac.c和stm32f1xx_hal_dac_ex.c文件(及其头文件)中。

  1. HAL_DAC_Init函数
    DAC的初始化函数,其声明如下:
    HAL_StatusTypeDef HAL_DAC_Init(DAC_HandleTypeDef *hdac);
    函数描述:
    用于初始化DAC。
    函数形参:
    形参1是DAC_HandleTypeDef结构体类型指针变量,其定义如下:
typedef struct
{
  DAC_TypeDef                    *Instance;    		/* DAC寄存器基地址 */
  __IO HAL_DAC_StateTypeDef   State;           	/* DAC 工作状态 */
  HAL_LockTypeDef               Lock;            	/* DAC锁定对象 */
  DMA_HandleTypeDef             *DMA_Handle1;  	/* 通道1的DMA处理句柄指针 */
  DMA_HandleTypeDef             *DMA_Handle2;  	/* 通道2的DMA处理句柄指针 */
  __IO uint32_t                  ErrorCode;     	/* DAC错误代码 */
} DAC_HandleTypeDef;

从该结构体看到该函数并没有设置任何DAC相关寄存器,即没有对DAC进行任何配置,它只是HAL库提供用来在软件上初始化DAC,为后面HAL库操作DAC做好准备。
函数返回值:
HAL_StatusTypeDef枚举类型的值。
注意事项:
DAC的MSP初始化函数HAL_DAC_MspInit,该函数声明如下:
void HAL_DAC_MspInit(DAC_HandleTypeDef* hdac);
2. HAL_DAC_ConfigChannel函数
DAC 的通道参数初始化函数,其声明如下:
HAL_StatusTypeDef HAL_DAC_ConfigChannel(DAC_HandleTypeDef *hdac,
DAC_ChannelConfTypeDef *sConfig, uint32_t Channel);
函数描述:
该函数用来配置DAC通道的触发类型以及输出缓冲。
函数形参:
形参1是DAC_HandleTypeDef结构体类型指针变量。
形参2是DAC_ChannelConfTypeDef结构体类型指针变量,其定义如下:

typedef struct
{
  uint32_t DAC_Trigger;                 /* DAC触发源的选择 */
  uint32_t DAC_OutputBuffer;           /* 启用或者禁用DAC通道输出缓冲区 */
} DAC_ChannelConfTypeDef;

形参2用于选择要配置的通道,可选择DAC_CHANNEL_1或者DAC_CHANNEL_2。
函数返回值:
HAL_StatusTypeDef枚举类型的值。
3. HAL_DAC_Start函数
使能启动DAC转换通道函数,其声明如下:
HAL_StatusTypeDef HAL_DAC_Start(DAC_HandleTypeDef *hdac, uint32_t Channel);
函数描述:
使能启动DAC转换通道。
函数形参:
形参1是DAC_HandleTypeDef结构体类型指针变量。
形参2用于选择要启动的通道,可选择DAC_CHANNEL_1或者DAC_CHANNEL_2。
函数返回值:
HAL_StatusTypeDef枚举类型的值。
4. HAL_DAC_SetValue函数
DAC的通道输出值函数,其声明如下:
HAL_StatusTypeDef HAL_DAC_SetValue(DAC_HandleTypeDef *hdac, uint32_t Channel,
uint32_t Alignment, uint32_t Data);
函数描述:
配置DAC的通道输出值。
函数形参:
形参1是DAC_HandleTypeDef结构体类型指针变量。
形参2用于选择要输出的通道,可选择DAC_CHANNEL_1或者DAC_CHANNEL_2。
形参3用于指定数据对齐方式。
形参4设置要加载到选定数据保存寄存器中的数据。
函数返回值:
HAL_StatusTypeDef枚举类型的值。
5. HAL_DAC_GetValue函数
DAC读取通道输出值函数,其声明如下:
uint32_t HAL_DAC_GetValue(DAC_HandleTypeDef *hdac, uint32_t Channel);
函数描述:
获取所选DAC通道的最后一个数据输出值。
函数形参:
形参1是DAC_HandleTypeDef结构体类型指针变量。
形参2用于选择要读取的通道,可选择DAC_CHANNEL_1或者DAC_CHANNEL_2。
函数返回值:
获取到的输出值。
DAC输出配置步骤
1)开启DACx和DAC通道对应的IO时钟,并配置该IO为模拟功能
首先开启DACx的时钟,然后配置GPIO为模拟模式。本实验我们默认用到DAC1通道1,对应IO是PA4,它们的时钟开启方法如下:

__HAL_RCC_DAC_CLK_ENABLE ();           /* 使能DAC1时钟 */
__HAL_RCC_GPIOA_CLK_ENABLE();          /* 开启GPIOA时钟 */

2)初始化DACx
通过HAL_DAC_Init函数来设置需要初始化的DAC。该函数并没有设置任何DAC相关寄存器,也就是说没有对DAC进行任何配置,它只是HAL库提供用来在软件上初始化DAC。
注意:该函数会调用HAL_DAC_MspInit函数来存放DAC和对应通道的IO时钟使能和初始化IO等代码。
3)配置DAC通道并启动DA转换器
在HAL库中,通过HAL_DAC_ConfigChannel函数来设置配置DAC的通道,根据需求设置触发类型以及输出缓冲。
配置好DAC通道之后,通过HAL_DAC_Start函数启动DA转换器。
4)设置DAC的输出值
通过HAL_DAC_SetValue函数设置DAC的输出值。
33.2.3.2 程序流程图
在这里插入图片描述

图33.2.3.2.1 DAC输出实验程序流程图
33.2.3.3 程序解析
这里我们只讲解核心代码,详细的源码请大家参考光盘本实验对应源码。DAC驱动源码包括两个文件:dac.c和dac.h。本实验有3个实验,每一个实验的代码都是在上一个实验后面追加。
dac.h文件只有一些声明,下面直接开始介绍dac.c的程序,首先是DAC初始化函数。

/**
 * @brief       DAC初始化函数
 * @note        本函数支持DAC1_OUT1/2通道初始化
 *       DAC的输入时钟来自APB1, 时钟频率=36Mhz=27.8ns
 *       DAC在输出buffer关闭的时候, 输出建立时间: tSETTLING = 4us 
 *       因此DAC输出的最高速度约为:250Khz, 以10个点为一个周期, 最大能输出25Khz左右的波形
 * @param     outx: 要初始化的通道. 1,通道1; 2,通道2
* @retval    无
*/
void dac_init(uint8_t outx)
{
    GPIO_InitTypeDef gpio_init_struct;
    DAC_ChannelConfTypeDef dac_ch_conf;
    
    __HAL_RCC_DAC_CLK_ENABLE();  /* 使能DAC1的时钟 */
    __HAL_RCC_GPIOA_CLK_ENABLE();/* 使能DAC OUT1/2的IO口时钟(都在PA口,PA4/PA5) */
    
/* STM32单片机, 总是PA4=DAC1_OUT1, PA5=DAC1_OUT2 */
    gpio_init_struct.Pin = (outx==1)? GPIO_PIN_4 : GPIO_PIN_5;  
    gpio_init_struct.Mode = GPIO_MODE_ANALOG;
    HAL_GPIO_Init(GPIOA, &gpio_init_struct);

    g_dac_handle.Instance = DAC;
    HAL_DAC_Init(&g_dac_handle);                                  /* 初始化DAC */

    dac_ch_conf.DAC_Trigger = DAC_TRIGGER_NONE;                /* 不使用触发功能 */
    dac_ch_conf.DAC_OutputBuffer = DAC_OUTPUTBUFFER_DISABLE;/* DAC1输出缓冲关闭 */
    
    switch(outx)
    {
        case 1:
/* DAC通道1配置 */
            HAL_DAC_ConfigChannel(&g_dac_handle, &dac_ch_conf, DAC_CHANNEL_1); 
            HAL_DAC_Start(&g_dac_handle,DAC_CHANNEL_1);    /* 开启DAC通道1 */
            break;
        case 2:
/* DAC通道2配置 */
            HAL_DAC_ConfigChannel(&g_dac_handle, &dac_ch_conf, DAC_CHANNEL_2);  
            HAL_DAC_Start(&g_dac_handle,DAC_CHANNEL_2);    /* 开启DAC通道1 */
            break;
        default:break;
    }
}

该函数主要调用HAL_DAC_Init和HAL_DAC_ConfigChannel函数初始化DAC,并调用HAL_DAC_Start函数使能DAC通道。HAL_DAC_Init函数会调用HAL_DAC_MspInit回调函数,该函数用于存放DAC和对应通道的IO时钟使能和初始化IO等代码。本实验为了让dac_init函数支持DAC的OUT1/2两个通道的初始化,就没有用到该函数。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/656799.html

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

相关文章

【网络面试必问】浏览器如何委托协议栈完成消息的收发

接上一篇:【面试中的网络知识】DNS原理-如何实现域名和IP地址的查询转换  在前面的博客中,提到过无数次,浏览器作为应用程序,本身是不具备向网络中发送网络请求的能力,要委托操作系统的内核协议栈来完成。协议栈再调用…

新手学习Vmp之控制流程图生成

新手学习Vmp之控制流程图生成 控制流程图的生成对于反混淆分析来说是非常重要的一步,这里记录一下我研究的过程,以Vmp2为例子。 这里我的环境准备如下: Visual Studio IDA SDK Capstone Unicorn Graphviz IDA SDK插件环境,主要是有一些AP…

1.2数据机构——算法和复杂度

一、算法 1、概念:算法是对特定问题求解的一种描述(或步骤),是指令的特定序列 2、程序数据结构算法 3、算法的特性: 有穷性:算法是有穷的,程序是无穷的 确定性:每条指令有确定的…

一文搞懂什么是Raid

RAID 1. 基本概念2. RAID 03. RAID 14. RAID 015. RAID 56. RAID6 1. 基本概念 RAID(Redundant Array of Independent Disks)是一种磁盘阵列技术,通过将多个物理磁盘组合成一个大容量的逻辑磁盘,提高磁盘存储的性能和可靠性。 R…

TOGAF 标准对数字化企业支持

这篇来点高大尚的,对技术、产品管理者和架构师写方案应该有用,其它不多谢,直接转入正题。 一、概述 TOGAF标准是在需要购买服务器硬件和网络设备的时候开始发展的;需要规划数据中心空间、电源和冷却,并协商和购买产品…

微服务SpringCloudday1 认识微服务与服务注册(Eureka与nacos)

SpringCloud01 1.认识微服务 随着互联网行业的发展,对服务的要求也越来越高,服务架构也从单体架构逐渐演变为现在流行的微服务架构。这些架构之间有怎样的差别呢? 1.0.学习目标 了解微服务架构的优缺点 1.1.单体架构 单体架构&#xff…

arduino w801 流水灯

先复制个图过来 来源 https://www.cnblogs.com/milton/p/15621540.html 前两天老外跟联盛德网站回复我arduino库有完善的了 GitHub - board707/w80x_arduino: w806 for arduino ide package arduino 添加库地址 https://raw.githubusercontent.com/board707/w80x_arduino/ha…

【genius_platform软件平台开发】第九十八讲:嵌入式网络接口(MAC、PHY)

1. 嵌入式网络简介 1.1 嵌入式下的网络硬件接口 提起网络,我们一般想到的硬件就是“网卡”,现在网卡已经是通过一个芯片来完成了,嵌入式网络硬件分为两部分:MAC和PHY,大家都是通过看数据手册来判断一款SOC是否支持网络…

Linux tar.xz 格式的文件正确的解压命令

Linux tar.xz 最近下载 Linux kernel,好像最近流行 tar.xz 格式的后缀 对于 xz 后缀的压缩文件,我之前的解压方式是分为两步: xz -d xxx.tar.xz 解压成 xxx.tar 格式文件,然后再 tar xf xxx.tar 解压文件。 这样的操作不仅比较的…

【Java基础学习打卡11】Path环境变量的配置

目录 前言一、为什么配置环境变量二、如何配置环境变量三、JDK11的环境变量配置总结 前言 本文我们要知道为什么配置环境变量,自己思考不配置环境变量可以吗?JDK 11 如何配置环境变量。 一、为什么配置环境变量 原因很简单,就是方便命令的查…

痛点-调研-明确需求-实现-测试-发布 不需要手一步到位使用AGI生成去广告脚本,复制粘贴发布到Greasy Fork

总算又想起密码了, 自从用了语雀后, 其他平台基本都不再使用了 csdn 真的**, c h a t g p t 是禁词(已经改为了AGI, 通用型人工智能), 你倒是说清楚啊,直接来一句违反社区规定, 莫名其妙, 得靠猜…服了 今天来补上一篇利用AGI生成的js去广告脚本 前置知识(不看也问题不大) …

MyBatis junit 日志框架logback

JUnit是专门做单元测试的组件 <!-- junit依赖 --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.13.2</version> <scope>test</scope> </dependency>…

牛客网最全的 Java 面试八股文大合集汇总

就目前大环境来看&#xff0c;跳槽成功的难度比往年高很多。一个明显的感受&#xff1a;今年的面试&#xff0c;无论一面还是二面&#xff0c;都很考验 Java 程序员的技术功底。这不马上又到了面试跳槽的黄金段&#xff0c;成功升职加薪&#xff0c;不成功饱受打击。当然也要注…

关于laravel使用Elastic Search的一些记录

文章目录 1. 准备工作2. 本地安装elastic search3. laravel安装es依赖4. laravel中使用es参考链接 1. 准备工作 因为我本地php版本是7.3.4&#xff0c;不支持太高的es。 所以使用如下环境: laravel6 php7.3.4 elastic search 7.17.2 2. 本地安装elastic search 1. 下载安装包…

备战金九银十,两份 JAVA 面试题 2023 最新整合版,祝你脱颖而出

前言 马上又准备到了一年一度的金九银十环节&#xff0c;作为一年中的跳槽求职高峰期&#xff0c;相信有很多朋友都已经开始着手准备面试了&#xff0c;但是网上的面试题杂七杂八的&#xff0c;所以今天分享 2 份整合好的合集版&#xff0c;从基础到深入比较全面。即适合初入社…

windows10系统-14-Hexo博客框架和DevSidecar加速访问GitHub

HexoGitee零代码基础从0到1部署博客全流程&#xff08;一&#xff09; HexoGithub博客搭建教程 亲测解决npm ERR! Unexpected end of JSON input while parsing near…的方法 Hexo-修改Hexo主题 hexo免费主题 现在市面上的博客很多&#xff0c;如CSDN&#xff0c;博客园&#x…

【干货】Android系统定制基础篇:第二部分

1、Android Launcher3支持键盘切换焦点 Android Launcher3 默认并不支持键盘操作&#xff0c;无法切换焦点&#xff0c;在一些需要支持键盘或遥控操作的设备中无法使用&#xff0c;因些对 Launcher3 做简单修改&#xff0c;使其支持键盘切换焦点。 diff --git a/packages/app…

C语言学习笔记:指针

✨博文作者&#xff1a;烟雨孤舟 &#x1f496; 喜欢的可以 点赞 收藏 关注哦~~ ✍️ 作者简介: 一个热爱大数据的学习者 ✍️ 笔记简介&#xff1a;作为大数据爱好者&#xff0c;以下是个人总结的学习笔记&#xff0c;如有错误&#xff0c;请多多指教&#xff01; 目录 简介 …

Redis客户端 - SpringDataRedis

原文首更地址&#xff0c;阅读效果更佳&#xff01; Redis客户端 - SpringDataRedis | CoderMast编程桅杆https://www.codermast.com/database/redis/spring-data-redis.html 介绍 SpringData 是 Spring 中操作数据的模块&#xff0c;包含对各种数据库的集成&#xff0c;其中…

2023 年最新阿里巴巴 Java 面试权威指南(泰山版)

不知道现在同学们有没有想法备战金九银十&#xff0c;好多未雨绸缪的同学已经开始整理学习资源了&#xff0c;有些同学想冲击一下大厂&#xff0c;有些同学希望自己能够涨薪&#xff01;不管是出于哪种想法&#xff0c;看一下现在的时间&#xff0c;也确实该准备了&#xff0c;…