【STM32-学习笔记-6-】DMA

文章目录

  • DMA
    • Ⅰ、DMA框图
    • Ⅱ、DMA基本结构
    • Ⅲ、不同外设的DMA请求
    • Ⅳ、DMA函数
    • Ⅴ、DMA_InitTypeDef结构体参数
      • ①、DMA_PeripheralBaseAddr
      • ②、DMA_PeripheralDataSize
      • ③、DMA_PeripheralInc
      • ④、DMA_MemoryBaseAddr
      • ⑤、DMA_MemoryDataSize
      • ⑥、DMA_MemoryInc
      • ⑦、DMA_DIR
      • ⑧、DMA_BufferSize
      • ⑨、DMA_Mode
      • ⑩、DMA_M2M
      • ①①、DMA_Priority
    • Ⅵ、DMA配置示例
      • DMA+AD多通道
        • 1. ADC单次扫描+DMA数据转运
        • 2. ADC连续扫描+DMA循环转运

DMA

Ⅰ、DMA框图

image-20241227112815688

Ⅱ、DMA基本结构

image-20241227112841087

Ⅲ、不同外设的DMA请求

image-20241227113057979

Ⅳ、DMA函数

// 重置指定的DMA通道寄存器为默认值
void DMA_DeInit(DMA_Channel_TypeDef* DMAy_Channelx);// 初始化指定的DMA通道,根据初始化结构体配置参数
void DMA_Init(DMA_Channel_TypeDef* DMAy_Channelx, DMA_InitTypeDef* DMA_InitStruct);// 初始化DMA初始化结构体的默认值
void DMA_StructInit(DMA_InitTypeDef* DMA_InitStruct);// 开启或关闭指定的DMA通道
void DMA_Cmd(DMA_Channel_TypeDef* DMAy_Channelx, FunctionalState NewState);// 开启或关闭DMA通道的中断
void DMA_ITConfig(DMA_Channel_TypeDef* DMAy_Channelx, uint32_t DMA_IT, FunctionalState NewState);// 设置DMA当前数据计数器的值
void DMA_SetCurrDataCounter(DMA_Channel_TypeDef* DMAy_Channelx, uint16_t DataNumber); // 获取DMA当前数据计数器的值
uint16_t DMA_GetCurrDataCounter(DMA_Channel_TypeDef* DMAy_Channelx);// 获取DMA标志状态
FlagStatus DMA_GetFlagStatus(uint32_t DMAy_FLAG);
// 清除DMA标志
void DMA_ClearFlag(uint32_t DMAy_FLAG);// 获取DMA中断状态	
ITStatus DMA_GetITStatus(uint32_t DMAy_IT);
// 清除DMA中断待处理位
void DMA_ClearITPendingBit(uint32_t DMAy_IT);

Ⅴ、DMA_InitTypeDef结构体参数

①、DMA_PeripheralBaseAddr

指定DMA通道的外设基地址外设寄存器-起始地址

    • 类型uint32_t
    • 取值范围:任意有效的外设地址
    • 作用:这是DMA操作的外设端的起始地址,例如ADC、USART等外设的数据寄存器地址

②、DMA_PeripheralDataSize

指定外设寄存器的数据宽度配置DMA传输时外设数据的大小

  • 该参数可以是@ref DMA_peripheral_data_size

    • 宏定义解释

      1. DMA_PeripheralDataSize_Byte
        • 描述:表示外设数据大小为1字节(8位)
          • 每次DMA传输的数据大小为1字节
      2. DMA_PeripheralDataSize_HalfWord
        • 描述:表示外设数据大小为半字(16位)
          • 每次DMA传输的数据大小为2字节
      3. DMA_PeripheralDataSize_Word
        • 描述:表示外设数据大小为1字(32位)
          • 每次DMA传输的数据大小为4字节

      宏函数

      1. IS_DMA_PERIPHERAL_DATA_SIZE(SIZE)
        • 描述:检查给定的外设数据大小设置是否有效
        • 参数SIZE,代表DMA的外设数据大小
        • 功能:检查SIZE是否等于DMA_PeripheralDataSize_ByteDMA_PeripheralDataSize_HalfWordDMA_PeripheralDataSize_Word中的任一个。
        • 返回值:如果SIZE有效,返回1(真),否则返回0(假)

③、DMA_PeripheralInc

