0. 概述

  • 文本目标基于Cherryusb官方例程audio_v1_mic_speaker_multichan_template.c,底层对接STM32的内置ADC和DAC,实现录音和播放。
  • 通过电脑播放歌曲,板子发出声音。通过电脑录音机开启录音,板子作为麦克风采集声音,并在电脑上播放。当PC和板子进行协同工作后,操作一下子变得方便很多。
  • 为了达到这个目标,首先需要在STM32上调通ADC+DMA以及DAC+DMA的回环测试。
  • 我们计划通过DAC+DMA输出一个标准sin信号,通过PA5引脚输出,然后ADC+DMA采集PA1_C引脚信号,采集一段时间后,串口打印输出,并导入到excel表中绘图。外部将PA5与PA1_C连起来,因此预期ADC采集到的也是正弦波。
  • 我们的开发板是STM32H750-ARTPI,环境是rt-thread+cherryusb

在这里插入图片描述

1. TIM (作为触发源) + 目标外设 + DMA (负责数据搬运) 的完美组合模式

1.1 基本的DAC, ADC

在 STM32 中,这种 TIM (作为触发源) + 目标外设 + DMA (负责数据搬运) 的组合模式非常强大且常见,核心思想是利用硬件实现精确的定时触发和自动化的数据传输,从而最大程度地解放 CPU。
其中DAC+TIM+DMA 和 ADC+TIM+DMA 是这种模式的最经典应用:

  1. DAC+TIM+DMA:
    • TIM: 作为触发源 (TRGO),周期性地触发 DAC 转换。
    • DAC: 在每次 TIM 触发时,执行一次转换。
    • DMA: 在 DAC 准备好接收新数据时(由 DAC 的 DMA 请求触发),自动将内存中的数据缓冲区中的下一个值搬运到 DAC 的数据保持寄存器 (DHRx)。
    • 关系: TIM (Trigger) -> DAC (执行转换) + DAC (请求) -> DMA (供给数据)。 DMA 是给 DAC 供给数据。
  2. ADC+TIM+DMA:
    • TIM: 作为触发源 (TRGO),周期性地触发 ADC 采样转换。
    • ADC: 在每次 TIM 触发时,执行一次采样和转换。
    • DMA: 在 ADC 完成转换(数据就绪)时(由 ADC 的 DMA 请求触发),自动将 ADC 数据寄存器 (DR) 中的结果搬运到内存的数据缓冲区。
    • 关系: TIM (Trigger) -> ADC (执行转换) + ADC (请求) -> DMA (取走数据)。 DMA 是从 ADC 取走数据。

关键在于目标外设: 这种模式能否应用,核心在于目标外设是否支持外部触发启动其操作,并且是否支持产生 DMA 请求来传输与其数据寄存器相关的数据。

1.2 更多类似的组合

  • TIM2 + SPI + DMA 需要间接实现(比如利用TIM去同步DMA,控制DMA的速率),这种有时候用于精确定时触发并采样外部SPI接口ADC时非常有用
  • TIM2 + TIM + DMA,属于DMA的级联使用,思想与DAC一样。
  • TIM + DCMI (摄像头接口) + DMA: TIM 触发 DCMI 捕获一帧或一行图像,DMA 将捕获到的图像数据从 DCMI 数据寄存器搬运到内存。 (DMA 取走数据)
  • TIM + SAI (串行音频接口) + DMA: TIM 触发 SAI 开始播放/录制一个音频块 (Block),DMA 为 SAI 供给发送数据 / 取走接收数据。类似于 SPI。
  • TIM + USART/UART + DMA: 虽然 USART/UART 通常使用自身波特率定时器,但在特定需要外部精确同步触发的场景下,也可以配置为使用 TIM 触发传输启动,并用 DMA 搬运数据。(DMA 供给发送数据 / 取走接收数据)

1.3 TIM + 目标外设 + DMA传输模式总结

以STM32H7来说,有些外设支持定时器Trigger功能(比如ADC/DAC),这种可以直接使用TIM的溢出Event来进行触发,控制DMA速率。这种传输模式如下所示。这种方式相当于直接控制的源头。
在这里插入图片描述

但大部分外设都不支持定时器Trigger功能(比如SPI/UART/I2C/GPIO等),这种在STM32H7里面,也可以利用定时器进行控制DMA速率。在STM32H7中引入DMA请求生成器,可软件或硬件触发DMA请求,无需外设直接请求。通过定时器的溢出Event作为DMA请求发生器的输入,就可以实现控制DMA速率。这种传输模式如下所示。这种方式相当于控制DMA传输路径。
在这里插入图片描述

这种模式应用的一篇参考文章
GitHub - concerntrate/ADS8688_full_speed

2. ADC+DMA的CubeMX配置

在这里插入图片描述

我们选择ARTPI开发板P2排针上的PA1_C引脚作为ADC输入,它对应ADC1的CH1。

在这里插入图片描述

ADC的参数配置是重点,首先配置外部触发源,选择Timer2 Trigger Out Event

在这里插入图片描述

  • Scan Conv Mode:关闭(这个是针对多通道转换使用的。此处只有一个通道,因此不用)
  • Continous Conv Mode:关闭(这个触发一次,将会连续不停的转换,相当于FreeRunning Mode。此时将不受外部Trigger的控制。因此不要开启)
  • Discontinous Conv Mode:关闭(这种是针对多通道转换配置使用的。此处只有一个通道,因此不用)
  • Conversion Data Management… 必须选择DMA Circular Mode (这个是配合DMA Circular Mode使用的。这里很容易遗漏。笔者在这个地方漏掉了,折腾了几个小时才发现)
  • ADC的分频比和rank采样时间,可以自行设置,也可以后面在程序中修改。

在这里插入图片描述

  • DMA的irq默认开启
  • 对于stm32h7 ADC的irq实测必须开启。如果不开,DMA+ADC跑个几十次转换就挂断了(查看代码,HAL_ADC_Start_DMA中开了ADC_IT_OVR标志)。因为ADC产生了error清不掉。如果开了irq,那么会进入中断清错误标志。
    在这里插入图片描述
    在这里插入图片描述

DMA配置为Circular模式,要开Fifo,使用1/2 Fifo,配置驱动源头为4 bursts。驱动源头是ADC。
关于DMA Fifo的配置,很有讲究。如果深究,可以写一篇文章。这里记住结论就差不多了:
1)对于1/2 fifo,绝大部分情况都是够用的
2)是配置Memory burst还是配置外设burst呢? 结论是,谁是驱动源头,谁就配置burst。比如这里是ADC->Memory,因此ADC是驱动源头,因此配置ADC为4 bursts。

在这里插入图片描述

  • 时钟配100MHz。
  • 实际发现不同的fw固件库,生成的SystemClock_Config函数并不通用。笔者因为这个问题,也折腾了一个小时才发现。

3. DAC+DMA的CubeMX配置

在这里插入图片描述

  • 这里选CH2,也就是PA5。
  • 勾选Buffer Enable,开启Timer2 Trigger Out Event

在这里插入图片描述
DMA irq默认开启。DAC的irq不用打开。

在这里插入图片描述

  • DMA配置为Circular模式,要开Fifo,使用1/2 Fifo,配置驱动源头为4 bursts。驱动源头是Memory。
  • DAC的时钟不用配,DAC默认使用的是APB2时钟

4. TIM2的CubeMX配置

在这里插入图片描述

  • TIM2使用内部时钟(APB2x2=240MHz),配置PSC=24,ARR=100,则输出100kHz。
  • 配置TRGO输出为Update Event

5. main.c程序关键点说明

  • 因为使用的是stm32h7,当使用DMA的时候,必须开启mpu和cache。我们是在linker.sct文件中定义了一个noncacheable区域,然后将DMA的buffer放到这个noncacheable区域中
  • DMA buffer的区域,尽量按照32 bytes对齐(这样也符合cache的需求,虽然我们针对DMA buffer没有使用cache)
#define USB_NOCACHE_RAM_SECTION __attribute__((section(".noncacheable")))
#define USB_MEM_ALIGNX __attribute__((aligned(32)))
USB_NOCACHE_RAM_SECTION USB_MEM_ALIGNX uint16_t dac_buffer[SIN_TABLE_SIZE * 2]; // Double buffer for DMA
USB_NOCACHE_RAM_SECTION USB_MEM_ALIGNX uint16_t adc_buffer[ADC_BUFFER_SIZE * 2]; // Double buffer for DMAint mpu_init(void)
{MPU_Region_InitTypeDef MPU_InitStruct;/* Disable the MPU */HAL_MPU_Disable();/* Configure the MPU attributes for no-cache SRAM, used for cherryusb */MPU_InitStruct.Enable            = MPU_REGION_ENABLE;MPU_InitStruct.BaseAddress       = 0x24070000;MPU_InitStruct.Size              = MPU_REGION_SIZE_64KB;MPU_InitStruct.AccessPermission  = MPU_REGION_FULL_ACCESS;MPU_InitStruct.IsBufferable      = MPU_ACCESS_NOT_BUFFERABLE;MPU_InitStruct.IsCacheable       = MPU_ACCESS_NOT_CACHEABLE;MPU_InitStruct.IsShareable       = MPU_ACCESS_NOT_SHAREABLE;MPU_InitStruct.Number            = MPU_REGION_NUMBER5;MPU_InitStruct.TypeExtField      = MPU_TEX_LEVEL1;MPU_InitStruct.SubRegionDisable  = 0X00;MPU_InitStruct.DisableExec       = MPU_INSTRUCTION_ACCESS_ENABLE;HAL_MPU_ConfigRegion(&MPU_InitStruct);   /* Enable the MPU */HAL_MPU_Enable(MPU_PRIVILEGED_DEFAULT);SCB_EnableICache();SCB_EnableDCache();return 0;
}

CubeMX_Config\CubeMX_Config _my.sct

; *************************************************************
; *** Scatter-Loading Description File generated by uVision ***
; *************************************************************LR_IROM1 0x08000000 0x00020000  {    ; load region size_regionER_IROM1 0x08000000 0x00020000  {  ; load address = execution address*.o (RESET, +First)*(InRoot$$Sections).ANY (+RO).ANY (+XO)}RW_IRAM1 0x20000000 0x00020000  {  ; RW data.ANY (+RW +ZI)}RW_IRAM2 0x24000000 0x00080000  {.ANY (+RW +ZI)}RW_IRAM_NOCACHE 0x24070000 0x00010000  {  ; 64KB non-cacheable RAM*.o (.noncacheable)}
}
  • ADC和DAC的DMA使用双buffer(传输和半传输完成中断)
  generate_sin_table();fill_dac_buffer();HAL_TIM_Base_Start(&htim2);HAL_DAC_Start_DMA(&hdac1, DAC_CHANNEL_2, (uint32_t *)dac_buffer, SIN_TABLE_SIZE * 2, DAC_ALIGN_12B_R);HAL_ADC_Start_DMA(&hadc1, (uint32_t *)adc_buffer, ADC_BUFFER_SIZE * 2);    
  • 注意DAC ch2的传输和半传输回调函数,是在stm32h7xx_hal_dac_ex.c库中,名字也不同
void HAL_DACEx_ConvHalfCpltCallbackCh2(DAC_HandleTypeDef* hdac)
{}void HAL_DACEx_ConvCpltCallbackCh2(DAC_HandleTypeDef* hdac)
{}
  • 串口printf函数,需要重写fputc,特别注意,需要#include <stdio.h>,并要在keil options中勾选use microlib
int fputc(int ch, FILE *f)
{HAL_UART_Transmit(&huart4, (uint8_t *)&ch, 1, 0xFFFF);return ch;
}

