【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.pswp.cn/web/65898.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/65898.shtml
英文地址,請注明出處:http://en.pswp.cn/web/65898.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

SQL Server中可以通過擴展事件來自動抓取阻塞

在SQL Server中可以通過擴展事件來自動抓取阻塞&#xff0c;以下是詳細流程&#xff1a; 開啟阻塞跟蹤配置&#xff1a; ? 執行以下SQL語句來啟用相關配置&#xff1a; EXEC sp_configureshow advanced options, 1; RECONFIGURE; EXEC sp_configure blocked process thresh…

DNS解析域名簡記

域名通常是由: 權威域名.頂級域名.根域名組成的。 從左往右&#xff0c;級別依次升高&#xff0c;這和外國人從小范圍到大范圍的說話習慣相關。&#xff08;我們自己是更習慣先說大范圍再說小范圍&#xff0c;如XX省XX市XX區XX路&#xff09; DNS解析域名時&#xff0c;會先查…

【爬蟲】單個網站鏈接爬取文獻數據:標題、摘要、作者等信息

源碼鏈接&#xff1a; https://github.com/Niceeggplant/Single—Site-Crawler.git 一、項目概述 從指定網頁中提取文章關鍵信息的工具。通過輸入文章的 URL&#xff0c;程序將自動抓取網頁內容 二、技術選型與原理 requests 庫&#xff1a;這是 Python 中用于發送 HTTP 請求…

關于掃描模型 拓撲 和 傳遞貼圖工作流筆記

關于MAYA拓撲和傳遞貼圖的操作筆記 一、拓撲低模: 1、拓撲工作區位置: 1、準備出 目標 高模。 (高模的狀態如上 ↑ )。 2、打開頂點吸附,和建模工具區,選擇四邊形繪制. 2、拓撲快捷鍵使…

解決無法遠程管理Windows Server服務器核心安裝

問題 有時&#xff0c;人們會為了節省運算資源&#xff0c;例如運行Hyper-V虛擬機&#xff0c;而選擇Windows Server核心安裝&#xff0c;即無圖形化界面。這時&#xff0c;我們就只能通過Powershell命令對其進行操控&#xff0c;或為了獲得圖形化界面而使用遠程服務器管理工具…

SQL HAVING 子句深入解析

SQL HAVING 子句深入解析 介紹 SQL&#xff08;Structured Query Language&#xff09;是一種用于管理關系數據庫管理系統的標準編程語言。在SQL中&#xff0c;HAVING子句是與GROUP BY子句一起使用的&#xff0c;用于篩選分組后的數據。它根據聚合函數的結果對組進行條件過濾…

【計算機網絡】lab7 TCP協議

&#x1f308; 個人主頁&#xff1a;十二月的貓-CSDN博客 &#x1f525; 系列專欄&#xff1a; &#x1f3c0;計算機網絡_十二月的貓的博客-CSDN博客 &#x1f4aa;&#x1f3fb; 十二月的寒冬阻擋不了春天的腳步&#xff0c;十二點的黑夜遮蔽不住黎明的曙光 目錄 1. 實驗目的…

JavaRestClient 客戶端初始化+索引庫操作

1. 介紹 ES官方提供了各種不同語言的客戶端&#xff0c;用來操作ES。這些客戶端的本質就是組裝DSL語句&#xff0c;通過http請求發送給ES。 Elasticsearch目前最新版本是8.0&#xff0c;其java客戶端有很大變化。不過大多數企業使用的還是8以下版本 2. 客戶端初始化 在elastic…

【JVM-2.2】使用JConsole監控和管理Java應用程序:從入門到精通

在Java應用程序的開發和運維過程中&#xff0c;監控和管理應用程序的性能和資源使用情況是非常重要的。JConsole是Java Development Kit&#xff08;JDK&#xff09;自帶的一款圖形化監控工具&#xff0c;它可以幫助開發者實時監控Java應用程序的內存、線程、類加載以及垃圾回收…

基于html5實現音樂錄音播放動畫源碼