指定外设地址寄存器是否递增

    • 类型uint32_t
    • 取值范围
      • DMA_PeripheralInc_Disable:外设地址不递增
      • DMA_PeripheralInc_Enable:外设地址递增
    • 作用:控制外设地址在每次数据传输后是否递增

④、DMA_MemoryBaseAddr

指定DMA通道的内存基地址存储器-起始地址

    • 类型uint32_t
    • 取值范围:任意有效的内存地址
    • 作用:这是DMA操作的内存端的起始地址,例如一个缓冲区的起始地址

⑤、DMA_MemoryDataSize

指定内存数据宽度存储器-数据宽度

    • 类型uint32_t
    • 取值范围
      • DMA_MemoryDataSize_Byte:数据宽度为8位
      • DMA_MemoryDataSize_HalfWord:数据宽度为16位
      • DMA_MemoryDataSize_Word:数据宽度为32位
    • 作用:确定内存数据的大小

⑥、DMA_MemoryInc

指定内存地址寄存器是否递增指定存储器-是否递增

    • 类型uint32_t
    • 取值范围
      • DMA_MemoryInc_Disable:内存地址不递增
      • DMA_MemoryInc_Enable:内存地址递增
    • 作用:控制内存地址在每次数据传输后是否递增

⑦、DMA_DIR

指定数据传输方向,即外设是数据源还是数据目标指定外设站点是源还是目标

    • 类型uint32_t
    • 取值范围
      • DMA_DIR_PeripheralSRC外设是数据源,内存是数据目标
      • DMA_DIR_PeripheralDST:外设是数据目标,内存是数据源
    • 作用:确定数据传输的方向

⑧、DMA_BufferSize

指定DMA通道的缓冲区大小,以数据单元为单位

  • DMA_InitStruct.DMA_BufferSize = Size; 传递Size个大小为<数据宽度>的数据

    • 类型uint32_t
    • 取值范围:0到65535
    • 作用:确定要传输的数据量。数据单元的大小取决于DMA_PeripheralDataSizeDMA_MemoryDataSize的配置,具体取决于传输方向

⑨、DMA_Mode

指定DMAy通道的工作模式是否要自动重装

    • 类型uint32_t
    • 取值范围
      • DMA_Mode_Normal正常模式,传输完成后停止
      • DMA_Mode_Circular:循环模式(自动重装),传输完成后从头开始
    • 作用:确定DMA传输的模式。循环模式不适用于内存到内存的传输

⑩、DMA_M2M

是否使用软件触发存储器到存储器

    • 类型uint32_t
    • 描述:指定DMA通道是否用于内存到内存的传输
    • 取值范围
      • DMA_M2M_Disable不使用内存到内存传输
      • DMA_M2M_Enable使用内存到内存传输
    • 作用:确定DMA通道是否用于内存到内存的传输

①①、DMA_Priority

指定DMA通道的软件优先级

  • 按需求配置

    • 类型uint32_t
    • 取值范围
      • DMA_Priority_Low低优先级
      • DMA_Priority_Medium中优先级
      • DMA_Priority_High高优先级
      • DMA_Priority_VeryHigh非常高优先级
    • 作用:确定DMA通道的优先级,影响多个DMA请求的处理顺序

Ⅵ、DMA配置示例

#include "stm32f10x.h"                  // Device headeruint32_t Temp_Size;//存储数据计数器的值void MyDMA_Init(uint32_t Source, uint32_t Dest, uint32_t Size)//参数需为两个数组的数组名
{Temp_Size = Size;RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);DMA_InitTypeDef DMA_InitStruct;DMA_InitStruct.DMA_PeripheralBaseAddr = Source;//外设寄存器-起始地址DMA_InitStruct.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;//外设寄存器-数据宽度(此处为1byte)DMA_InitStruct.DMA_PeripheralInc = DMA_PeripheralInc_Enable;//指定外设地址寄存器-是否递增DMA_InitStruct.DMA_MemoryBaseAddr = Dest;//存储器-起始地址DMA_InitStruct.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;//存储器-数据宽度DMA_InitStruct.DMA_MemoryInc = DMA_MemoryInc_Enable;//指定存储器-是否递增DMA_InitStruct.DMA_DIR = DMA_DIR_PeripheralSRC;//指定外设站点是源还是目标DMA_InitStruct.DMA_BufferSize = Size;//传递Size个大小为<数据宽度>的数据DMA_InitStruct.DMA_Mode = DMA_Mode_Normal;//指定DMAy通道的工作模式(是否要自动重装)DMA_InitStruct.DMA_M2M = DMA_M2M_Enable;//是否使用软件触发(存储器到存储器)DMA_InitStruct.DMA_Priority = DMA_Priority_Medium;//指定DMAy通道的软件优先级DMA_Init(DMA1_Channel1, &DMA_InitStruct);DMA_Cmd(DMA1_Channel1, DISABLE);//使能或失能DMA
}void MyDMA_Transfer(void)//调用函数则开始转运
{DMA_Cmd(DMA1_Channel1, DISABLE);//失能DMADMA_SetCurrDataCounter(DMA1_Channel1, Temp_Size);//设置DMA当前数据计数器的值DMA_Cmd(DMA1_Channel1, ENABLE);//使能DMAwhile(DMA_GetFlagStatus(DMA1_FLAG_TC1) == RESET)//获取DMA标志状态(等待转运完成)DMA_ClearFlag(DMA1_FLAG_TC1);//清除DMA标志位
}