在这里插入图片描述

  • 当ADC完成一轮转换后(注意ADC的buffer长度是1024x2个uint16_t),进入完成回调函数,停止ADC DMA,拉高TxCplt标志。 main loop中检测到TxCplt标志后,开始打印ADC DMA buffer的数据。
void HAL_ADC_ConvHalfCpltCallback(ADC_HandleTypeDef* hadc)
{}void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)
{TxCplt++;if(TxCplt>=2){HAL_ADC_Stop_DMA(&hadc1);}}int main(void)
{......printf("hello world!\n");while (1){/* USER CODE END WHILE */if(TxCplt>=2){TxCplt=0;for(int i=0; i < sizeof(adc_buffer)/2; i++){printf("%d\n",adc_buffer[i]);}}
}

5. 先进入调试,看看TIM, ADC, DAC, DMA的运行情况

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

  • 可以看到几个外设都是在连续的动,说明外设已经在DMA模式运行起来了。
  • 然后通过在几个中断和回调函数中打断点,能够正常进入,说明整个运行流程都是正常的。
  • 调试是非常关键的一步,这个确认好了,就可以用示波器看波形了。

6. Sine->DAC->ADC->printf->plot回环测试,以及示波器波形

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

7. 总结

  • ADC的参数配置中,需要特别设置Conversion Data Management… 选择DMA Circular Mode。这个很容易遗漏
  • 对于STM32H7的ADC,必须要同时开启ADC中断,才能正常使用DMA模式。(对于STM32F1系列不用开ADC中断)
  • 定时器Timer2不用开中断。DAC不用开中断。
  • 对于DMA fifo的配置有讲究
  • DAC ch2的传输和半传输回调函数,是在stm32h7xx_hal_dac_ex.c库中,名字也不同
  • 使用printf, 必须勾选编译器的use Microlib选项
  • 建议先调试,确认外设运行ok后,再进行测试

8. 附录1:几个关键文件内容

main.c

/* USER CODE BEGIN Header */
/********************************************************************************* @file           : main.c* @brief          : Main program body******************************************************************************* @attention** Copyright (c) 2025 STMicroelectronics.* All rights reserved.** This software is licensed under terms that can be found in the LICENSE file* in the root directory of this software component.* If no LICENSE file comes with this software, it is provided AS-IS.********************************************************************************/
/* USER CODE END Header */
/* Includes ------------------------------------------------------------------*/
#include "main.h"
#include "string.h"
#include "stdio.h"/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes *//* USER CODE END Includes *//* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN PTD *//* USER CODE END PTD *//* Private define ------------------------------------------------------------*/
/* USER CODE BEGIN PD *//* USER CODE END PD *//* Private macro -------------------------------------------------------------*/
/* USER CODE BEGIN PM *//* USER CODE END PM *//* Private variables ---------------------------------------------------------*/ADC_HandleTypeDef hadc1;
DMA_HandleTypeDef hdma_adc1;DAC_HandleTypeDef hdac1;
DMA_HandleTypeDef hdma_dac1_ch2;TIM_HandleTypeDef htim2;UART_HandleTypeDef huart4;/* USER CODE BEGIN PV *//* USER CODE END PV *//* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
void PeriphCommonClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_DMA_Init(void);
static void MX_UART4_Init(void);
static void MX_ADC1_Init(void);
static void MX_DAC1_Init(void);
static void MX_TIM2_Init(void);
/* USER CODE BEGIN PFP */
static int mpu_init(void);
/* USER CODE END PFP *//* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */
// Add before ADC_DAC_DMA_Init function
#define USB_NOCACHE_RAM_SECTION __attribute__((section(".noncacheable")))
#define USB_MEM_ALIGNX __attribute__((aligned(32)))#define SIN_TABLE_SIZE 128
#define ADC_BUFFER_SIZE 1024
#define ADC_BIG_BUFFER_SIZE (ADC_BUFFER_SIZE * 16)
#define M_PI 3.14159265358979323846uint16_t sin_table[SIN_TABLE_SIZE];
USB_NOCACHE_RAM_SECTION USB_MEM_ALIGNX uint16_t dac_buffer[SIN_TABLE_SIZE * 2]; // Double buffer for DMA
USB_NOCACHE_RAM_SECTION USB_MEM_ALIGNX uint16_t adc_buffer[ADC_BUFFER_SIZE * 2]; // Double buffer for DMA
uint16_t adc_big_buffer[ADC_BIG_BUFFER_SIZE];
volatile uint32_t adc_buffer_index = 0;
volatile uint32_t TxCplt=0;
volatile uint32_t RxCplt=0;static void generate_sin_table(void)
{for (int i = 0; i < SIN_TABLE_SIZE; i++){float angle = 2 * M_PI * i / SIN_TABLE_SIZE;sin_table[i] = (uint16_t)((sin(angle)*0.95 + 1.0f) * 2047.5f); // 12-bit DAC, 0-4095 range}
}static void fill_dac_buffer(void)
{for (int i = 0; i < SIN_TABLE_SIZE; i++){dac_buffer[i] = sin_table[i];dac_buffer[i + SIN_TABLE_SIZE] = sin_table[i];}
}int fputc(int ch, FILE *f)
{HAL_UART_Transmit(&huart4, (uint8_t *)&ch, 1, 0xFFFF);return ch;
}/* USER CODE END 0 *//*** @brief  The application entry point.* @retval int*/
int main(void)
{/* USER CODE BEGIN 1 *//* USER CODE END 1 *//* MCU Configuration--------------------------------------------------------*//* Reset of all peripherals, Initializes the Flash interface and the Systick. */HAL_Init();/* USER CODE BEGIN Init *//* USER CODE END Init *//* Configure the system clock */SystemClock_Config();/* Configure the peripherals common clocks */PeriphCommonClock_Config();/* USER CODE BEGIN SysInit */mpu_init();/* USER CODE END SysInit *//* Initialize all configured peripherals */MX_GPIO_Init();MX_DMA_Init();MX_UART4_Init();MX_ADC1_Init();MX_DAC1_Init();MX_TIM2_Init();/* USER CODE BEGIN 2 */generate_sin_table();fill_dac_buffer();HAL_TIM_Base_Start(&htim2);HAL_DAC_Start_DMA(&hdac1, DAC_CHANNEL_2, (uint32_t *)dac_buffer, SIN_TABLE_SIZE * 2, DAC_ALIGN_12B_R);HAL_ADC_Start_DMA(&hadc1, (uint32_t *)adc_buffer, ADC_BUFFER_SIZE * 2);    /* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */printf("hello world!\n");while (1){/* USER CODE END WHILE */if(TxCplt>=2){TxCplt=0;for(int i=0; i < sizeof(adc_buffer)/2; i++){printf("%d\n",adc_buffer[i]);}}/* USER CODE BEGIN 3 */}/* USER CODE END 3 */
}/*** @brief System Clock Configuration* @retval None*/
void SystemClock_Config(void)
{RCC_OscInitTypeDef RCC_OscInitStruct = {0};RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};/** Supply configuration update enable*/HAL_PWREx_ConfigSupply(PWR_LDO_SUPPLY);/** Configure the main internal regulator output voltage*/__HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE0);while(!__HAL_PWR_GET_FLAG(PWR_FLAG_VOSRDY)) {}/** Initializes the RCC Oscillators according to the specified parameters* in the RCC_OscInitTypeDef structure.*/RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI48|RCC_OSCILLATORTYPE_LSI|RCC_OSCILLATORTYPE_HSE;RCC_OscInitStruct.HSEState = RCC_HSE_ON;RCC_OscInitStruct.LSIState = RCC_LSI_ON;RCC_OscInitStruct.HSI48State = RCC_HSI48_ON;RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;RCC_OscInitStruct.PLL.PLLM = 5;RCC_OscInitStruct.PLL.PLLN = 192;RCC_OscInitStruct.PLL.PLLP = 2;RCC_OscInitStruct.PLL.PLLQ = 2;RCC_OscInitStruct.PLL.PLLR = 2;RCC_OscInitStruct.PLL.PLLRGE = RCC_PLL1VCIRANGE_2;RCC_OscInitStruct.PLL.PLLVCOSEL = RCC_PLL1VCOWIDE;RCC_OscInitStruct.PLL.PLLFRACN = 0;if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK){Error_Handler();}/** Initializes the CPU, AHB and APB buses clocks*/RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2|RCC_CLOCKTYPE_D3PCLK1|RCC_CLOCKTYPE_D1PCLK1;RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;RCC_ClkInitStruct.SYSCLKDivider = RCC_SYSCLK_DIV1;RCC_ClkInitStruct.AHBCLKDivider = RCC_HCLK_DIV2;RCC_ClkInitStruct.APB3CLKDivider = RCC_APB3_DIV2;RCC_ClkInitStruct.APB1CLKDivider = RCC_APB1_DIV2;RCC_ClkInitStruct.APB2CLKDivider = RCC_APB2_DIV2;RCC_ClkInitStruct.APB4CLKDivider = RCC_APB4_DIV2;if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_4) != HAL_OK){Error_Handler();}
}/*** @brief Peripherals Common Clock Configuration* @retval None*/
void PeriphCommonClock_Config(void)
{RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0};/** Initializes the peripherals clock*/PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_FMC|RCC_PERIPHCLK_ADC|RCC_PERIPHCLK_SDMMC|RCC_PERIPHCLK_SPI2|RCC_PERIPHCLK_SPI4|RCC_PERIPHCLK_LTDC;PeriphClkInitStruct.PLL2.PLL2M = 2;PeriphClkInitStruct.PLL2.PLL2N = 64;PeriphClkInitStruct.PLL2.PLL2P = 8;PeriphClkInitStruct.PLL2.PLL2Q = 2;PeriphClkInitStruct.PLL2.PLL2R = 4;PeriphClkInitStruct.PLL2.PLL2RGE = RCC_PLL2VCIRANGE_3;PeriphClkInitStruct.PLL2.PLL2VCOSEL = RCC_PLL2VCOWIDE;PeriphClkInitStruct.PLL2.PLL2FRACN = 0;PeriphClkInitStruct.PLL3.PLL3M = 5;PeriphClkInitStruct.PLL3.PLL3N = 160;PeriphClkInitStruct.PLL3.PLL3P = 8;PeriphClkInitStruct.PLL3.PLL3Q = 8;PeriphClkInitStruct.PLL3.PLL3R = 24;PeriphClkInitStruct.PLL3.PLL3RGE = RCC_PLL3VCIRANGE_2;PeriphClkInitStruct.PLL3.PLL3VCOSEL = RCC_PLL3VCOWIDE;PeriphClkInitStruct.PLL3.PLL3FRACN = 0;PeriphClkInitStruct.FmcClockSelection = RCC_FMCCLKSOURCE_PLL2;PeriphClkInitStruct.SdmmcClockSelection = RCC_SDMMCCLKSOURCE_PLL2;PeriphClkInitStruct.Spi123ClockSelection = RCC_SPI123CLKSOURCE_PLL3;PeriphClkInitStruct.Spi45ClockSelection = RCC_SPI45CLKSOURCE_PLL3;PeriphClkInitStruct.AdcClockSelection = RCC_ADCCLKSOURCE_PLL2;if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK){Error_Handler();}
}/*** @brief ADC1 Initialization Function* @param None* @retval None*/
static void MX_ADC1_Init(void)
{/* USER CODE BEGIN ADC1_Init 0 *//* USER CODE END ADC1_Init 0 */ADC_MultiModeTypeDef multimode = {0};ADC_ChannelConfTypeDef sConfig = {0};/* USER CODE BEGIN ADC1_Init 1 *//* USER CODE END ADC1_Init 1 *//** Common config*/hadc1.Instance = ADC1;hadc1.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV1;hadc1.Init.Resolution = ADC_RESOLUTION_16B;hadc1.Init.ScanConvMode = ADC_SCAN_DISABLE;hadc1.Init.EOCSelection = ADC_EOC_SINGLE_CONV;hadc1.Init.LowPowerAutoWait = DISABLE;hadc1.Init.ContinuousConvMode = DISABLE;hadc1.Init.NbrOfConversion = 1;hadc1.Init.DiscontinuousConvMode = DISABLE;hadc1.Init.ExternalTrigConv = ADC_EXTERNALTRIG_T2_TRGO;hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_RISING;hadc1.Init.ConversionDataManagement = ADC_CONVERSIONDATA_DMA_CIRCULAR;hadc1.Init.Overrun = ADC_OVR_DATA_PRESERVED;hadc1.Init.LeftBitShift = ADC_LEFTBITSHIFT_NONE;hadc1.Init.OversamplingMode = DISABLE;hadc1.Init.Oversampling.Ratio = 1;if (HAL_ADC_Init(&hadc1) != HAL_OK){Error_Handler();}/** Configure the ADC multi-mode*/multimode.Mode = ADC_MODE_INDEPENDENT;if (HAL_ADCEx_MultiModeConfigChannel(&hadc1, &multimode) != HAL_OK){Error_Handler();}/** Configure Regular Channel*/sConfig.Channel = ADC_CHANNEL_1;sConfig.Rank = ADC_REGULAR_RANK_1;sConfig.SamplingTime = ADC_SAMPLETIME_8CYCLES_5;sConfig.SingleDiff = ADC_SINGLE_ENDED;sConfig.OffsetNumber = ADC_OFFSET_NONE;sConfig.Offset = 0;sConfig.OffsetSignedSaturation = DISABLE;if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK){Error_Handler();}/* USER CODE BEGIN ADC1_Init 2 *//* USER CODE END ADC1_Init 2 */}/*** @brief DAC1 Initialization Function* @param None* @retval None*/
static void MX_DAC1_Init(void)
{/* USER CODE BEGIN DAC1_Init 0 *//* USER CODE END DAC1_Init 0 */DAC_ChannelConfTypeDef sConfig = {0};/* USER CODE BEGIN DAC1_Init 1 *//* USER CODE END DAC1_Init 1 *//** DAC Initialization*/hdac1.Instance = DAC1;if (HAL_DAC_Init(&hdac1) != HAL_OK){Error_Handler();}/** DAC channel OUT2 config*/sConfig.DAC_SampleAndHold = DAC_SAMPLEANDHOLD_DISABLE;sConfig.DAC_Trigger = DAC_TRIGGER_T2_TRGO;sConfig.DAC_OutputBuffer = DAC_OUTPUTBUFFER_ENABLE;sConfig.DAC_ConnectOnChipPeripheral = DAC_CHIPCONNECT_DISABLE;sConfig.DAC_UserTrimming = DAC_TRIMMING_FACTORY;if (HAL_DAC_ConfigChannel(&hdac1, &sConfig, DAC_CHANNEL_2) != HAL_OK){Error_Handler();}/* USER CODE BEGIN DAC1_Init 2 *//* USER CODE END DAC1_Init 2 */}/*** @brief TIM2 Initialization Function* @param None* @retval None*/
static void MX_TIM2_Init(void)
{/* USER CODE BEGIN TIM2_Init 0 *//* USER CODE END TIM2_Init 0 */TIM_ClockConfigTypeDef sClockSourceConfig = {0};TIM_MasterConfigTypeDef sMasterConfig = {0};/* USER CODE BEGIN TIM2_Init 1 *//* USER CODE END TIM2_Init 1 */htim2.Instance = TIM2;htim2.Init.Prescaler = 24;htim2.Init.CounterMode = TIM_COUNTERMODE_UP;htim2.Init.Period = 100;htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;if (HAL_TIM_Base_Init(&htim2) != HAL_OK){Error_Handler();}sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK){Error_Handler();}sMasterConfig.MasterOutputTrigger = TIM_TRGO_UPDATE;sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK){Error_Handler();}/* USER CODE BEGIN TIM2_Init 2 *//* USER CODE END TIM2_Init 2 */}/*** @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 = 115200;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.Init.ClockPrescaler = UART_PRESCALER_DIV1;huart4.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;if (HAL_UART_Init(&huart4) != HAL_OK){Error_Handler();}if (HAL_UARTEx_SetTxFifoThreshold(&huart4, UART_TXFIFO_THRESHOLD_1_8) != HAL_OK){Error_Handler();}if (HAL_UARTEx_SetRxFifoThreshold(&huart4, UART_RXFIFO_THRESHOLD_1_8) != HAL_OK){Error_Handler();}if (HAL_UARTEx_DisableFifoMode(&huart4) != HAL_OK){Error_Handler();}/* USER CODE BEGIN UART4_Init 2 *//* USER CODE END UART4_Init 2 */}/*** Enable DMA controller clock*/
static void MX_DMA_Init(void)
{/* DMA controller clock enable */__HAL_RCC_DMA1_CLK_ENABLE();/* DMA interrupt init *//* DMA1_Stream0_IRQn interrupt configuration */HAL_NVIC_SetPriority(DMA1_Stream0_IRQn, 0, 0);HAL_NVIC_EnableIRQ(DMA1_Stream0_IRQn);/* DMA1_Stream1_IRQn interrupt configuration */HAL_NVIC_SetPriority(DMA1_Stream1_IRQn, 0, 0);HAL_NVIC_EnableIRQ(DMA1_Stream1_IRQn);}/*** @brief GPIO Initialization Function* @param None* @retval None*/
static void MX_GPIO_Init(void)
{/* USER CODE BEGIN MX_GPIO_Init_1 *//* USER CODE END MX_GPIO_Init_1 *//* GPIO Ports Clock Enable */__HAL_RCC_GPIOK_CLK_ENABLE();__HAL_RCC_GPIOC_CLK_ENABLE();__HAL_RCC_GPIOI_CLK_ENABLE();__HAL_RCC_GPIOE_CLK_ENABLE();__HAL_RCC_GPIOB_CLK_ENABLE();__HAL_RCC_GPIOG_CLK_ENABLE();__HAL_RCC_GPIOJ_CLK_ENABLE();__HAL_RCC_GPIOD_CLK_ENABLE();__HAL_RCC_GPIOA_CLK_ENABLE();__HAL_RCC_GPIOF_CLK_ENABLE();__HAL_RCC_GPIOH_CLK_ENABLE();/* USER CODE BEGIN MX_GPIO_Init_2 *//* USER CODE END MX_GPIO_Init_2 */
}/* USER CODE BEGIN 4 */
int mpu_init(void)
{MPU_Region_InitTypeDef MPU_InitStruct;/* Disable the MPU */HAL_MPU_Disable();MPU_InitStruct.Enable = MPU_REGION_ENABLE;MPU_InitStruct.BaseAddress = 0x00;MPU_InitStruct.Size = MPU_REGION_SIZE_4GB;MPU_InitStruct.AccessPermission = MPU_REGION_NO_ACCESS;MPU_InitStruct.IsBufferable = MPU_ACCESS_NOT_BUFFERABLE;MPU_InitStruct.IsCacheable = MPU_ACCESS_NOT_CACHEABLE;MPU_InitStruct.IsShareable = MPU_ACCESS_SHAREABLE;MPU_InitStruct.Number = MPU_REGION_NUMBER0;MPU_InitStruct.TypeExtField = MPU_TEX_LEVEL0;MPU_InitStruct.SubRegionDisable = 0x87;MPU_InitStruct.DisableExec = MPU_INSTRUCTION_ACCESS_DISABLE;/* Configure the MPU attributes as WT for AXI SRAM */MPU_InitStruct.Enable            = MPU_REGION_ENABLE;MPU_InitStruct.BaseAddress       = 0x24000000;MPU_InitStruct.Size              = MPU_REGION_SIZE_512KB;MPU_InitStruct.AccessPermission  = MPU_REGION_FULL_ACCESS;MPU_InitStruct.IsBufferable      = MPU_ACCESS_NOT_BUFFERABLE;MPU_InitStruct.IsCacheable       = MPU_ACCESS_CACHEABLE;MPU_InitStruct.IsShareable       = MPU_ACCESS_NOT_SHAREABLE;MPU_InitStruct.Number            = MPU_REGION_NUMBER1;MPU_InitStruct.TypeExtField      = MPU_TEX_LEVEL0;MPU_InitStruct.SubRegionDisable  = 0X00;MPU_InitStruct.DisableExec       = MPU_INSTRUCTION_ACCESS_ENABLE;HAL_MPU_ConfigRegion(&MPU_InitStruct);#ifdef BSP_USING_SDRAM/* Configure the MPU attributes as WT for SDRAM */MPU_InitStruct.Enable            = MPU_REGION_ENABLE;MPU_InitStruct.BaseAddress       = 0xC0000000;MPU_InitStruct.Size              = MPU_REGION_SIZE_32MB;MPU_InitStruct.AccessPermission  = MPU_REGION_FULL_ACCESS;MPU_InitStruct.IsBufferable      = MPU_ACCESS_NOT_BUFFERABLE;MPU_InitStruct.IsCacheable       = MPU_ACCESS_CACHEABLE;MPU_InitStruct.IsShareable       = MPU_ACCESS_NOT_SHAREABLE;MPU_InitStruct.Number            = MPU_REGION_NUMBER2;MPU_InitStruct.TypeExtField      = MPU_TEX_LEVEL0;MPU_InitStruct.SubRegionDisable  = 0x00;MPU_InitStruct.DisableExec       = MPU_INSTRUCTION_ACCESS_ENABLE;HAL_MPU_ConfigRegion(&MPU_InitStruct);
#endif#ifdef BSP_USING_ETH_H750/* Configure the MPU attributes as Device not cacheablefor ETH DMA descriptors and RX Buffers*/MPU_InitStruct.Enable = MPU_REGION_ENABLE;MPU_InitStruct.BaseAddress = 0x30040000;MPU_InitStruct.Size = MPU_REGION_SIZE_32KB;MPU_InitStruct.AccessPermission = MPU_REGION_FULL_ACCESS;MPU_InitStruct.IsBufferable = MPU_ACCESS_NOT_BUFFERABLE;MPU_InitStruct.IsCacheable = MPU_ACCESS_NOT_CACHEABLE;MPU_InitStruct.IsShareable = MPU_ACCESS_SHAREABLE;MPU_InitStruct.Number = MPU_REGION_NUMBER3;MPU_InitStruct.TypeExtField = MPU_TEX_LEVEL1;MPU_InitStruct.SubRegionDisable = 0x00;MPU_InitStruct.DisableExec = MPU_INSTRUCTION_ACCESS_ENABLE;HAL_MPU_ConfigRegion(&MPU_InitStruct);
#endif/* Configure the MPU attributes as WT for QSPI */MPU_InitStruct.Enable            = MPU_REGION_ENABLE;MPU_InitStruct.BaseAddress       = 0x90000000;MPU_InitStruct.Size              = MPU_REGION_SIZE_8MB;MPU_InitStruct.AccessPermission  = MPU_REGION_FULL_ACCESS;MPU_InitStruct.IsBufferable      = MPU_ACCESS_NOT_BUFFERABLE;MPU_InitStruct.IsCacheable       = MPU_ACCESS_CACHEABLE;MPU_InitStruct.IsShareable       = MPU_ACCESS_NOT_SHAREABLE;MPU_InitStruct.Number            = MPU_REGION_NUMBER4;MPU_InitStruct.TypeExtField      = MPU_TEX_LEVEL0;MPU_InitStruct.SubRegionDisable  = 0X00;MPU_InitStruct.DisableExec       = MPU_INSTRUCTION_ACCESS_ENABLE;HAL_MPU_ConfigRegion(&MPU_InitStruct);/* Configure the MPU attributes for no-cache SRAM, used for cherryusb */MPU_InitStruct.Enable            = MPU_REGION_ENABLE;MPU_InitStruct.BaseAddress       = 0x24070000;MPU_InitStruct.Size              = MPU_REGION_SIZE_64KB;MPU_InitStruct.AccessPermission  = MPU_REGION_FULL_ACCESS;MPU_InitStruct.IsBufferable      = MPU_ACCESS_NOT_BUFFERABLE;MPU_InitStruct.IsCacheable       = MPU_ACCESS_NOT_CACHEABLE;MPU_InitStruct.IsShareable       = MPU_ACCESS_NOT_SHAREABLE;MPU_InitStruct.Number            = MPU_REGION_NUMBER5;MPU_InitStruct.TypeExtField      = MPU_TEX_LEVEL1;MPU_InitStruct.SubRegionDisable  = 0X00;MPU_InitStruct.DisableExec       = MPU_INSTRUCTION_ACCESS_ENABLE;HAL_MPU_ConfigRegion(&MPU_InitStruct);   /* Enable the MPU */HAL_MPU_Enable(MPU_PRIVILEGED_DEFAULT);SCB_EnableICache();SCB_EnableDCache();return 0;}void HAL_ADC_ConvHalfCpltCallback(ADC_HandleTypeDef* hadc)
{}void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)
{TxCplt++;if(TxCplt>=2){HAL_ADC_Stop_DMA(&hadc1);}}void HAL_DACEx_ConvHalfCpltCallbackCh2(DAC_HandleTypeDef* hdac)
{}void HAL_DACEx_ConvCpltCallbackCh2(DAC_HandleTypeDef* hdac)
{}/* USER CODE END 4 *//*** @brief  This function is executed in case of error occurrence.* @retval None*/
void Error_Handler(void)
{/* USER CODE BEGIN Error_Handler_Debug *//* User can add his own implementation to report the HAL error return state */__disable_irq();while (1){}/* USER CODE END Error_Handler_Debug */
}#ifdef  USE_FULL_ASSERT
/*** @brief  Reports the name of the source file and the source line number*         where the assert_param error has occurred.* @param  file: pointer to the source file name* @param  line: assert_param error line source number* @retval None*/
void assert_failed(uint8_t *file, uint32_t line)
{/* USER CODE BEGIN 6 *//* User can add his own implementation to report the file name and line number,ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) *//* USER CODE END 6 */
}
#endif /* USE_FULL_ASSERT */