源碼介紹 基于html5實現音樂錄音播放動畫源碼是一款類似Shazam的UI&#xff0c;點擊按鈕后&#xff0c;會變成為一個監聽按鈕。旁邊會有音符飛入這個監聽按鈕&#xff0c;最后轉換成一個音樂播放器。 效果預覽 源碼獲取 基于html5實現音樂錄音播放動畫源碼

《自動駕駛與機器人中的SLAM技術》ch1:自動駕駛

目錄 1.1 自動駕駛技術 1.2 自動駕駛中的定位與地圖 1.1 自動駕駛技術 1.2 自動駕駛中的定位與地圖 L2 在技術實現上會更傾向于實時感知&#xff0c;乃至可以使用感知結果直接構建鳥瞰圖&#xff08;bird eye view, BEV&#xff09;&#xff0c;而 L4 則依賴離線地圖。 高精地…

抖音矩陣是什么

抖音矩陣是指在同一品牌或個人IP下&#xff0c;通過創建多個不同定位的抖音賬號&#xff08;如主號、副號、子號等&#xff09;&#xff0c;形成一個有機的整體&#xff0c;以實現多維度、多層次的內容覆蓋和用戶互動。以下是關于抖音矩陣的詳細介紹&#xff1a; 抖音矩陣的類…

【開發日記】Docker修改國內鏡像源

1、問題&#xff1a; docker pull鏡像時提示以下內容&#xff1a; Error response from daemon: Get "https://registry-1.docker.io/v2/": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)2、解決 ①…

Centos7 解決Maven scope=system依賴jar包沒有打包到啟動jar包中的問題(OpenCV-4.10)

最近項目中遇到問題,OpenCV的Jar包在程序打包后,找不到相關的類,比如MAT,這個時候懷疑OpenCV_4.10的Jar沒有和應用程序一起打包,后面排查到確實是沒有打包進去,特此記錄,便于日后查閱。 <!-- 加載lib目錄下的opencv包 --> <dependency><groupId>org…

【后端面試總結】Golang可能的內存泄漏場景及應對策略

Golang可能的內存泄漏場景及應對策略 一、引言 Golang作為一種高性能、并發友好的編程語言&#xff0c;其內置的垃圾回收機制極大地簡化了內存管理。然而&#xff0c;這并不意味著開發者可以完全忽視內存泄漏問題。在實際開發中&#xff0c;由于不當的資源管理、循環引用、以…

【LeetCode】:刪除回文子數組【困難】

class Solution { public:// 思考:能否用滾動數組進行優化int minimumMoves(vector<int>& arr) {// 定義狀態dp[i][j]為i-j的最小步數int n arr.size();vector<vector<int>> dp(n, vector<int>(n, 1e9 7));// 可以把這 1 次理解為一種 最小操作單…

ChatGPT入門之文本情緒識別:先了解LSTM如何處理文字序列

文章目錄 0. 首先聊聊什么是RNN1. 理解LSTM&#xff0c;從數據如何喂給 LSTM開始2. LSTM每個門是如何處理序列數據的&#xff1f;2.1 遺忘門&#xff08;Forget Gate&#xff09;&#xff1a;該忘掉哪些信息&#xff1f;2.2 輸入門&#xff08;Input Gate&#xff09;&#xff…

AI學習路線圖-邱錫鵬-神經網絡與深度學習

1 需求 神經網絡與深度學習 2 接口 3 示例 4 參考資料

C#用直線和曲線抗鋸齒

使用 GDI 繪制一條線時&#xff0c;要提供線條的起點和終點&#xff0c;但不必提供有關線條上各個像素的任何信息。 GDI 與顯示驅動程序軟件協同工作&#xff0c;確定將打開哪些像素以在特定顯示設備上顯示該線條。 效果對比 代碼實現 關鍵代碼 e.Graphics.SmoothingMode Sm…

【opencv】第8章 圖像輪廓與圖像分割修復

8.1 查找并繪制輪廓 一個輪廓一般對應一系列的點&#xff0c;也就是圖像中的一條曲線。其表示方法可能 根據不同的情況而有所不同。在OpenCV 中&#xff0c;可以用findContours()函數從二值圖 像中查找輪廓 8.1.1 尋找輪廓&#xff1a; findContours() 函數 findContours) 函…