DMA+AD多通道

1. ADC单次扫描+DMA数据转运
#include "stm32f10x.h"                  // Device header
//模拟量转换为数字量
//AD多通道(ADC扫描模式+DMA数据转运)uint16_t Dest_Data[4];void AD_Init(void)
{	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);//开启GPIO时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);//开启ADC时钟RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);//开启DMA时钟RCC_ADCCLKConfig(RCC_PCLK2_Div6);//配置ADC时钟(72MHz/6=12MHz)//配置GPIOGPIO_InitTypeDef GPIO_InitStruct;GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AIN;//模拟输入GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3;GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStruct);ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_41Cycles5);//配置ADC常规通道ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 2, ADC_SampleTime_41Cycles5);//配置ADC常规通道ADC_RegularChannelConfig(ADC1, ADC_Channel_2, 3, ADC_SampleTime_41Cycles5);//配置ADC常规通道ADC_RegularChannelConfig(ADC1, ADC_Channel_3, 4, ADC_SampleTime_41Cycles5);//配置ADC常规通道//配置ADCADC_InitTypeDef ADC_InitStruct;ADC_InitStruct.ADC_Mode = ADC_Mode_Independent;//将ADC配置为独立或操作双模式ADC_InitStruct.ADC_DataAlign = ADC_DataAlign_Right;//数据右对齐ADC_InitStruct.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;//不使用外部触发ADC_InitStruct.ADC_ContinuousConvMode = DISABLE;//单次转换or连续转换ADC_InitStruct.ADC_ScanConvMode = ENABLE;//非扫描模式or扫描模式ADC_InitStruct.ADC_NbrOfChannel = 4;//指定要转换的ADC通道的数量ADC_Init(ADC1, &ADC_InitStruct);//配置DMA	DMA_InitTypeDef DMA_InitStruct;DMA_InitStruct.DMA_PeripheralBaseAddr = (uint32_t)&ADC1->DR;//外设寄存器-起始地址DMA_InitStruct.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;//外设寄存器-数据宽度(此处为1byte)DMA_InitStruct.DMA_PeripheralInc = DMA_PeripheralInc_Disable;//指定外设地址寄存器-是否递增DMA_InitStruct.DMA_MemoryBaseAddr = (uint32_t)Dest_Data;//存储器-起始地址DMA_InitStruct.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;//存储器-数据宽度DMA_InitStruct.DMA_MemoryInc = DMA_MemoryInc_Enable;//指定存储器-是否递增DMA_InitStruct.DMA_DIR = DMA_DIR_PeripheralSRC;//指定外设站点是源还是目标DMA_InitStruct.DMA_BufferSize = 4;//传递Size个大小为<数据宽度>的数据DMA_InitStruct.DMA_Mode = DMA_Mode_Normal;//指定DMAy通道的工作模式(是否要自动重装)DMA_InitStruct.DMA_M2M = DMA_M2M_Disable;//是否使用软件触发(存储器到存储器)DMA_InitStruct.DMA_Priority = DMA_Priority_Medium;//指定DMAy通道的软件优先级DMA_Init(DMA1_Channel1, &DMA_InitStruct);ADC_DMACmd(ADC1, ENABLE);//开启ADC的DMA功能DMA_Cmd(DMA1_Channel1, ENABLE);//使能或失能DMAADC_Cmd(ADC1, ENABLE);//开启ADC//ADC复位+校准ADC_ResetCalibration(ADC1);//重置ADC校准,准备进行校准操作while(ADC_GetResetCalibrationStatus(ADC1) == SET);//获取ADC重置校准状态,检查是否完成ADC_StartCalibration(ADC1);//开始ADC校准while(ADC_GetCalibrationStatus(ADC1) == SET);//获取ADC校准状态,检查是否完成
}void AD_GetValue(void)//获取模拟值
{//选择不同的通道或取ADC值DMA_Cmd(DMA1_Channel1, DISABLE);//失能DMADMA_SetCurrDataCounter(DMA1_Channel1, 4);//设置DMA当前数据计数器的值DMA_Cmd(DMA1_Channel1, ENABLE);//使能DMAADC_SoftwareStartConvCmd(ADC1, ENABLE);//开启软件启动ADC转换,用于软件触发转换--启动while(DMA_GetFlagStatus(DMA1_FLAG_TC1) == RESET)//获取DMA标志状态(等待转运完成)DMA_ClearFlag(DMA1_FLAG_TC1);//清除DMA标志位}
2. ADC连续扫描+DMA循环转运
#include "stm32f10x.h"                  // Device header
//模拟量转换为数字量
//AD多通道(ADC连续扫描+DMA循环转运)uint16_t Dest_Data[4];void AD_Init(void)
{	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);//开启GPIO时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);//开启ADC时钟RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);//开启DMA时钟RCC_ADCCLKConfig(RCC_PCLK2_Div6);//配置ADC时钟(72MHz/6=12MHz)//配置GPIOGPIO_InitTypeDef GPIO_InitStruct;GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AIN;//模拟输入GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3;GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStruct);ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_41Cycles5);//配置ADC常规通道ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 2, ADC_SampleTime_41Cycles5);//配置ADC常规通道ADC_RegularChannelConfig(ADC1, ADC_Channel_2, 3, ADC_SampleTime_41Cycles5);//配置ADC常规通道ADC_RegularChannelConfig(ADC1, ADC_Channel_3, 4, ADC_SampleTime_41Cycles5);//配置ADC常规通道//配置ADCADC_InitTypeDef ADC_InitStruct;ADC_InitStruct.ADC_Mode = ADC_Mode_Independent;//将ADC配置为独立或操作双模式ADC_InitStruct.ADC_DataAlign = ADC_DataAlign_Right;//数据右对齐ADC_InitStruct.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;//不使用外部触发ADC_InitStruct.ADC_ContinuousConvMode = ENABLE;//单次转换or连续转换**********************************************ADC_InitStruct.ADC_ScanConvMode = ENABLE;//非扫描模式or扫描模式ADC_InitStruct.ADC_NbrOfChannel = 4;//指定要转换的ADC通道的数量ADC_Init(ADC1, &ADC_InitStruct);//配置DMA	DMA_InitTypeDef DMA_InitStruct;DMA_InitStruct.DMA_PeripheralBaseAddr = (uint32_t)&ADC1->DR;//外设寄存器-起始地址DMA_InitStruct.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;//外设寄存器-数据宽度(此处为1byte)DMA_InitStruct.DMA_PeripheralInc = DMA_PeripheralInc_Disable;//指定外设地址寄存器-是否递增DMA_InitStruct.DMA_MemoryBaseAddr = (uint32_t)Dest_Data;//存储器-起始地址DMA_InitStruct.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;//存储器-数据宽度DMA_InitStruct.DMA_MemoryInc = DMA_MemoryInc_Enable;//指定存储器-是否递增DMA_InitStruct.DMA_DIR = DMA_DIR_PeripheralSRC;//指定外设站点是源还是目标DMA_InitStruct.DMA_BufferSize = 4;//传递Size个大小为<数据宽度>的数据DMA_InitStruct.DMA_Mode = DMA_Mode_Circular;//指定DMAy通道的工作模式(是否要自动重装)******************************DMA_InitStruct.DMA_M2M = DMA_M2M_Disable;//是否使用软件触发(存储器到存储器)DMA_InitStruct.DMA_Priority = DMA_Priority_Medium;//指定DMAy通道的软件优先级DMA_Init(DMA1_Channel1, &DMA_InitStruct);ADC_DMACmd(ADC1, ENABLE);//开启ADC的DMA功能DMA_Cmd(DMA1_Channel1, ENABLE);//使能或失能DMAADC_Cmd(ADC1, ENABLE);//开启ADC//ADC复位+校准ADC_ResetCalibration(ADC1);//重置ADC校准,准备进行校准操作while(ADC_GetResetCalibrationStatus(ADC1) == SET);//获取ADC重置校准状态,检查是否完成ADC_StartCalibration(ADC1);//开始ADC校准while(ADC_GetCalibrationStatus(ADC1) == SET);//获取ADC校准状态,检查是否完成ADC_SoftwareStartConvCmd(ADC1, ENABLE);//开启软件启动ADC转换,用于软件触发转换--启动********************************
}
//*****************************************************************************************

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