CubeMX_Config _my.sct

; *************************************************************
; *** Scatter-Loading Description File generated by uVision ***
; *************************************************************LR_IROM1 0x08000000 0x00020000  {    ; load region size_regionER_IROM1 0x08000000 0x00020000  {  ; load address = execution address*.o (RESET, +First)*(InRoot$$Sections).ANY (+RO).ANY (+XO)}RW_IRAM1 0x20000000 0x00020000  {  ; RW data.ANY (+RW +ZI)}RW_IRAM2 0x24000000 0x00080000  {.ANY (+RW +ZI)}RW_IRAM_NOCACHE 0x24070000 0x00010000  {  ; 64KB non-cacheable RAM*.o (.noncacheable)}
}

9. 附录2: CubeMX_Config.ioc

  • 从这个文件可以完整看出各个外设的配置
  • 将这个文件内容保存为CubeMX_Config.ioc,用CubeMX也可以重新打开,恢复整个配置。
#MicroXplorer Configuration settings - do not modify
ADC1.Channel-0\#ChannelRegularConversion=ADC_CHANNEL_1
ADC1.ContinuousConvMode=DISABLE
ADC1.ConversionDataManagement=ADC_CONVERSIONDATA_DMA_CIRCULAR
ADC1.ExternalTrigConv=ADC_EXTERNALTRIG_T2_TRGO
ADC1.IPParameters=Rank-0\#ChannelRegularConversion,Channel-0\#ChannelRegularConversion,SamplingTime-0\#ChannelRegularConversion,OffsetNumber-0\#ChannelRegularConversion,OffsetSignedSaturation-0\#ChannelRegularConversion,NbrOfConversionFlag,master,ContinuousConvMode,ExternalTrigConv,ConversionDataManagement
ADC1.NbrOfConversionFlag=1
ADC1.OffsetNumber-0\#ChannelRegularConversion=ADC_OFFSET_NONE
ADC1.OffsetSignedSaturation-0\#ChannelRegularConversion=DISABLE
ADC1.Rank-0\#ChannelRegularConversion=1
ADC1.SamplingTime-0\#ChannelRegularConversion=ADC_SAMPLETIME_1CYCLE_5
ADC1.master=1
CAD.formats=
CAD.pinconfig=
CAD.provider=
CORTEX_M7.CPU_DCache=Disabled
CORTEX_M7.CPU_ICache=Disabled
CORTEX_M7.IPParameters=CPU_ICache,CPU_DCache
DAC1.DAC_Channel-DAC_OUT2=DAC_CHANNEL_2
DAC1.DAC_Trigger-DAC_OUT2=DAC_TRIGGER_T2_TRGO
DAC1.IPParameters=DAC_Channel-DAC_OUT2,DAC_Trigger-DAC_OUT2
Dma.ADC1.0.Direction=DMA_PERIPH_TO_MEMORY
Dma.ADC1.0.EventEnable=DISABLE
Dma.ADC1.0.FIFOMode=DMA_FIFOMODE_ENABLE
Dma.ADC1.0.FIFOThreshold=DMA_FIFO_THRESHOLD_HALFFULL
Dma.ADC1.0.Instance=DMA1_Stream0
Dma.ADC1.0.MemBurst=DMA_MBURST_SINGLE
Dma.ADC1.0.MemDataAlignment=DMA_MDATAALIGN_HALFWORD
Dma.ADC1.0.MemInc=DMA_MINC_ENABLE
Dma.ADC1.0.Mode=DMA_CIRCULAR
Dma.ADC1.0.PeriphBurst=DMA_PBURST_INC4
Dma.ADC1.0.PeriphDataAlignment=DMA_PDATAALIGN_HALFWORD
Dma.ADC1.0.PeriphInc=DMA_PINC_DISABLE
Dma.ADC1.0.Polarity=HAL_DMAMUX_REQ_GEN_RISING
Dma.ADC1.0.Priority=DMA_PRIORITY_LOW
Dma.ADC1.0.RequestNumber=1
Dma.ADC1.0.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority,FIFOMode,FIFOThreshold,MemBurst,PeriphBurst,SignalID,Polarity,RequestNumber,SyncSignalID,SyncPolarity,SyncEnable,EventEnable,SyncRequestNumber
Dma.ADC1.0.SignalID=NONE
Dma.ADC1.0.SyncEnable=DISABLE
Dma.ADC1.0.SyncPolarity=HAL_DMAMUX_SYNC_NO_EVENT
Dma.ADC1.0.SyncRequestNumber=1
Dma.ADC1.0.SyncSignalID=NONE
Dma.DAC1_CH2.1.Direction=DMA_MEMORY_TO_PERIPH
Dma.DAC1_CH2.1.EventEnable=DISABLE
Dma.DAC1_CH2.1.FIFOMode=DMA_FIFOMODE_ENABLE
Dma.DAC1_CH2.1.FIFOThreshold=DMA_FIFO_THRESHOLD_HALFFULL
Dma.DAC1_CH2.1.Instance=DMA1_Stream1
Dma.DAC1_CH2.1.MemBurst=DMA_MBURST_INC4
Dma.DAC1_CH2.1.MemDataAlignment=DMA_MDATAALIGN_HALFWORD
Dma.DAC1_CH2.1.MemInc=DMA_MINC_ENABLE
Dma.DAC1_CH2.1.Mode=DMA_CIRCULAR
Dma.DAC1_CH2.1.PeriphBurst=DMA_PBURST_SINGLE
Dma.DAC1_CH2.1.PeriphDataAlignment=DMA_PDATAALIGN_HALFWORD
Dma.DAC1_CH2.1.PeriphInc=DMA_PINC_DISABLE
Dma.DAC1_CH2.1.Polarity=HAL_DMAMUX_REQ_GEN_RISING
Dma.DAC1_CH2.1.Priority=DMA_PRIORITY_LOW
Dma.DAC1_CH2.1.RequestNumber=1
Dma.DAC1_CH2.1.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority,FIFOMode,FIFOThreshold,MemBurst,PeriphBurst,SignalID,Polarity,RequestNumber,SyncSignalID,SyncPolarity,SyncEnable,EventEnable,SyncRequestNumber
Dma.DAC1_CH2.1.SignalID=NONE
Dma.DAC1_CH2.1.SyncEnable=DISABLE
Dma.DAC1_CH2.1.SyncPolarity=HAL_DMAMUX_SYNC_NO_EVENT
Dma.DAC1_CH2.1.SyncRequestNumber=1
Dma.DAC1_CH2.1.SyncSignalID=NONE
Dma.Request0=ADC1
Dma.Request1=DAC1_CH2
Dma.RequestsNb=2
ETH.IPParameters=MediaInterface
ETH.MediaInterface=HAL_ETH_RMII_MODE
File.Version=6
GPIO.groupedBy=
KeepUserPlacement=false
MMTAppRegionsCount=0
MMTConfigApplied=false
Mcu.CPN=STM32H750XBH6
Mcu.Family=STM32H7
Mcu.IP0=ADC1
Mcu.IP1=CORTEX_M7
Mcu.IP10=RCC
Mcu.IP11=SDMMC1
Mcu.IP12=SDMMC2
Mcu.IP13=SPI2
Mcu.IP14=SPI4
Mcu.IP15=SYS
Mcu.IP16=TIM2
Mcu.IP17=UART4
Mcu.IP18=USART3
Mcu.IP19=USB_OTG_FS
Mcu.IP2=DAC1
Mcu.IP3=DMA
Mcu.IP4=ETH
Mcu.IP5=FMC
Mcu.IP6=IWDG1
Mcu.IP7=LTDC
Mcu.IP8=MEMORYMAP
Mcu.IP9=NVIC
Mcu.IPNb=20
Mcu.Name=STM32H750XBHx
Mcu.Package=TFBGA240
Mcu.Pin0=PK5
Mcu.Pin1=PC10
Mcu.Pin10=PI2
Mcu.Pin100=PJ4
Mcu.Pin101=PG1
Mcu.Pin102=PE7
Mcu.Pin103=PE14
Mcu.Pin104=PB14
Mcu.Pin105=PD8
Mcu.Pin106=VP_IWDG1_VS_IWDG
Mcu.Pin107=VP_SYS_VS_Systick
Mcu.Pin108=VP_TIM2_VS_ClockSourceINT
Mcu.Pin109=VP_MEMORYMAP_VS_MEMORYMAP
Mcu.Pin11=PE2
Mcu.Pin12=PE0
Mcu.Pin13=PB3 (JTDO/TRACESWO)
Mcu.Pin14=PK6
Mcu.Pin15=PK3
Mcu.Pin16=PD7
Mcu.Pin17=PC12
Mcu.Pin18=PI3
Mcu.Pin19=PE5
Mcu.Pin2=PI1
Mcu.Pin20=PG15
Mcu.Pin21=PK7
Mcu.Pin22=PG14
Mcu.Pin23=PG13
Mcu.Pin24=PJ14
Mcu.Pin25=PJ12
Mcu.Pin26=PD2
Mcu.Pin27=PD0
Mcu.Pin28=PI9
Mcu.Pin29=PE6
Mcu.Pin3=PE1
Mcu.Pin30=PJ13
Mcu.Pin31=PD1
Mcu.Pin32=PC8
Mcu.Pin33=PC9
Mcu.Pin34=PA12
Mcu.Pin35=PA11
Mcu.Pin36=PG8
Mcu.Pin37=PF2
Mcu.Pin38=PF1
Mcu.Pin39=PF0
Mcu.Pin4=PB4 (NJTRST)
Mcu.Pin40=PG5
Mcu.Pin41=PI12
Mcu.Pin42=PI13
Mcu.Pin43=PI14
Mcu.Pin44=PF3
Mcu.Pin45=PG4
Mcu.Pin46=PG2
Mcu.Pin47=PK2
Mcu.Pin48=PH1-OSC_OUT (PH1)
Mcu.Pin49=PH0-OSC_IN (PH0)
Mcu.Pin5=PK4
Mcu.Pin50=PF5
Mcu.Pin51=PF4
Mcu.Pin52=PK0
Mcu.Pin53=PK1
Mcu.Pin54=PJ11
Mcu.Pin55=PJ10
Mcu.Pin56=PC1
Mcu.Pin57=PC2
Mcu.Pin58=PC3
Mcu.Pin59=PJ9
Mcu.Pin6=PG11
Mcu.Pin60=PA2
Mcu.Pin61=PA1
Mcu.Pin62=PA0
Mcu.Pin63=PJ0
Mcu.Pin64=PE10
Mcu.Pin65=PJ8
Mcu.Pin66=PJ7
Mcu.Pin67=PJ6
Mcu.Pin68=PH5
Mcu.Pin69=PI15
Mcu.Pin7=PJ15
Mcu.Pin70=PJ1
Mcu.Pin71=PF13
Mcu.Pin72=PF14
Mcu.Pin73=PE9
Mcu.Pin74=PE11
Mcu.Pin75=PB10
Mcu.Pin76=PB11
Mcu.Pin77=PD15
Mcu.Pin78=PD14
Mcu.Pin79=PA7
Mcu.Pin8=PD6
Mcu.Pin80=PF12
Mcu.Pin81=PF15
Mcu.Pin82=PE12
Mcu.Pin83=PE15
Mcu.Pin84=PJ5
Mcu.Pin85=PD11
Mcu.Pin86=PD12
Mcu.Pin87=PA1_C
Mcu.Pin88=PA5
Mcu.Pin89=PC4
Mcu.Pin9=PC11
Mcu.Pin90=PJ2
Mcu.Pin91=PF11
Mcu.Pin92=PG0
Mcu.Pin93=PE8
Mcu.Pin94=PE13
Mcu.Pin95=PB15
Mcu.Pin96=PD10
Mcu.Pin97=PD9
Mcu.Pin98=PC5
Mcu.Pin99=PJ3
Mcu.PinsNb=110
Mcu.ThirdPartyNb=0
Mcu.UserConstants=
Mcu.UserName=STM32H750XBHx
MxCube.Version=6.14.1
MxDb.Version=DB.6.0.141
NVIC.ADC_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true
NVIC.BusFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
NVIC.DMA1_Stream0_IRQn=true\:0\:0\:false\:false\:true\:false\:true\:true
NVIC.DMA1_Stream1_IRQn=true\:0\:0\:false\:false\:true\:false\:true\:true
NVIC.DebugMonitor_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
NVIC.ETH_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true
NVIC.ForceEnableDMAVector=true
NVIC.HardFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
NVIC.MemoryManagement_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
NVIC.NonMaskableInt_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
NVIC.OTG_FS_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true
NVIC.PendSV_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
NVIC.PriorityGroup=NVIC_PRIORITYGROUP_4
NVIC.SDMMC1_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true
NVIC.SDMMC2_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true
NVIC.SPI2_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true
NVIC.SVCall_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
NVIC.SysTick_IRQn=true\:0\:0\:false\:false\:true\:false\:true\:false
NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
PA0.Locked=true
PA0.Mode=Asynchronous
PA0.Signal=UART4_TX
PA1.GPIOParameters=GPIO_Speed
PA1.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH
PA1.Mode=RMII
PA1.Signal=ETH_REF_CLK
PA11.GPIOParameters=GPIO_Speed
PA11.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH
PA11.Mode=Device_Only
PA11.Signal=USB_OTG_FS_DM
PA12.GPIOParameters=GPIO_Speed
PA12.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH
PA12.Mode=Device_Only
PA12.Signal=USB_OTG_FS_DP
PA1_C.Locked=true
PA1_C.Signal=ADCx_INP1
PA2.GPIOParameters=GPIO_Speed
PA2.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH
PA2.Mode=RMII
PA2.Signal=ETH_MDIO
PA5.Locked=true
PA5.Signal=COMP_DAC12_group
PA7.GPIOParameters=GPIO_Speed
PA7.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH
PA7.Mode=RMII
PA7.Signal=ETH_CRS_DV
PB10.Mode=Asynchronous
PB10.Signal=USART3_TX
PB11.Mode=Asynchronous
PB11.Signal=USART3_RX
PB14.Mode=SD_4_bits_Wide_bus
PB14.Signal=SDMMC2_D0
PB15.Mode=SD_4_bits_Wide_bus
PB15.Signal=SDMMC2_D1
PB3\ (JTDO/TRACESWO).Mode=SD_4_bits_Wide_bus
PB3\ (JTDO/TRACESWO).Signal=SDMMC2_D2
PB4\ (NJTRST).Mode=SD_4_bits_Wide_bus
PB4\ (NJTRST).Signal=SDMMC2_D3
PC1.GPIOParameters=GPIO_Speed
PC1.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH
PC1.Mode=RMII
PC1.Signal=ETH_MDC
PC10.Mode=SD_4_bits_Wide_bus
PC10.Signal=SDMMC1_D2
PC11.Mode=SD_4_bits_Wide_bus
PC11.Signal=SDMMC1_D3
PC12.Mode=SD_4_bits_Wide_bus
PC12.Signal=SDMMC1_CK
PC2.GPIOParameters=GPIO_Speed_High_Default
PC2.GPIO_Speed_High_Default=GPIO_SPEED_FREQ_VERY_HIGH
PC2.Mode=SdramChipSelect1_1
PC2.Signal=FMC_SDNE0
PC3.GPIOParameters=GPIO_Speed_High_Default
PC3.GPIO_Speed_High_Default=GPIO_SPEED_FREQ_VERY_HIGH
PC3.Mode=SdramChipSelect1_1
PC3.Signal=FMC_SDCKE0
PC4.GPIOParameters=GPIO_Speed
PC4.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH
PC4.Mode=RMII
PC4.Signal=ETH_RXD0
PC5.GPIOParameters=GPIO_Speed
PC5.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH
PC5.Mode=RMII
PC5.Signal=ETH_RXD1
PC8.Mode=SD_4_bits_Wide_bus
PC8.Signal=SDMMC1_D0
PC9.Mode=SD_4_bits_Wide_bus
PC9.Signal=SDMMC1_D1
PD0.GPIOParameters=GPIO_Speed_High_Default
PD0.GPIO_Speed_High_Default=GPIO_SPEED_FREQ_VERY_HIGH
PD0.Signal=FMC_D2_DA2
PD1.GPIOParameters=GPIO_Speed_High_Default
PD1.GPIO_Speed_High_Default=GPIO_SPEED_FREQ_VERY_HIGH
PD1.Signal=FMC_D3_DA3
PD10.GPIOParameters=GPIO_Speed_High_Default
PD10.GPIO_Speed_High_Default=GPIO_SPEED_FREQ_VERY_HIGH
PD10.Signal=FMC_D15_DA15
PD11.Mode=CTS_RTS
PD11.Signal=USART3_CTS
PD12.Mode=CTS_RTS
PD12.Signal=USART3_RTS
PD14.GPIOParameters=GPIO_Speed_High_Default
PD14.GPIO_Speed_High_Default=GPIO_SPEED_FREQ_VERY_HIGH
PD14.Signal=FMC_D0_DA0
PD15.GPIOParameters=GPIO_Speed_High_Default
PD15.GPIO_Speed_High_Default=GPIO_SPEED_FREQ_VERY_HIGH
PD15.Signal=FMC_D1_DA1
PD2.Mode=SD_4_bits_Wide_bus
PD2.Signal=SDMMC1_CMD
PD6.Mode=SD_4_bits_Wide_bus
PD6.Signal=SDMMC2_CK
PD7.Mode=SD_4_bits_Wide_bus
PD7.Signal=SDMMC2_CMD
PD8.GPIOParameters=GPIO_Speed_High_Default
PD8.GPIO_Speed_High_Default=GPIO_SPEED_FREQ_VERY_HIGH
PD8.Signal=FMC_D13_DA13
PD9.GPIOParameters=GPIO_Speed_High_Default
PD9.GPIO_Speed_High_Default=GPIO_SPEED_FREQ_VERY_HIGH
PD9.Signal=FMC_D14_DA14
PE0.GPIOParameters=GPIO_Speed_High_Default
PE0.GPIO_Speed_High_Default=GPIO_SPEED_FREQ_VERY_HIGH
PE0.Signal=FMC_NBL0
PE1.GPIOParameters=GPIO_Speed_High_Default
PE1.GPIO_Speed_High_Default=GPIO_SPEED_FREQ_VERY_HIGH
PE1.Signal=FMC_NBL1
PE10.GPIOParameters=GPIO_Speed_High_Default
PE10.GPIO_Speed_High_Default=GPIO_SPEED_FREQ_VERY_HIGH
PE10.Signal=FMC_D7_DA7
PE11.GPIOParameters=GPIO_Speed_High_Default
PE11.GPIO_Speed_High_Default=GPIO_SPEED_FREQ_VERY_HIGH
PE11.Signal=FMC_D8_DA8
PE12.GPIOParameters=GPIO_Speed_High_Default
PE12.GPIO_Speed_High_Default=GPIO_SPEED_FREQ_VERY_HIGH
PE12.Signal=FMC_D9_DA9
PE13.GPIOParameters=GPIO_Speed_High_Default
PE13.GPIO_Speed_High_Default=GPIO_SPEED_FREQ_VERY_HIGH
PE13.Signal=FMC_D10_DA10
PE14.GPIOParameters=GPIO_Speed_High_Default
PE14.GPIO_Speed_High_Default=GPIO_SPEED_FREQ_VERY_HIGH
PE14.Signal=FMC_D11_DA11
PE15.GPIOParameters=GPIO_Speed_High_Default
PE15.GPIO_Speed_High_Default=GPIO_SPEED_FREQ_VERY_HIGH
PE15.Signal=FMC_D12_DA12
PE2.GPIOParameters=GPIO_Speed
PE2.GPIO_Speed=GPIO_SPEED_FREQ_HIGH
PE2.Mode=Full_Duplex_Master
PE2.Signal=SPI4_SCK
PE5.GPIOParameters=GPIO_Speed
PE5.GPIO_Speed=GPIO_SPEED_FREQ_HIGH
PE5.Mode=Full_Duplex_Master
PE5.Signal=SPI4_MISO
PE6.GPIOParameters=GPIO_Speed
PE6.GPIO_Speed=GPIO_SPEED_FREQ_HIGH
PE6.Mode=Full_Duplex_Master
PE6.Signal=SPI4_MOSI
PE7.GPIOParameters=GPIO_Speed_High_Default
PE7.GPIO_Speed_High_Default=GPIO_SPEED_FREQ_VERY_HIGH
PE7.Signal=FMC_D4_DA4
PE8.GPIOParameters=GPIO_Speed_High_Default
PE8.GPIO_Speed_High_Default=GPIO_SPEED_FREQ_VERY_HIGH
PE8.Signal=FMC_D5_DA5
PE9.GPIOParameters=GPIO_Speed_High_Default
PE9.GPIO_Speed_High_Default=GPIO_SPEED_FREQ_VERY_HIGH
PE9.Signal=FMC_D6_DA6
PF0.GPIOParameters=GPIO_Speed_High_Default
PF0.GPIO_Speed_High_Default=GPIO_SPEED_FREQ_VERY_HIGH
PF0.Signal=FMC_A0
PF1.GPIOParameters=GPIO_Speed_High_Default
PF1.GPIO_Speed_High_Default=GPIO_SPEED_FREQ_VERY_HIGH
PF1.Signal=FMC_A1
PF11.GPIOParameters=GPIO_Speed_High_Default
PF11.GPIO_Speed_High_Default=GPIO_SPEED_FREQ_VERY_HIGH
PF11.Signal=FMC_SDNRAS
PF12.GPIOParameters=GPIO_Speed_High_Default
PF12.GPIO_Speed_High_Default=GPIO_SPEED_FREQ_VERY_HIGH
PF12.Signal=FMC_A6
PF13.GPIOParameters=GPIO_Speed_High_Default
PF13.GPIO_Speed_High_Default=GPIO_SPEED_FREQ_VERY_HIGH
PF13.Signal=FMC_A7
PF14.GPIOParameters=GPIO_Speed_High_Default
PF14.GPIO_Speed_High_Default=GPIO_SPEED_FREQ_VERY_HIGH
PF14.Signal=FMC_A8
PF15.GPIOParameters=GPIO_Speed_High_Default
PF15.GPIO_Speed_High_Default=GPIO_SPEED_FREQ_VERY_HIGH
PF15.Signal=FMC_A9
PF2.GPIOParameters=GPIO_Speed_High_Default
PF2.GPIO_Speed_High_Default=GPIO_SPEED_FREQ_VERY_HIGH
PF2.Signal=FMC_A2
PF3.GPIOParameters=GPIO_Speed_High_Default
PF3.GPIO_Speed_High_Default=GPIO_SPEED_FREQ_VERY_HIGH
PF3.Signal=FMC_A3
PF4.GPIOParameters=GPIO_Speed_High_Default
PF4.GPIO_Speed_High_Default=GPIO_SPEED_FREQ_VERY_HIGH
PF4.Signal=FMC_A4
PF5.GPIOParameters=GPIO_Speed_High_Default
PF5.GPIO_Speed_High_Default=GPIO_SPEED_FREQ_VERY_HIGH
PF5.Signal=FMC_A5
PG0.GPIOParameters=GPIO_Speed_High_Default
PG0.GPIO_Speed_High_Default=GPIO_SPEED_FREQ_VERY_HIGH
PG0.Signal=FMC_A10
PG1.GPIOParameters=GPIO_Speed_High_Default
PG1.GPIO_Speed_High_Default=GPIO_SPEED_FREQ_VERY_HIGH
PG1.Signal=FMC_A11
PG11.GPIOParameters=GPIO_Speed
PG11.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH
PG11.Locked=true
PG11.Mode=RMII
PG11.Signal=ETH_TX_EN
PG13.GPIOParameters=GPIO_Speed
PG13.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH
PG13.Mode=RMII
PG13.Signal=ETH_TXD0
PG14.GPIOParameters=GPIO_Speed
PG14.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH
PG14.Locked=true
PG14.Mode=RMII
PG14.Signal=ETH_TXD1
PG15.GPIOParameters=GPIO_Speed_High_Default
PG15.GPIO_Speed_High_Default=GPIO_SPEED_FREQ_VERY_HIGH
PG15.Signal=FMC_SDNCAS
PG2.GPIOParameters=GPIO_Speed_High_Default
PG2.GPIO_Speed_High_Default=GPIO_SPEED_FREQ_VERY_HIGH
PG2.Signal=FMC_A12
PG4.GPIOParameters=GPIO_Speed_High_Default
PG4.GPIO_Speed_High_Default=GPIO_SPEED_FREQ_VERY_HIGH
PG4.Signal=FMC_A14_BA0
PG5.GPIOParameters=GPIO_Speed_High_Default
PG5.GPIO_Speed_High_Default=GPIO_SPEED_FREQ_VERY_HIGH
PG5.Signal=FMC_A15_BA1
PG8.GPIOParameters=GPIO_Speed_High_Default
PG8.GPIO_Speed_High_Default=GPIO_SPEED_FREQ_VERY_HIGH
PG8.Signal=FMC_SDCLK
PH0-OSC_IN\ (PH0).Mode=HSE-External-Oscillator
PH0-OSC_IN\ (PH0).Signal=RCC_OSC_IN
PH1-OSC_OUT\ (PH1).Mode=HSE-External-Oscillator
PH1-OSC_OUT\ (PH1).Signal=RCC_OSC_OUT
PH5.GPIOParameters=GPIO_Speed_High_Default
PH5.GPIO_Speed_High_Default=GPIO_SPEED_FREQ_VERY_HIGH
PH5.Locked=true
PH5.Signal=FMC_SDNWE
PI1.GPIOParameters=GPIO_Speed
PI1.GPIO_Speed=GPIO_SPEED_FREQ_HIGH
PI1.Mode=Full_Duplex_Master
PI1.Signal=SPI2_SCK
PI12.GPIOParameters=GPIO_Speed
PI12.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH
PI12.Locked=true
PI12.Mode=RGB888
PI12.Signal=LTDC_HSYNC
PI13.GPIOParameters=GPIO_Speed
PI13.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH
PI13.Locked=true
PI13.Mode=RGB888
PI13.Signal=LTDC_VSYNC
PI14.GPIOParameters=GPIO_Speed
PI14.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH
PI14.Locked=true
PI14.Mode=RGB888
PI14.Signal=LTDC_CLK
PI15.GPIOParameters=GPIO_Speed
PI15.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH
PI15.Locked=true
PI15.Mode=RGB888
PI15.Signal=LTDC_R0
PI2.GPIOParameters=GPIO_Speed
PI2.GPIO_Speed=GPIO_SPEED_FREQ_HIGH
PI2.Mode=Full_Duplex_Master
PI2.Signal=SPI2_MISO
PI3.GPIOParameters=GPIO_Speed
PI3.GPIO_Speed=GPIO_SPEED_FREQ_HIGH
PI3.Mode=Full_Duplex_Master
PI3.Signal=SPI2_MOSI
PI9.Locked=true
PI9.Mode=Asynchronous
PI9.Signal=UART4_RX
PJ0.GPIOParameters=GPIO_Speed
PJ0.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH
PJ0.Mode=RGB888
PJ0.Signal=LTDC_R1
PJ1.GPIOParameters=GPIO_Speed
PJ1.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH
PJ1.Mode=RGB888
PJ1.Signal=LTDC_R2
PJ10.GPIOParameters=GPIO_Speed
PJ10.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH
PJ10.Locked=true
PJ10.Mode=RGB888
PJ10.Signal=LTDC_G3
PJ11.GPIOParameters=GPIO_Speed
PJ11.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH
PJ11.Locked=true
PJ11.Mode=RGB888
PJ11.Signal=LTDC_G4
PJ12.GPIOParameters=GPIO_Speed
PJ12.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH
PJ12.Locked=true
PJ12.Mode=RGB888
PJ12.Signal=LTDC_B0
PJ13.GPIOParameters=GPIO_Speed
PJ13.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH
PJ13.Locked=true
PJ13.Mode=RGB888
PJ13.Signal=LTDC_B1
PJ14.GPIOParameters=GPIO_Speed
PJ14.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH
PJ14.Mode=RGB888
PJ14.Signal=LTDC_B2
PJ15.GPIOParameters=GPIO_Speed
PJ15.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH
PJ15.Mode=RGB888
PJ15.Signal=LTDC_B3
PJ2.GPIOParameters=GPIO_Speed
PJ2.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH
PJ2.Locked=true
PJ2.Mode=RGB888
PJ2.Signal=LTDC_R3
PJ3.GPIOParameters=GPIO_Speed
PJ3.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH
PJ3.Locked=true
PJ3.Mode=RGB888
PJ3.Signal=LTDC_R4
PJ4.GPIOParameters=GPIO_Speed
PJ4.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH
PJ4.Locked=true
PJ4.Mode=RGB888
PJ4.Signal=LTDC_R5
PJ5.GPIOParameters=GPIO_Speed
PJ5.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH
PJ5.Locked=true
PJ5.Mode=RGB888
PJ5.Signal=LTDC_R6
PJ6.GPIOParameters=GPIO_Speed
PJ6.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH
PJ6.Locked=true
PJ6.Mode=RGB888
PJ6.Signal=LTDC_R7
PJ7.GPIOParameters=GPIO_Speed
PJ7.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH
PJ7.Mode=RGB888
PJ7.Signal=LTDC_G0
PJ8.GPIOParameters=GPIO_Speed
PJ8.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH
PJ8.Mode=RGB888
PJ8.Signal=LTDC_G1
PJ9.GPIOParameters=GPIO_Speed
PJ9.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH
PJ9.Locked=true
PJ9.Mode=RGB888
PJ9.Signal=LTDC_G2
PK0.GPIOParameters=GPIO_Speed
PK0.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH
PK0.Locked=true
PK0.Mode=RGB888
PK0.Signal=LTDC_G5
PK1.GPIOParameters=GPIO_Speed
PK1.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH
PK1.Locked=true
PK1.Mode=RGB888
PK1.Signal=LTDC_G6
PK2.GPIOParameters=GPIO_Speed
PK2.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH
PK2.Locked=true
PK2.Mode=RGB888
PK2.Signal=LTDC_G7
PK3.GPIOParameters=GPIO_Speed
PK3.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH
PK3.Locked=true
PK3.Mode=RGB888
PK3.Signal=LTDC_B4
PK4.GPIOParameters=GPIO_Speed
PK4.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH
PK4.Locked=true
PK4.Mode=RGB888
PK4.Signal=LTDC_B5
PK5.GPIOParameters=GPIO_Speed
PK5.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH
PK5.Locked=true
PK5.Mode=RGB888
PK5.Signal=LTDC_B6
PK6.GPIOParameters=GPIO_Speed
PK6.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH
PK6.Locked=true
PK6.Mode=RGB888
PK6.Signal=LTDC_B7
PK7.GPIOParameters=GPIO_Speed
PK7.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH
PK7.Mode=RGB888
PK7.Signal=LTDC_DE
PinOutPanel.CurrentBGAView=Top
PinOutPanel.RotationAngle=0
ProjectManager.AskForMigrate=true
ProjectManager.BackupPrevious=false
ProjectManager.CompilerLinker=GCC
ProjectManager.CompilerOptimize=6
ProjectManager.ComputerToolchain=false
ProjectManager.CoupleFile=false
ProjectManager.CustomerFirmwarePackage=C\:\\Users\\Administrator\\STM32Cube\\Repository\\STM32Cube_FW_H7_V1.9.1
ProjectManager.DefaultFWLocation=false
ProjectManager.DeletePrevious=true
ProjectManager.DeviceId=STM32H750XBHx
ProjectManager.FirmwarePackage=STM32Cube FW_H7 V1.12.1
ProjectManager.FreePins=false
ProjectManager.HalAssertFull=false
ProjectManager.HeapSize=0x200
ProjectManager.KeepUserCode=true
ProjectManager.LastFirmware=false
ProjectManager.LibraryCopy=1
ProjectManager.MainLocation=Core/Src
ProjectManager.NoMain=false
ProjectManager.PreviousToolchain=
ProjectManager.ProjectBuild=false
ProjectManager.ProjectFileName=CubeMX_Config.ioc
ProjectManager.ProjectName=CubeMX_Config
ProjectManager.ProjectStructure=
ProjectManager.RegisterCallBack=
ProjectManager.StackSize=0x400
ProjectManager.TargetToolchain=MDK-ARM V5.27
ProjectManager.ToolChainLocation=
ProjectManager.UAScriptAfterPath=
ProjectManager.UAScriptBeforePath=
ProjectManager.UnderRoot=false
ProjectManager.functionlistsort=1-MX_GPIO_Init-GPIO-false-HAL-true,2-SystemClock_Config-RCC-false-HAL-false,3-MX_DMA_Init-DMA-false-HAL-true,4-MX_ETH_Init-ETH-false-HAL-true,5-MX_FMC_Init-FMC-false-HAL-true,6-MX_LTDC_Init-LTDC-false-HAL-true,7-MX_SDMMC1_SD_Init-SDMMC1-false-HAL-true,8-MX_SDMMC2_SD_Init-SDMMC2-false-HAL-true,9-MX_SPI4_Init-SPI4-false-HAL-true,10-MX_UART4_Init-UART4-false-HAL-true,11-MX_USART3_UART_Init-USART3-false-HAL-true,12-MX_USB_OTG_FS_PCD_Init-USB_OTG_FS-false-HAL-true,13-MX_IWDG1_Init-IWDG1-false-HAL-true,14-MX_SPI2_Init-SPI2-false-HAL-true,15-MX_ADC1_Init-ADC1-false-HAL-true,16-MX_DAC1_Init-DAC1-false-HAL-true,17-MX_TIM2_Init-TIM2-false-HAL-true,0-MX_CORTEX_M7_Init-CORTEX_M7-false-HAL-true
RCC.ADCFreq_Value=100000000
RCC.AHB12Freq_Value=240000000
RCC.AHB4Freq_Value=240000000
RCC.APB1Freq_Value=120000000
RCC.APB2Freq_Value=120000000
RCC.APB3Freq_Value=120000000
RCC.APB4Freq_Value=120000000
RCC.AXIClockFreq_Value=240000000
RCC.CECFreq_Value=32000
RCC.CKPERFreq_Value=64000000
RCC.CortexFreq_Value=480000000
RCC.CpuClockFreq_Value=480000000
RCC.D1CPREFreq_Value=480000000
RCC.D1PPRE=RCC_APB3_DIV2
RCC.D2PPRE1=RCC_APB1_DIV2
RCC.D2PPRE2=RCC_APB2_DIV2
RCC.D3PPRE=RCC_APB4_DIV2
RCC.DFSDMACLkFreq_Value=480000000
RCC.DFSDMFreq_Value=120000000
RCC.DIVM1=5
RCC.DIVM2=2
RCC.DIVM3=5
RCC.DIVN1=192
RCC.DIVN2=64
RCC.DIVN3=160
RCC.DIVP1Freq_Value=480000000
RCC.DIVP2=8
RCC.DIVP2Freq_Value=100000000
RCC.DIVP3=8
RCC.DIVP3Freq_Value=100000000
RCC.DIVQ1Freq_Value=480000000
RCC.DIVQ2Freq_Value=400000000
RCC.DIVQ3=8
RCC.DIVQ3Freq_Value=100000000
RCC.DIVR1Freq_Value=480000000
RCC.DIVR2=4
RCC.DIVR2Freq_Value=200000000
RCC.DIVR3=24
RCC.DIVR3Freq_Value=33333333.333333332
RCC.FDCANFreq_Value=480000000
RCC.FMCCLockSelection=RCC_FMCCLKSOURCE_PLL2
RCC.FMCFreq_Value=200000000
RCC.FamilyName=M
RCC.HCLK3ClockFreq_Value=240000000
RCC.HCLKFreq_Value=240000000
RCC.HPRE=RCC_HCLK_DIV2
RCC.HRTIMFreq_Value=240000000
RCC.I2C123Freq_Value=120000000
RCC.I2C4Freq_Value=120000000
RCC.IPParameters=ADCFreq_Value,AHB12Freq_Value,AHB4Freq_Value,APB1Freq_Value,APB2Freq_Value,APB3Freq_Value,APB4Freq_Value,AXIClockFreq_Value,CECFreq_Value,CKPERFreq_Value,CortexFreq_Value,CpuClockFreq_Value,D1CPREFreq_Value,D1PPRE,D2PPRE1,D2PPRE2,D3PPRE,DFSDMACLkFreq_Value,DFSDMFreq_Value,DIVM1,DIVM2,DIVM3,DIVN1,DIVN2,DIVN3,DIVP1Freq_Value,DIVP2,DIVP2Freq_Value,DIVP3,DIVP3Freq_Value,DIVQ1Freq_Value,DIVQ2Freq_Value,DIVQ3,DIVQ3Freq_Value,DIVR1Freq_Value,DIVR2,DIVR2Freq_Value,DIVR3,DIVR3Freq_Value,FDCANFreq_Value,FMCCLockSelection,FMCFreq_Value,FamilyName,HCLK3ClockFreq_Value,HCLKFreq_Value,HPRE,HRTIMFreq_Value,I2C123Freq_Value,I2C4Freq_Value,LPTIM1Freq_Value,LPTIM2Freq_Value,LPTIM345Freq_Value,LPUART1Freq_Value,LTDCFreq_Value,MCO1PinFreq_Value,MCO2PinFreq_Value,PLL2FRACN,PLL3FRACN,PLLFRACN,PLLSourceVirtual,QSPIFreq_Value,RNGFreq_Value,RTCFreq_Value,SAI1Freq_Value,SAI23Freq_Value,SAI4AFreq_Value,SAI4BFreq_Value,SDMMC1CLockSelection,SDMMCFreq_Value,SPDIFRXFreq_Value,SPI123CLockSelection,SPI123Freq_Value,SPI45Freq_Value,SPI6Freq_Value,SWPMI1Freq_Value,SYSCLKFreq_VALUE,SYSCLKSource,Spi45ClockSelection,Tim1OutputFreq_Value,Tim2OutputFreq_Value,TraceFreq_Value,USART16Freq_Value,USART234578Freq_Value,USBCLockSelection,USBFreq_Value,VCO1OutputFreq_Value,VCO2OutputFreq_Value,VCO3OutputFreq_Value,VCOInput1Freq_Value,VCOInput2Freq_Value,VCOInput3Freq_Value
RCC.LPTIM1Freq_Value=120000000
RCC.LPTIM2Freq_Value=120000000
RCC.LPTIM345Freq_Value=120000000
RCC.LPUART1Freq_Value=120000000
RCC.LTDCFreq_Value=33333333.333333332
RCC.MCO1PinFreq_Value=64000000
RCC.MCO2PinFreq_Value=480000000
RCC.PLL2FRACN=0
RCC.PLL3FRACN=0
RCC.PLLFRACN=0
RCC.PLLSourceVirtual=RCC_PLLSOURCE_HSE
RCC.QSPIFreq_Value=240000000
RCC.RNGFreq_Value=48000000
RCC.RTCFreq_Value=32000
RCC.SAI1Freq_Value=480000000
RCC.SAI23Freq_Value=480000000
RCC.SAI4AFreq_Value=480000000
RCC.SAI4BFreq_Value=480000000
RCC.SDMMC1CLockSelection=RCC_SDMMCCLKSOURCE_PLL2
RCC.SDMMCFreq_Value=200000000
RCC.SPDIFRXFreq_Value=480000000
RCC.SPI123CLockSelection=RCC_SPI123CLKSOURCE_PLL3
RCC.SPI123Freq_Value=100000000
RCC.SPI45Freq_Value=100000000
RCC.SPI6Freq_Value=120000000
RCC.SWPMI1Freq_Value=120000000
RCC.SYSCLKFreq_VALUE=480000000
RCC.SYSCLKSource=RCC_SYSCLKSOURCE_PLLCLK
RCC.Spi45ClockSelection=RCC_SPI45CLKSOURCE_PLL3
RCC.Tim1OutputFreq_Value=240000000
RCC.Tim2OutputFreq_Value=240000000
RCC.TraceFreq_Value=64000000
RCC.USART16Freq_Value=120000000
RCC.USART234578Freq_Value=120000000
RCC.USBCLockSelection=RCC_USBCLKSOURCE_HSI48
RCC.USBFreq_Value=48000000
RCC.VCO1OutputFreq_Value=960000000
RCC.VCO2OutputFreq_Value=800000000
RCC.VCO3OutputFreq_Value=800000000
RCC.VCOInput1Freq_Value=5000000
RCC.VCOInput2Freq_Value=12500000
RCC.VCOInput3Freq_Value=5000000
SH.ADCx_INP1.0=ADC1_INP1,IN1-Single-Ended
SH.ADCx_INP1.ConfNb=1
SH.COMP_DAC12_group.0=DAC1_OUT2,DAC_OUT2
SH.COMP_DAC12_group.ConfNb=1
SH.FMC_A0.0=FMC_A0,13b-sda1
SH.FMC_A0.ConfNb=1
SH.FMC_A1.0=FMC_A1,13b-sda1
SH.FMC_A1.ConfNb=1
SH.FMC_A10.0=FMC_A10,13b-sda1
SH.FMC_A10.ConfNb=1
SH.FMC_A11.0=FMC_A11,13b-sda1
SH.FMC_A11.ConfNb=1
SH.FMC_A12.0=FMC_A12,13b-sda1
SH.FMC_A12.ConfNb=1
SH.FMC_A14_BA0.0=FMC_BA0,FourSdramBanks1
SH.FMC_A14_BA0.ConfNb=1
SH.FMC_A15_BA1.0=FMC_BA1,FourSdramBanks1
SH.FMC_A15_BA1.ConfNb=1
SH.FMC_A2.0=FMC_A2,13b-sda1
SH.FMC_A2.ConfNb=1
SH.FMC_A3.0=FMC_A3,13b-sda1
SH.FMC_A3.ConfNb=1
SH.FMC_A4.0=FMC_A4,13b-sda1
SH.FMC_A4.ConfNb=1
SH.FMC_A5.0=FMC_A5,13b-sda1
SH.FMC_A5.ConfNb=1
SH.FMC_A6.0=FMC_A6,13b-sda1
SH.FMC_A6.ConfNb=1
SH.FMC_A7.0=FMC_A7,13b-sda1
SH.FMC_A7.ConfNb=1
SH.FMC_A8.0=FMC_A8,13b-sda1
SH.FMC_A8.ConfNb=1
SH.FMC_A9.0=FMC_A9,13b-sda1
SH.FMC_A9.ConfNb=1
SH.FMC_D0_DA0.0=FMC_D0,sd-16b-d1
SH.FMC_D0_DA0.ConfNb=1
SH.FMC_D10_DA10.0=FMC_D10,sd-16b-d1
SH.FMC_D10_DA10.ConfNb=1
SH.FMC_D11_DA11.0=FMC_D11,sd-16b-d1
SH.FMC_D11_DA11.ConfNb=1
SH.FMC_D12_DA12.0=FMC_D12,sd-16b-d1
SH.FMC_D12_DA12.ConfNb=1
SH.FMC_D13_DA13.0=FMC_D13,sd-16b-d1
SH.FMC_D13_DA13.ConfNb=1
SH.FMC_D14_DA14.0=FMC_D14,sd-16b-d1
SH.FMC_D14_DA14.ConfNb=1
SH.FMC_D15_DA15.0=FMC_D15,sd-16b-d1
SH.FMC_D15_DA15.ConfNb=1
SH.FMC_D1_DA1.0=FMC_D1,sd-16b-d1
SH.FMC_D1_DA1.ConfNb=1
SH.FMC_D2_DA2.0=FMC_D2,sd-16b-d1
SH.FMC_D2_DA2.ConfNb=1
SH.FMC_D3_DA3.0=FMC_D3,sd-16b-d1
SH.FMC_D3_DA3.ConfNb=1
SH.FMC_D4_DA4.0=FMC_D4,sd-16b-d1
SH.FMC_D4_DA4.ConfNb=1
SH.FMC_D5_DA5.0=FMC_D5,sd-16b-d1
SH.FMC_D5_DA5.ConfNb=1
SH.FMC_D6_DA6.0=FMC_D6,sd-16b-d1
SH.FMC_D6_DA6.ConfNb=1
SH.FMC_D7_DA7.0=FMC_D7,sd-16b-d1
SH.FMC_D7_DA7.ConfNb=1
SH.FMC_D8_DA8.0=FMC_D8,sd-16b-d1
SH.FMC_D8_DA8.ConfNb=1
SH.FMC_D9_DA9.0=FMC_D9,sd-16b-d1
SH.FMC_D9_DA9.ConfNb=1
SH.FMC_NBL0.0=FMC_NBL0,Sd2ByteEnable1
SH.FMC_NBL0.ConfNb=1
SH.FMC_NBL1.0=FMC_NBL1,Sd2ByteEnable1
SH.FMC_NBL1.ConfNb=1
SH.FMC_SDCLK.0=FMC_SDCLK,13b-sda1
SH.FMC_SDCLK.ConfNb=1
SH.FMC_SDNCAS.0=FMC_SDNCAS,13b-sda1
SH.FMC_SDNCAS.ConfNb=1
SH.FMC_SDNRAS.0=FMC_SDNRAS,13b-sda1
SH.FMC_SDNRAS.ConfNb=1
SH.FMC_SDNWE.0=FMC_SDNWE,13b-sda1
SH.FMC_SDNWE.ConfNb=1
SPI2.BaudRatePrescaler=SPI_BAUDRATEPRESCALER_2
SPI2.CLKPolarity=SPI_POLARITY_LOW
SPI2.CalculateBaudRate=50.0 MBits/s
SPI2.Direction=SPI_DIRECTION_2LINES
SPI2.IPParameters=VirtualType,Mode,Direction,CalculateBaudRate,BaudRatePrescaler,CLKPolarity
SPI2.Mode=SPI_MODE_MASTER
SPI2.VirtualType=VM_MASTER
SPI4.BaudRatePrescaler=SPI_BAUDRATEPRESCALER_2
SPI4.CalculateBaudRate=50.0 MBits/s
SPI4.Direction=SPI_DIRECTION_2LINES
SPI4.IPParameters=VirtualType,Mode,Direction,CalculateBaudRate,BaudRatePrescaler
SPI4.Mode=SPI_MODE_MASTER
SPI4.VirtualType=VM_MASTER
TIM2.IPParameters=TIM_MasterOutputTrigger,Prescaler,Period
TIM2.Period=100
TIM2.Prescaler=24
TIM2.TIM_MasterOutputTrigger=TIM_TRGO_UPDATE
USART3.IPParameters=VirtualMode-Asynchronous
USART3.VirtualMode-Asynchronous=VM_ASYNC
USB_OTG_FS.IPParameters=VirtualMode
USB_OTG_FS.VirtualMode=Device_Only
VP_IWDG1_VS_IWDG.Mode=IWDG_Activate
VP_IWDG1_VS_IWDG.Signal=IWDG1_VS_IWDG
VP_MEMORYMAP_VS_MEMORYMAP.Mode=CurAppReg
VP_MEMORYMAP_VS_MEMORYMAP.Signal=MEMORYMAP_VS_MEMORYMAP
VP_SYS_VS_Systick.Mode=SysTick
VP_SYS_VS_Systick.Signal=SYS_VS_Systick
VP_TIM2_VS_ClockSourceINT.Mode=Internal
VP_TIM2_VS_ClockSourceINT.Signal=TIM2_VS_ClockSourceINT
board=custom

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

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

相关文章

数模个人笔记

写在前面&#xff1a;不建议观看&#xff0c;会烂尾的1.马氏链&#xff1a;状态空间指的是随机变量的取值范围&#xff0c;xi称为一个状态&#xff0c;应用背景在现在的条件下下一状态发生的概率&#xff0c;比如退火&#xff0c;他的条件概率可化简为&#xff1a;且nm时刻的概…

Spring Boot自定义Starter:从原理到实战全解析

1. 背景与需求1.1 什么是Starter&#xff1f; Spring Boot的起步依赖&#xff08;Starter&#xff09;是一种特殊的依赖描述符&#xff0c;用于简化Spring应用的依赖管理和自动配置。官方文档将Starter定义为“一组方便的依赖描述符”&#xff0c;开发者只需引入对应的Starter&…

安宝特方案丨工业AR+AI质检方案:致力于提升检测精度与流程效率

据IDC预测&#xff0c;2025年中国工业AI质检市场规模将达62亿元&#xff0c;年复合增长率28.5%&#xff0c;新能源、消费电子、高端装备三大领域贡献超70%市场份额。这一数据印证了AI质检已从可选技术升级为制造业降本增效的生存刚需。当前制造业质检环节正面临&#xff1a;精度…

AudioLLM

参考链接&#xff1a;https://mp.weixin.qq.com/s/cscrUn7n_o6PdeQRzWpx8g 视频教程&#xff1a;https://www.bilibili.com/video/BV1LGbozkEDY 模型代码&#xff1a;https://github.com/boson-ai/higgs-audio 如果是两个模型加在一起&#xff1a;一个语言模型&#xff0c;一个…