lerna使用指南

lerna版本 以下所有配置命令都是基于v8.1.9&#xff0c;lerna v5 v7版本差别较大&#xff0c;在使用时&#xff0c;注意自身的lerna版本。 lerna开启缓存及缓存配置 nx缓存是v5版本以后才有的&#xff0c;小于该版本的无法使用该功能。 初始化配置 缓存配置文件nx.json&am…

html辅助标签与样式表

一、HTML其它常用标签 1.meta标签 &#xff08;1&#xff09;meta标签是一个特殊的HTML标签&#xff0c;提供有关网页的信息&#xff0c;如作者姓名、公司名称和联系信息等 &#xff08;2&#xff09;许多搜索引擎都使用meta标签 <head> <meta name"keyword…

用 Python 从零开始创建神经网络(十九):真实数据集

真实数据集 引言数据准备数据加载数据预处理数据洗牌批次&#xff08;Batches&#xff09;训练&#xff08;Training&#xff09;到目前为止的全部代码&#xff1a; 引言 在实践中&#xff0c;深度学习通常涉及庞大的数据集&#xff08;通常以TB甚至更多为单位&#xff09;&am…

DolphinScheduler自身容错导致的服务器持续崩溃重大问题的排查与解决

01 问题复现 在DolphinScheduler中有如下一个Shell任务&#xff1a; current_timestamp() { date "%Y-%m-%d %H:%M:%S" }TIMESTAMP$(current_timestamp) echo $TIMESTAMP sleep 60 在DolphinScheduler将工作流执行策略设置为并行&#xff1a; 定时周期调度设置…