基于 CEP 引擎的算法拆单与调度实践—基础篇

在金融市场中&#xff0c;大额订单的一次性交易可能会对市场价格产生较大冲击&#xff0c;导致交易成本增加。例如&#xff0c;大额买入订单可能会迅速推高股价&#xff0c;使后续买入成本上升&#xff1b;大额卖出订单则可能打压股价&#xff0c;造成资产贱卖。拆单算法通过将…

开源 C# TCP 通信框架 SocketDJ 发布:轻量、免费、可扩展

前言市面上的网络通信框架琳琅满目&#xff0c;功能强大者有之&#xff0c;但不少都存在功能闭源、商业收费、学习成本高等问题。作为一名热爱底层技术的开发者&#xff0c;我始终相信&#xff1a;基础通信能力应当简单、透明且免费。最近正好有项目需求&#xff0c;索性动手从…

移动机器人路径规划中ROS2中间件性能的研究综述

导读&#xff1a; 随着移动机器人在工业自动化、特种作业及智能服务领域的广泛应用&#xff0c;其路径规划能力越来越依赖机器人操作系统ROS2的通信性能。ROS2通过去中心化架构与数据分发服务中间件显著提升了系统可靠性&#xff0c;但动态复杂环境中路径规划对通信延迟、带宽…

【昇腾】Atlas 500 A2 智能小站制卡从M.2 SATA盘启动Ubuntu22.04系统,重新上电卡死没进系统问题处理_20250808

一、问题背景 Atlas 500 A2智能小站是华为基于20T 12G版本的Atlas 200I A2加速模块开发的面向广泛边缘应用场景的轻量边缘设备&#xff0c;具有超强计算性能、配置灵活、体积小、支持温度范围宽、环境适应性强、易于维护 管理等特点的产品。Atlas 500 A2智能小站主要应用在智能…

sigaction 中 sa_handler = SIG_IGN 的深度解析与应用实践

sigaction 中 sa_handler SIG_IGN 的深度解析与应用实践 核心意义&#xff1a;主动忽略信号 当 sa_handler 设置为 SIG_IGN 时&#xff0c;内核将完全丢弃指定的信号&#xff0c;不会&#xff1a; 执行默认行为调用任何处理函数中断进程的正常执行 这与 SIG_DFL&#xff08;默…

【LLM实战|langchain、qwen_agent】RAG高级

every blog every motto: You can do more than you think. https://blog.csdn.net/weixin_39190382?type=blog 0. 前言 RAG高级 1. RAG 高效召回方法 合理设置TOP-K 改进索引算法 -知识图谱 引入重排序 重排序模型 BGE-Rerank Cohere Rerank 混合检索 向量索引+关键词索引…