【机器学习案列】学生抑郁可视化及预测分析

&#x1f9d1; 博主简介&#xff1a;曾任某智慧城市类企业算法总监&#xff0c;目前在美国市场的物流公司从事高级算法工程师一职&#xff0c;深耕人工智能领域&#xff0c;精通python数据挖掘、可视化、机器学习等&#xff0c;发表过AI相关的专利并多次在AI类比赛中获奖。CSDN…

Docker Desktop 构建java8基础镜像jdk安装配置失效解决

Docker Desktop 构建java8基础镜像jdk安装配置失效解决 文章目录 1.问题2.解决方法3.总结 1.问题 之前的好几篇文章中分享了在Linux(centOs上)和windows10上使用docker和docker Desktop环境构建java8的最小jre基础镜像&#xff0c;前几天我使用Docker Desktop环境重新构建了一个…

【Uniapp-Vue3】页面生命周期onLoad和onReady

一、onLoad函数 onLoad在页面载入时触发&#xff0c;多用于页面跳转时进行参数传递。 我们在跳转的时候传递参数name和age: 接受参数&#xff1a; import {onLoad} from "dcloudio/uni-app"; onLoad((e)>{...}) 二、onReady函数 页面生命周期函数中的onReady其…

【STM32-学习笔记-8-】I2C通信

文章目录 I2C通信Ⅰ、硬件电路Ⅱ、IIC时序基本单元① 起始条件② 终止条件③ 发送一个字节④ 接收一个字节⑤ 发送应答⑥ 接收应答 Ⅲ、IIC时序① 指定地址写② 当前地址读③ 指定地址读 Ⅳ、MPU6050---6轴姿态传感器&#xff08;软件I2C&#xff09;1、模块内部电路2、寄存器地…

WINFORM - DevExpress -> devexpress版--报表(report)