C++方向知识汇总(一)

关于单例模式1.什么是单例模式&#xff1f;答&#xff1a;单例模式是一种创建型设计模式&#xff0c;确保一个类在运行期间仅有一个实例&#xff0c;提供全局唯一的访问点2.单例模式的目的&#xff1f;答&#xff1a;避免重复创建资源消耗大的对象&#xff0c;例如日志系统、线…

学习:JS[8]本地存储+正则表达式

一.本地存储1.介绍将数据存储到用户浏览器当中设置、读取方便、页面刷新不丢失数据2.本地存储分类-localStoragea.语法(1)存储数据//存储数据 localStorage.setItem(键,值)如 localStorage.setItem(uname,哈哈)(2)获取数据//获取方式 都加引号 localStorage.getItem(键) localS…

C++算法练习:单词识别

做题记录&#xff1a;牛客习题&#xff1a;单词识别 相关题目代码已经提交到gitee中&#xff1a;楼田莉子 (riko-lou-tian) - Gitee.com喜欢请点个赞谢谢 目录 题目&#xff1a; C 字符函数头文件头文件&#xff1a;&#xff08;C 标准库&#xff09;核心函数功能说明&#…

从免费到盈利:Coze智能体1小时封装变现全流程指南——井云科技

在AI技术普惠的浪潮下&#xff0c;Coze等智能体平台让零代码开发者也能快速构建功能强大的AI助手。然而&#xff0c;许多创作者在完成智能体开发后&#xff0c;却面临“工具免费、成本自担”的困境——用户无限制调用导致算力成本飙升&#xff0c;想收费又缺乏成熟的支付与用户…

C++学习之STL学习:map/set

通过前面的学习&#xff0c;我们已经对C STL有了初步了解。然而&#xff0c;STL作为一个庞大复杂的体系&#xff0c;远不止这些内容。接下来&#xff0c;我们将深入探讨STL中的另外两个重要组件——map和set。 作者的个人gitee&#xff1a;楼田莉子 (riko-lou-tian) - Gitee.co…

[学习] CORDIC算法详解:从数学原理到反正切计算实战

CORDIC算法详解&#xff1a;从数学原理到反正切计算实战 文章目录CORDIC算法详解&#xff1a;从数学原理到反正切计算实战引言一、数学原理二、求解流程&#xff08;旋转模式&#xff09;三、典型应用场景四、反正切计算示例&#xff08;Python实现&#xff09;五、算法流程可视…

3款强力的Windows系统软件卸载工具

1、Geek 下载地址&#xff1a;https://download.csdn.net/download/weixin_42203093/91625765 Geek Uninstaller 是一款专业的 Windows 软件卸载工具&#xff0c;主要用于卸载软件并清理残留垃圾&#xff1a; 特点 体积小巧便携&#xff1a;软件体积约为 1.7M&#xff0c;是单…

AcWing 4579. 相遇问题

这道题做个今天的结尾 比较简单 正在备战csp吗&#xff0c;正好刷一下 难度&#xff1a;简单时/空限制&#xff1a;1s / 256MB总通过数&#xff1a;1738总尝试数&#xff1a;2584来源&#xff1a; CSP-J 2022 模拟赛 原题链接 4579. 相遇问题 - AcWing题库 题目描述 一…

基于clodop和Chrome原生打印的标签实现方法与性能对比

今天想看看&#xff0c;基于clodop和Chrome原生打印的标签实现方法与性能对比。先看看DeepSeek关于这个问题的回答&#xff01; CloudPrint 和 Chrome 原生打印的区别 基本概念差异 CloudPrint (Clodop) 是基于云的打印服务解决方案需要安装专门的客户端程序支持跨平台、跨设备…

百度网盘如何做到下载速度最快?OpenSpeedy绿色安装版下载,开源免费网盘加速

下载地址获取点击这里打开&#xff1a;OpenSpeedy下载地址 打开解压后的文件夹&#xff0c;找到【OpenSpeedy.exe】应用程序&#xff0c;右键选择【以管理员身份运行】。 添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09; 主要特性&#xff1a; 免费开源蛮…