devexpress report模板 1.安装devexpress(DevExpress 总结【安装、案例】_caoyanchao1的博客-CSDN博客_devexpress) 2.新建vs项目且添加standarReportDesigner控件 涛神设计器注意 3.运行后步骤 点击New Report DetailReport 涛神设计器checkbox(3.复选框只认boolean类型的 b…

亿道三防丨三防笔记本是什么意思?和普通笔记本的优势在哪里?

三防笔记本是什么意思&#xff1f;和普通笔记本的优势在哪里&#xff1f; 在现代社会中&#xff0c;笔记本电脑已经成为人们工作和生活中不可或缺的一部分。然而&#xff0c;在一些特殊行业或环境中&#xff0c;普通笔记本电脑由于其脆弱性和对环境条件的敏感性&#xff0c;往…

opencv的NLM去噪算法

NLM&#xff08;Non-Local Means&#xff09;去噪算法是一种基于图像块&#xff08;patch&#xff09;相似性的去噪方法。其基本原理是&#xff1a; 图像块相似性&#xff1a;算法首先定义了一个搜索窗口&#xff08;search window&#xff09;&#xff0c;然后在该窗口内寻找…

ElasticSearch在Windows环境搭建测试

引子 也持续关注大数据相关内容一段时间&#xff0c;大数据内容很多。想了下还是从目前项目需求侧出发&#xff0c;进行相关学习。Elasticsearch&#xff08;ES&#xff09;是位于 Elastic Stack&#xff08;ELK stack&#xff09; 核心的分布式搜索和分析引擎。Logstash 和 B…

Docker安装和卸载(centos)

Docker安装和卸载 一&#xff0c;已安装Docker&#xff0c;卸载Docker 1.方法一 sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine​ 如果出现以下提示就证明没卸载…

《自动驾驶与机器人中的SLAM技术》ch8:基于 IESKF 的紧耦合 LIO 系统

目录 基于 IESKF 的紧耦合 LIO 系统 1 IESKF 的状态变量和运动过程 1.1 对名义状态变量的预测 1.2 对误差状态变量的预测及对协方差矩阵的递推 2 观测方程中的迭代过程 3 高维观测中的等效处理 4 NDT 和 卡尔曼滤波的联系 5 紧耦合 LIO 系统的主要流程 5.1 IMU 静止初始化 …

认识机器学习中的经验风险最小化准则

经验风险最小化准则的定义 经验风险最小化&#xff08;Empirical Risk Minimization&#xff0c;简称 ERM&#xff09;是机器学习中的一种基本理论框架&#xff0c;用于指导模型的训练过程。其核心思想是通过最小化训练数据上的损失函数来优化模型参数&#xff0c;从而提高模型…

使用Deepseek搭建类Cursor编辑器

使用Deepseek搭建类Cursor编辑器 Cursor想必大家都用过了&#xff0c;一个非常强大的AI编辑器&#xff0c;在代码编写上为我们省了不少事&#xff0c;但高昂的价格让我们望而却步&#xff0c;这篇文章教你在Visual Studio Code上搭建一个类Cursor的代码编辑器。 步骤其实非常…

SpringCloud系列教程:微服务的未来(十一)服务注册、服务发现、OpenFeign快速入门

本篇博客将通过实例演示如何在 Spring Cloud 中使用 Nacos 实现服务注册与发现&#xff0c;并使用 OpenFeign 进行服务间调用。你将学到如何搭建一个完整的微服务通信框架&#xff0c;帮助你快速开发可扩展、高效的分布式系统。 目录 前言 服务注册和发现 服务注册 ​编辑 …

【MySQL】SQL菜鸟教程(一)

1.常见命令 1.1 总览 命令作用SELECT从数据库中提取数据UPDATE更新数据库中的数据DELETE从数据库中删除数据INSERT INTO向数据库中插入新数据CREATE DATABASE创建新数据库ALTER DATABASE修改数据库CREATE TABLE创建新表ALTER TABLE变更数据表DROP TABLE删除表CREATE INDEX创建…

【Vue实战】Vuex 和 Axios 拦截器设置全局 Loading

目录 1. 效果图 2. 思路分析 2.1 实现思路 2.2 可能存在的问题 2.2.1 并发请求管理 2.2.2 请求快速响应和缓存带来的问题 3. 代码实现 4. 总结 1. 效果图 如下图所示&#xff0c;当路由变化或发起请求时&#xff0c;出现 Loading 等待效果&#xff0c;此时页面不可见。…

无源器件-电容

电容器件的参数 基本概念由中学大学物理或电路分析内容获得&#xff0c;此处不做过多分析。 电容的产量占全球电子元器件产品的40%以上。 单位&#xff1a;法拉 F&#xff1b;1F10^6uF&#xff1b;电路中常见的104电容就是10*10^4pF100nF0.1uF C为电容&#xff0c;Rp为绝缘电…