赞
踩
搭建开发环境,首先下载STM32cubmx,图形化配置工具,非常强大,作为高端mcu,freertos是必备的,多任务开发,其他的软件包按照需求添加,比如文件系统,网络协议栈,USB、这些都是开发板上带的,必须加进去在添加软件包额时候,如果出现不合理的地方,点击生成代码的时候,会进行提示, 在SYS下降时钟从systick改成TIM1,警告消除;
类似的还有FREERTOS的newlib settings,直接改成enable
IDE开发工具当然选择STM32CubIDE,完成FREERTOS的系统工程,代码如下:
- /* USER CODE BEGIN Header */
-
- /**
-
- ******************************************************************************
-
- * [url=home.php?mod=space&uid=288409]@file[/url] : main.c
-
- * [url=home.php?mod=space&uid=247401]@brief[/url] : Main program body
-
- ******************************************************************************
-
- * @attention
-
- *
-
- * Copyright (c) 2022 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 "cmsis_os.h"
-
- #include "fatfs.h"
-
- #include "libjpeg.h"
-
- #include "mbedtls.h"
-
- #include "usb_device.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 ---------------------------------------------------------*/
-
- #if defined ( __ICCARM__ ) /*!< IAR Compiler */
-
- #pragma location=0x30000000
-
- ETH_DMADescTypeDef DMARxDscrTab[ETH_RX_DESC_CNT]; /* Ethernet Rx DMA Descriptors */
-
- #pragma location=0x30000200
-
- ETH_DMADescTypeDef DMATxDscrTab[ETH_TX_DESC_CNT]; /* Ethernet Tx DMA Descriptors */
-
-
-
- #elif defined ( __CC_ARM ) /* MDK ARM Compiler */
-
-
-
- __attribute__((at(0x30000000))) ETH_DMADescTypeDef DMARxDscrTab[ETH_RX_DESC_CNT]; /* Ethernet Rx DMA Descriptors */
-
- __attribute__((at(0x30000200))) ETH_DMADescTypeDef DMATxDscrTab[ETH_TX_DESC_CNT]; /* Ethernet Tx DMA Descriptors */
-
-
-
- #elif defined ( __GNUC__ ) /* GNU Compiler */
-
- ETH_DMADescTypeDef DMARxDscrTab[ETH_RX_DESC_CNT] __attribute__((section(".RxDecripSection"))); /* Ethernet Rx DMA Descriptors */
-
- ETH_DMADescTypeDef DMATxDscrTab[ETH_TX_DESC_CNT] __attribute__((section(".TxDecripSection"))); /* Ethernet Tx DMA Descriptors */
-
-
-
- #endif
-
-
-
- ETH_TxPacketConfig TxConfig;
-
-
-
- ADC_HandleTypeDef hadc1;
-
- ADC_HandleTypeDef hadc2;
-
- ADC_HandleTypeDef hadc3;
-
-
-
- ETH_HandleTypeDef heth;
-
-
-
- FDCAN_HandleTypeDef hfdcan1;
-
- FDCAN_HandleTypeDef hfdcan2;
-
-
-
- LTDC_HandleTypeDef hltdc;
-
-
-
- QSPI_HandleTypeDef hqspi;
-
-
-
- RTC_HandleTypeDef hrtc;
-
-
-
- SAI_HandleTypeDef hsai_BlockA2;
-
- SAI_HandleTypeDef hsai_BlockB2;
-
-
-
- MMC_HandleTypeDef hmmc1;
-
-
-
- SPI_HandleTypeDef hspi2;
-
-
-
- UART_HandleTypeDef huart3;
-
-
-
- SDRAM_HandleTypeDef hsdram1;
-
-
-
- /* Definitions for defaultTask */
-
- osThreadId_t defaultTaskHandle;
-
- const osThreadAttr_t defaultTask_attributes = {
-
- .name = "defaultTask",
-
- .stack_size = 128 * 4,
-
- .priority = (osPriority_t) osPriorityNormal,
-
- };
-
- /* 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_ADC1_Init(void);
-
- static void MX_ADC2_Init(void);
-
- static void MX_ADC3_Init(void);
-
- static void MX_ETH_Init(void);
-
- static void MX_FDCAN1_Init(void);
-
- static void MX_FDCAN2_Init(void);
-
- static void MX_FMC_Init(void);
-
- static void MX_LTDC_Init(void);
-
- static void MX_QUADSPI_Init(void);
-
- static void MX_RTC_Init(void);
-
- static void MX_SAI2_Init(void);
-
- static void MX_SDMMC1_MMC_Init(void);
-
- static void MX_SPI2_Init(void);
-
- static void MX_USART3_UART_Init(void);
-
- void StartDefaultTask(void *argument);
-
-
-
- /* USER CODE BEGIN PFP */
-
-
-
- /* USER CODE END PFP */
-
-
-
- /* Private user code ---------------------------------------------------------*/
-
- /* USER CODE BEGIN 0 */
-
-
-
- /* USER CODE END 0 */
-
-
-
- /**
-
- * [url=home.php?mod=space&uid=247401]@brief[/url] 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 */
-
-
-
- /* USER CODE END SysInit */
-
-
-
- /* Initialize all configured peripherals */
-
- MX_GPIO_Init();
-
- MX_ADC1_Init();
-
- MX_ADC2_Init();
-
- MX_ADC3_Init();
-
- MX_ETH_Init();
-
- MX_FDCAN1_Init();
-
- MX_FDCAN2_Init();
-
- MX_FMC_Init();
-
- MX_LTDC_Init();
-
- MX_QUADSPI_Init();
-
- MX_RTC_Init();
-
- MX_SAI2_Init();
-
- MX_SDMMC1_MMC_Init();
-
- MX_SPI2_Init();
-
- MX_USART3_UART_Init();
-
- MX_FATFS_Init();
-
- MX_LIBJPEG_Init();
-
- MX_MBEDTLS_Init();
-
- /* Call PreOsInit function */
-
- MX_MBEDTLS_Init();
-
- /* USER CODE BEGIN 2 */
-
-
-
- /* USER CODE END 2 */
-
-
-
- /* Init scheduler */
-
- osKernelInitialize();
-
-
-
- /* USER CODE BEGIN RTOS_MUTEX */
-
- /* add mutexes, ... */
-
- /* USER CODE END RTOS_MUTEX */
-
-
-
- /* USER CODE BEGIN RTOS_SEMAPHORES */
-
- /* add semaphores, ... */
-
- /* USER CODE END RTOS_SEMAPHORES */
-
-
-
- /* USER CODE BEGIN RTOS_TIMERS */
-
- /* start timers, add new ones, ... */
-
- /* USER CODE END RTOS_TIMERS */
-
-
-
- /* USER CODE BEGIN RTOS_QUEUES */
-
- /* add queues, ... */
-
- /* USER CODE END RTOS_QUEUES */
-
-
-
- /* Create the thread(s) */
-
- /* creation of defaultTask */
-
- defaultTaskHandle = osThreadNew(StartDefaultTask, NULL, &defaultTask_attributes);
-
-
-
- /* USER CODE BEGIN RTOS_THREADS */
-
- /* add threads, ... */
-
- /* USER CODE END RTOS_THREADS */
-
-
-
- /* USER CODE BEGIN RTOS_EVENTS */
-
- /* add events, ... */
-
- /* USER CODE END RTOS_EVENTS */
-
-
-
- /* Start scheduler */
-
- osKernelStart();
-
-
-
- /* We should never get here as control is now taken by the scheduler */
-
- /* Infinite loop */
-
- /* USER CODE BEGIN WHILE */
-
- while (1)
-
- {
-
- /* USER CODE END WHILE */
-
-
-
- /* USER CODE BEGIN 3 */
-
- }
-
- /* USER CODE END 3 */
-
- }
-
-
-
- /**
-
- * [url=home.php?mod=space&uid=247401]@brief[/url] 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_SCALE2);
-
-
-
- while(!__HAL_PWR_GET_FLAG(PWR_FLAG_VOSRDY)) {}
-
-
-
- /** Macro to configure the PLL clock source
-
- */
-
- __HAL_RCC_PLL_PLLSOURCE_CONFIG(RCC_PLLSOURCE_HSE);
-
-
-
- /** Initializes the RCC Oscillators according to the specified parameters
-
- * in the RCC_OscInitTypeDef structure.
-
- */
-
- RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI|RCC_OSCILLATORTYPE_LSI
-
- |RCC_OSCILLATORTYPE_HSE;
-
- RCC_OscInitStruct.HSEState = RCC_HSE_BYPASS;
-
- RCC_OscInitStruct.HSIState = RCC_HSI_DIV1;
-
- RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
-
- RCC_OscInitStruct.LSIState = RCC_LSI_ON;
-
- RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
-
- RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
-
- RCC_OscInitStruct.PLL.PLLM = 22;
-
- RCC_OscInitStruct.PLL.PLLN = 169;
-
- RCC_OscInitStruct.PLL.PLLP = 2;
-
- RCC_OscInitStruct.PLL.PLLQ = 4;
-
- RCC_OscInitStruct.PLL.PLLR = 2;
-
- RCC_OscInitStruct.PLL.PLLRGE = RCC_PLL1VCIRANGE_0;
-
- 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_HSI;
-
- RCC_ClkInitStruct.SYSCLKDivider = RCC_SYSCLK_DIV1;
-
- RCC_ClkInitStruct.AHBCLKDivider = RCC_HCLK_DIV1;
-
- RCC_ClkInitStruct.APB3CLKDivider = RCC_APB3_DIV1;
-
- RCC_ClkInitStruct.APB1CLKDivider = RCC_APB1_DIV1;
-
- RCC_ClkInitStruct.APB2CLKDivider = RCC_APB2_DIV1;
-
- RCC_ClkInitStruct.APB4CLKDivider = RCC_APB4_DIV1;
-
-
-
- if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_1) != 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_ADC;
-
- PeriphClkInitStruct.PLL2.PLL2M = 2;
-
- PeriphClkInitStruct.PLL2.PLL2N = 12;
-
- PeriphClkInitStruct.PLL2.PLL2P = 5;
-
- PeriphClkInitStruct.PLL2.PLL2Q = 2;
-
- PeriphClkInitStruct.PLL2.PLL2R = 2;
-
- PeriphClkInitStruct.PLL2.PLL2RGE = RCC_PLL2VCIRANGE_3;
-
- PeriphClkInitStruct.PLL2.PLL2VCOSEL = RCC_PLL2VCOMEDIUM;
-
- PeriphClkInitStruct.PLL2.PLL2FRACN = 0;
-
- 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_DIV2;
-
- 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_SOFTWARE_START;
-
- hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
-
- hadc1.Init.ConversionDataManagement = ADC_CONVERSIONDATA_DR;
-
- hadc1.Init.Overrun = ADC_OVR_DATA_PRESERVED;
-
- hadc1.Init.LeftBitShift = ADC_LEFTBITSHIFT_NONE;
-
- hadc1.Init.OversamplingMode = DISABLE;
-
- 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_0;
-
- sConfig.Rank = ADC_REGULAR_RANK_1;
-
- sConfig.SamplingTime = ADC_SAMPLETIME_1CYCLE_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 ADC2 Initialization Function
-
- * @param None
-
- * @retval None
-
- */
-
- static void MX_ADC2_Init(void)
-
- {
-
-
-
- /* USER CODE BEGIN ADC2_Init 0 */
-
-
-
- /* USER CODE END ADC2_Init 0 */
-
-
-
- ADC_ChannelConfTypeDef sConfig = {0};
-
-
-
- /* USER CODE BEGIN ADC2_Init 1 */
-
-
-
- /* USER CODE END ADC2_Init 1 */
-
-
-
- /** Common config
-
- */
-
- hadc2.Instance = ADC2;
-
- hadc2.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV2;
-
- hadc2.Init.Resolution = ADC_RESOLUTION_16B;
-
- hadc2.Init.ScanConvMode = ADC_SCAN_DISABLE;
-
- hadc2.Init.EOCSelection = ADC_EOC_SINGLE_CONV;
-
- hadc2.Init.LowPowerAutoWait = DISABLE;
-
- hadc2.Init.ContinuousConvMode = DISABLE;
-
- hadc2.Init.NbrOfConversion = 1;
-
- hadc2.Init.DiscontinuousConvMode = DISABLE;
-
- hadc2.Init.ExternalTrigConv = ADC_SOFTWARE_START;
-
- hadc2.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
-
- hadc2.Init.ConversionDataManagement = ADC_CONVERSIONDATA_DR;
-
- hadc2.Init.Overrun = ADC_OVR_DATA_PRESERVED;
-
- hadc2.Init.LeftBitShift = ADC_LEFTBITSHIFT_NONE;
-
- hadc2.Init.OversamplingMode = DISABLE;
-
- if (HAL_ADC_Init(&hadc2) != HAL_OK)
-
- {
-
- Error_Handler();
-
- }
-
-
-
- /** Configure Regular Channel
-
- */
-
- sConfig.Channel = ADC_CHANNEL_0;
-
- sConfig.Rank = ADC_REGULAR_RANK_1;
-
- sConfig.SamplingTime = ADC_SAMPLETIME_1CYCLE_5;
-
- sConfig.SingleDiff = ADC_SINGLE_ENDED;
-
- sConfig.OffsetNumber = ADC_OFFSET_NONE;
-
- sConfig.Offset = 0;
-
- sConfig.OffsetSignedSaturation = DISABLE;
-
- if (HAL_ADC_ConfigChannel(&hadc2, &sConfig) != HAL_OK)
-
- {
-
- Error_Handler();
-
- }
-
- /* USER CODE BEGIN ADC2_Init 2 */
-
-
-
- /* USER CODE END ADC2_Init 2 */
-
-
-
- }
-
-
-
- /**
-
- * @brief ADC3 Initialization Function
-
- * @param None
-
- * @retval None
-
- */
-
- static void MX_ADC3_Init(void)
-
- {
-
-
-
- /* USER CODE BEGIN ADC3_Init 0 */
-
-
-
- /* USER CODE END ADC3_Init 0 */
-
-
-
- ADC_ChannelConfTypeDef sConfig = {0};
-
-
-
- /* USER CODE BEGIN ADC3_Init 1 */
-
-
-
- /* USER CODE END ADC3_Init 1 */
-
-
-
- /** Common config
-
- */
-
- hadc3.Instance = ADC3;
-
- hadc3.Init.Resolution = ADC_RESOLUTION_16B;
-
- hadc3.Init.ScanConvMode = ADC_SCAN_DISABLE;
-
- hadc3.Init.EOCSelection = ADC_EOC_SINGLE_CONV;
-
- hadc3.Init.LowPowerAutoWait = DISABLE;
-
- hadc3.Init.ContinuousConvMode = DISABLE;
-
- hadc3.Init.NbrOfConversion = 1;
-
- hadc3.Init.DiscontinuousConvMode = DISABLE;
-
- hadc3.Init.ExternalTrigConv = ADC_SOFTWARE_START;
-
- hadc3.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
-
- hadc3.Init.ConversionDataManagement = ADC_CONVERSIONDATA_DR;
-
- hadc3.Init.Overrun = ADC_OVR_DATA_PRESERVED;
-
- hadc3.Init.LeftBitShift = ADC_LEFTBITSHIFT_NONE;
-
- hadc3.Init.OversamplingMode = DISABLE;
-
- if (HAL_ADC_Init(&hadc3) != HAL_OK)
-
- {
-
- Error_Handler();
-
- }
-
-
-
- /** Configure Regular Channel
-
- */
-
- sConfig.Channel = ADC_CHANNEL_7;
-
- sConfig.Rank = ADC_REGULAR_RANK_1;
-
- sConfig.SamplingTime = ADC_SAMPLETIME_1CYCLE_5;
-
- sConfig.SingleDiff = ADC_SINGLE_ENDED;
-
- sConfig.OffsetNumber = ADC_OFFSET_NONE;
-
- sConfig.Offset = 0;
-
- sConfig.OffsetSignedSaturation = DISABLE;
-
- if (HAL_ADC_ConfigChannel(&hadc3, &sConfig) != HAL_OK)
-
- {
-
- Error_Handler();
-
- }
-
- /* USER CODE BEGIN ADC3_Init 2 */
-
-
-
- /* USER CODE END ADC3_Init 2 */
-
-
-
- }
-
-
-
- /**
-
- * @brief ETH Initialization Function
-
- * @param None
-
- * @retval None
-
- */
-
- static void MX_ETH_Init(void)
-
- {
-
-
-
- /* USER CODE BEGIN ETH_Init 0 */
-
-
-
- /* USER CODE END ETH_Init 0 */
-
-
-
- static uint8_t MACAddr[6];
-
-
-
- /* USER CODE BEGIN ETH_Init 1 */
-
-
-
- /* USER CODE END ETH_Init 1 */
-
- heth.Instance = ETH;
-
- MACAddr[0] = 0x00;
-
- MACAddr[1] = 0x80;
-
- MACAddr[2] = 0xE1;
-
- MACAddr[3] = 0x00;
-
- MACAddr[4] = 0x00;
-
- MACAddr[5] = 0x00;
-
- heth.Init.MACAddr = &MACAddr[0];
-
- heth.Init.MediaInterface = HAL_ETH_MII_MODE;
-
- heth.Init.TxDesc = DMATxDscrTab;
-
- heth.Init.RxDesc = DMARxDscrTab;
-
- heth.Init.RxBuffLen = 1524;
-
-
-
- /* USER CODE BEGIN MACADDRESS */
-
-
-
- /* USER CODE END MACADDRESS */
-
-
-
- if (HAL_ETH_Init(&heth) != HAL_OK)
-
- {
-
- Error_Handler();
-
- }
-
-
-
- memset(&TxConfig, 0 , sizeof(ETH_TxPacketConfig));
-
- TxConfig.Attributes = ETH_TX_PACKETS_FEATURES_CSUM | ETH_TX_PACKETS_FEATURES_CRCPAD;
-
- TxConfig.ChecksumCtrl = ETH_CHECKSUM_IPHDR_PAYLOAD_INSERT_PHDR_CALC;
-
- TxConfig.CRCPadCtrl = ETH_CRC_PAD_INSERT;
-
- /* USER CODE BEGIN ETH_Init 2 */
-
-
-
- /* USER CODE END ETH_Init 2 */
-
-
-
- }
-
-
-
- /**
-
- * @brief FDCAN1 Initialization Function
-
- * @param None
-
- * @retval None
-
- */
-
- static void MX_FDCAN1_Init(void)
-
- {
-
-
-
- /* USER CODE BEGIN FDCAN1_Init 0 */
-
-
-
- /* USER CODE END FDCAN1_Init 0 */
-
-
-
- /* USER CODE BEGIN FDCAN1_Init 1 */
-
-
-
- /* USER CODE END FDCAN1_Init 1 */
-
- hfdcan1.Instance = FDCAN1;
-
- hfdcan1.Init.FrameFormat = FDCAN_FRAME_CLASSIC;
-
- hfdcan1.Init.Mode = FDCAN_MODE_NORMAL;
-
- hfdcan1.Init.AutoRetransmission = DISABLE;
-
- hfdcan1.Init.TransmitPause = DISABLE;
-
- hfdcan1.Init.ProtocolException = DISABLE;
-
- hfdcan1.Init.NominalPrescaler = 16;
-
- hfdcan1.Init.NominalSyncJumpWidth = 1;
-
- hfdcan1.Init.NominalTimeSeg1 = 2;
-
- hfdcan1.Init.NominalTimeSeg2 = 2;
-
- hfdcan1.Init.DataPrescaler = 1;
-
- hfdcan1.Init.DataSyncJumpWidth = 1;
-
- hfdcan1.Init.DataTimeSeg1 = 1;
-
- hfdcan1.Init.DataTimeSeg2 = 1;
-
- hfdcan1.Init.MessageRAMOffset = 0;
-
- hfdcan1.Init.StdFiltersNbr = 0;
-
- hfdcan1.Init.ExtFiltersNbr = 0;
-
- hfdcan1.Init.RxFifo0ElmtsNbr = 0;
-
- hfdcan1.Init.RxFifo0ElmtSize = FDCAN_DATA_BYTES_8;
-
- hfdcan1.Init.RxFifo1ElmtsNbr = 0;
-
- hfdcan1.Init.RxFifo1ElmtSize = FDCAN_DATA_BYTES_8;
-
- hfdcan1.Init.RxBuffersNbr = 0;
-
- hfdcan1.Init.RxBufferSize = FDCAN_DATA_BYTES_8;
-
- hfdcan1.Init.TxEventsNbr = 0;
-
- hfdcan1.Init.TxBuffersNbr = 0;
-
- hfdcan1.Init.TxFifoQueueElmtsNbr = 0;
-
- hfdcan1.Init.TxFifoQueueMode = FDCAN_TX_FIFO_OPERATION;
-
- hfdcan1.Init.TxElmtSize = FDCAN_DATA_BYTES_8;
-
- if (HAL_FDCAN_Init(&hfdcan1) != HAL_OK)
-
- {
-
- Error_Handler();
-
- }
-
- /* USER CODE BEGIN FDCAN1_Init 2 */
-
-
-
- /* USER CODE END FDCAN1_Init 2 */
-
-
-
- }
-
-
-
- /**
-
- * @brief FDCAN2 Initialization Function
-
- * @param None
-
- * @retval None
-
- */
-
- static void MX_FDCAN2_Init(void)
-
- {
-
-
-
- /* USER CODE BEGIN FDCAN2_Init 0 */
-
-
-
- /* USER CODE END FDCAN2_Init 0 */
-
-
-
- /* USER CODE BEGIN FDCAN2_Init 1 */
-
-
-
- /* USER CODE END FDCAN2_Init 1 */
-
- hfdcan2.Instance = FDCAN2;
-
- hfdcan2.Init.FrameFormat = FDCAN_FRAME_CLASSIC;
-
- hfdcan2.Init.Mode = FDCAN_MODE_NORMAL;
-
- hfdcan2.Init.AutoRetransmission = DISABLE;
-
- hfdcan2.Init.TransmitPause = DISABLE;
-
- hfdcan2.Init.ProtocolException = DISABLE;
-
- hfdcan2.Init.NominalPrescaler = 16;
-
- hfdcan2.Init.NominalSyncJumpWidth = 1;
-
- hfdcan2.Init.NominalTimeSeg1 = 2;
-
- hfdcan2.Init.NominalTimeSeg2 = 2;
-
- hfdcan2.Init.DataPrescaler = 1;
-
- hfdcan2.Init.DataSyncJumpWidth = 1;
-
- hfdcan2.Init.DataTimeSeg1 = 1;
-
- hfdcan2.Init.DataTimeSeg2 = 1;
-
- hfdcan2.Init.MessageRAMOffset = 0;
-
- hfdcan2.Init.StdFiltersNbr = 0;
-
- hfdcan2.Init.ExtFiltersNbr = 0;
-
- hfdcan2.Init.RxFifo0ElmtsNbr = 0;
-
- hfdcan2.Init.RxFifo0ElmtSize = FDCAN_DATA_BYTES_8;
-
- hfdcan2.Init.RxFifo1ElmtsNbr = 0;
-
- hfdcan2.Init.RxFifo1ElmtSize = FDCAN_DATA_BYTES_8;
-
- hfdcan2.Init.RxBuffersNbr = 0;
-
- hfdcan2.Init.RxBufferSize = FDCAN_DATA_BYTES_8;
-
- hfdcan2.Init.TxEventsNbr = 0;
-
- hfdcan2.Init.TxBuffersNbr = 0;
-
- hfdcan2.Init.TxFifoQueueElmtsNbr = 0;
-
- hfdcan2.Init.TxFifoQueueMode = FDCAN_TX_FIFO_OPERATION;
-
- hfdcan2.Init.TxElmtSize = FDCAN_DATA_BYTES_8;
-
- if (HAL_FDCAN_Init(&hfdcan2) != HAL_OK)
-
- {
-
- Error_Handler();
-
- }
-
- /* USER CODE BEGIN FDCAN2_Init 2 */
-
-
-
- /* USER CODE END FDCAN2_Init 2 */
-
-
-
- }
-
-
-
- /**
-
- * @brief LTDC Initialization Function
-
- * @param None
-
- * @retval None
-
- */
-
- static void MX_LTDC_Init(void)
-
- {
-
-
-
- /* USER CODE BEGIN LTDC_Init 0 */
-
-
-
- /* USER CODE END LTDC_Init 0 */
-
-
-
- LTDC_LayerCfgTypeDef pLayerCfg = {0};
-
- LTDC_LayerCfgTypeDef pLayerCfg1 = {0};
-
-
-
- /* USER CODE BEGIN LTDC_Init 1 */
-
-
-
- /* USER CODE END LTDC_Init 1 */
-
- hltdc.Instance = LTDC;
-
- hltdc.Init.HSPolarity = LTDC_HSPOLARITY_AL;
-
- hltdc.Init.VSPolarity = LTDC_VSPOLARITY_AL;
-
- hltdc.Init.DEPolarity = LTDC_DEPOLARITY_AL;
-
- hltdc.Init.PCPolarity = LTDC_PCPOLARITY_IPC;
-
- hltdc.Init.HorizontalSync = 7;
-
- hltdc.Init.VerticalSync = 3;
-
- hltdc.Init.AccumulatedHBP = 14;
-
- hltdc.Init.AccumulatedVBP = 5;
-
- hltdc.Init.AccumulatedActiveW = 654;
-
- hltdc.Init.AccumulatedActiveH = 485;
-
- hltdc.Init.TotalWidth = 660;
-
- hltdc.Init.TotalHeigh = 487;
-
- hltdc.Init.Backcolor.Blue = 0;
-
- hltdc.Init.Backcolor.Green = 0;
-
- hltdc.Init.Backcolor.Red = 0;
-
- if (HAL_LTDC_Init(&hltdc) != HAL_OK)
-
- {
-
- Error_Handler();
-
- }
-
- pLayerCfg.WindowX0 = 0;
-
- pLayerCfg.WindowX1 = 0;
-
- pLayerCfg.WindowY0 = 0;
-
- pLayerCfg.WindowY1 = 0;
-
- pLayerCfg.PixelFormat = LTDC_PIXEL_FORMAT_ARGB8888;
-
- pLayerCfg.Alpha = 0;
-
- pLayerCfg.Alpha0 = 0;
-
- pLayerCfg.BlendingFactor1 = LTDC_BLENDING_FACTOR1_CA;
-
- pLayerCfg.BlendingFactor2 = LTDC_BLENDING_FACTOR2_CA;
-
- pLayerCfg.FBStartAdress = 0;
-
- pLayerCfg.ImageWidth = 0;
-
- pLayerCfg.ImageHeight = 0;
-
- pLayerCfg.Backcolor.Blue = 0;
-
- pLayerCfg.Backcolor.Green = 0;
-
- pLayerCfg.Backcolor.Red = 0;
-
- if (HAL_LTDC_ConfigLayer(&hltdc, &pLayerCfg, 0) != HAL_OK)
-
- {
-
- Error_Handler();
-
- }
-
- pLayerCfg1.WindowX0 = 0;
-
- pLayerCfg1.WindowX1 = 0;
-
- pLayerCfg1.WindowY0 = 0;
-
- pLayerCfg1.WindowY1 = 0;
-
- pLayerCfg1.PixelFormat = LTDC_PIXEL_FORMAT_ARGB8888;
-
- pLayerCfg1.Alpha = 0;
-
- pLayerCfg1.Alpha0 = 0;
-
- pLayerCfg1.BlendingFactor1 = LTDC_BLENDING_FACTOR1_CA;
-
- pLayerCfg1.BlendingFactor2 = LTDC_BLENDING_FACTOR2_CA;
-
- pLayerCfg1.FBStartAdress = 0;
-
- pLayerCfg1.ImageWidth = 0;
-
- pLayerCfg1.ImageHeight = 0;
-
- pLayerCfg1.Backcolor.Blue = 0;
-
- pLayerCfg1.Backcolor.Green = 0;
-
- pLayerCfg1.Backcolor.Red = 0;
-
- if (HAL_LTDC_ConfigLayer(&hltdc, &pLayerCfg1, 1) != HAL_OK)
-
- {
-
- Error_Handler();
-
- }
-
- /* USER CODE BEGIN LTDC_Init 2 */
-
-
-
- /* USER CODE END LTDC_Init 2 */
-
-
-
- }
-
-
-
- /**
-
- * @brief QUADSPI Initialization Function
-
- * @param None
-
- * @retval None
-
- */
-
- static void MX_QUADSPI_Init(void)
-
- {
-
-
-
- /* USER CODE BEGIN QUADSPI_Init 0 */
-
-
-
- /* USER CODE END QUADSPI_Init 0 */
-
-
-
- /* USER CODE BEGIN QUADSPI_Init 1 */
-
-
-
- /* USER CODE END QUADSPI_Init 1 */
-
- /* QUADSPI parameter configuration*/
-
- hqspi.Instance = QUADSPI;
-
- hqspi.Init.ClockPrescaler = 255;
-
- hqspi.Init.FifoThreshold = 1;
-
- hqspi.Init.SampleShifting = QSPI_SAMPLE_SHIFTING_NONE;
-
- hqspi.Init.FlashSize = 1;
-
- hqspi.Init.ChipSelectHighTime = QSPI_CS_HIGH_TIME_1_CYCLE;
-
- hqspi.Init.ClockMode = QSPI_CLOCK_MODE_0;
-
- hqspi.Init.FlashID = QSPI_FLASH_ID_1;
-
- hqspi.Init.DualFlash = QSPI_DUALFLASH_DISABLE;
-
- if (HAL_QSPI_Init(&hqspi) != HAL_OK)
-
- {
-
- Error_Handler();
-
- }
-
- /* USER CODE BEGIN QUADSPI_Init 2 */
-
-
-
- /* USER CODE END QUADSPI_Init 2 */
-
-
-
- }
-
-
-
- /**
-
- * @brief RTC Initialization Function
-
- * @param None
-
- * @retval None
-
- */
-
- static void MX_RTC_Init(void)
-
- {
-
-
-
- /* USER CODE BEGIN RTC_Init 0 */
-
-
-
- /* USER CODE END RTC_Init 0 */
-
-
-
- /* USER CODE BEGIN RTC_Init 1 */
-
-
-
- /* USER CODE END RTC_Init 1 */
-
-
-
- /** Initialize RTC Only
-
- */
-
- hrtc.Instance = RTC;
-
- hrtc.Init.HourFormat = RTC_HOURFORMAT_24;
-
- hrtc.Init.AsynchPrediv = 127;
-
- hrtc.Init.SynchPrediv = 255;
-
- hrtc.Init.OutPut = RTC_OUTPUT_DISABLE;
-
- hrtc.Init.OutPutPolarity = RTC_OUTPUT_POLARITY_HIGH;
-
- hrtc.Init.OutPutType = RTC_OUTPUT_TYPE_OPENDRAIN;
-
- hrtc.Init.OutPutRemap = RTC_OUTPUT_REMAP_NONE;
-
- if (HAL_RTC_Init(&hrtc) != HAL_OK)
-
- {
-
- Error_Handler();
-
- }
-
- /* USER CODE BEGIN RTC_Init 2 */
-
-
-
- /* USER CODE END RTC_Init 2 */
-
-
-
- }
-
-
-
- /**
-
- * @brief SAI2 Initialization Function
-
- * @param None
-
- * @retval None
-
- */
-
- static void MX_SAI2_Init(void)
-
- {
-
-
-
- /* USER CODE BEGIN SAI2_Init 0 */
-
-
-
- /* USER CODE END SAI2_Init 0 */
-
-
-
- /* USER CODE BEGIN SAI2_Init 1 */
-
-
-
- /* USER CODE END SAI2_Init 1 */
-
- hsai_BlockA2.Instance = SAI2_Block_A;
-
- hsai_BlockA2.Init.Protocol = SAI_FREE_PROTOCOL;
-
- hsai_BlockA2.Init.AudioMode = SAI_MODEMASTER_TX;
-
- hsai_BlockA2.Init.DataSize = SAI_DATASIZE_8;
-
- hsai_BlockA2.Init.FirstBit = SAI_FIRSTBIT_MSB;
-
- hsai_BlockA2.Init.ClockStrobing = SAI_CLOCKSTROBING_FALLINGEDGE;
-
- hsai_BlockA2.Init.Synchro = SAI_ASYNCHRONOUS;
-
- hsai_BlockA2.Init.OutputDrive = SAI_OUTPUTDRIVE_DISABLE;
-
- hsai_BlockA2.Init.NoDivider = SAI_MASTERDIVIDER_ENABLE;
-
- hsai_BlockA2.Init.FIFOThreshold = SAI_FIFOTHRESHOLD_EMPTY;
-
- hsai_BlockA2.Init.AudioFrequency = SAI_AUDIO_FREQUENCY_192K;
-
- hsai_BlockA2.Init.SynchroExt = SAI_SYNCEXT_DISABLE;
-
- hsai_BlockA2.Init.MonoStereoMode = SAI_STEREOMODE;
-
- hsai_BlockA2.Init.CompandingMode = SAI_NOCOMPANDING;
-
- hsai_BlockA2.Init.TriState = SAI_OUTPUT_NOTRELEASED;
-
- hsai_BlockA2.Init.PdmInit.Activation = DISABLE;
-
- hsai_BlockA2.Init.PdmInit.MicPairsNbr = 1;
-
- hsai_BlockA2.Init.PdmInit.ClockEnable = SAI_PDM_CLOCK1_ENABLE;
-
- hsai_BlockA2.FrameInit.FrameLength = 8;
-
- hsai_BlockA2.FrameInit.ActiveFrameLength = 1;
-
- hsai_BlockA2.FrameInit.FSDefinition = SAI_FS_STARTFRAME;
-
- hsai_BlockA2.FrameInit.FSPolarity = SAI_FS_ACTIVE_LOW;
-
- hsai_BlockA2.FrameInit.FSOffset = SAI_FS_FIRSTBIT;
-
- hsai_BlockA2.SlotInit.FirstBitOffset = 0;
-
- hsai_BlockA2.SlotInit.SlotSize = SAI_SLOTSIZE_DATASIZE;
-
- hsai_BlockA2.SlotInit.SlotNumber = 1;
-
- hsai_BlockA2.SlotInit.SlotActive = 0x00000000;
-
- if (HAL_SAI_Init(&hsai_BlockA2) != HAL_OK)
-
- {
-
- Error_Handler();
-
- }
-
- hsai_BlockB2.Instance = SAI2_Block_B;
-
- hsai_BlockB2.Init.Protocol = SAI_FREE_PROTOCOL;
-
- hsai_BlockB2.Init.AudioMode = SAI_MODESLAVE_RX;
-
- hsai_BlockB2.Init.DataSize = SAI_DATASIZE_8;
-
- hsai_BlockB2.Init.FirstBit = SAI_FIRSTBIT_MSB;
-
- hsai_BlockB2.Init.ClockStrobing = SAI_CLOCKSTROBING_FALLINGEDGE;
-
- hsai_BlockB2.Init.Synchro = SAI_SYNCHRONOUS;
-
- hsai_BlockB2.Init.OutputDrive = SAI_OUTPUTDRIVE_DISABLE;
-
- hsai_BlockB2.Init.FIFOThreshold = SAI_FIFOTHRESHOLD_EMPTY;
-
- hsai_BlockB2.Init.SynchroExt = SAI_SYNCEXT_DISABLE;
-
- hsai_BlockB2.Init.MonoStereoMode = SAI_STEREOMODE;
-
- hsai_BlockB2.Init.CompandingMode = SAI_NOCOMPANDING;
-
- hsai_BlockB2.Init.TriState = SAI_OUTPUT_NOTRELEASED;
-
- hsai_BlockB2.Init.PdmInit.Activation = DISABLE;
-
- hsai_BlockB2.Init.PdmInit.MicPairsNbr = 1;
-
- hsai_BlockB2.Init.PdmInit.ClockEnable = SAI_PDM_CLOCK1_ENABLE;
-
- hsai_BlockB2.FrameInit.FrameLength = 8;
-
- hsai_BlockB2.FrameInit.ActiveFrameLength = 1;
-
- hsai_BlockB2.FrameInit.FSDefinition = SAI_FS_STARTFRAME;
-
- hsai_BlockB2.FrameInit.FSPolarity = SAI_FS_ACTIVE_LOW;
-
- hsai_BlockB2.FrameInit.FSOffset = SAI_FS_FIRSTBIT;
-
- hsai_BlockB2.SlotInit.FirstBitOffset = 0;
-
- hsai_BlockB2.SlotInit.SlotSize = SAI_SLOTSIZE_DATASIZE;
-
- hsai_BlockB2.SlotInit.SlotNumber = 1;
-
- hsai_BlockB2.SlotInit.SlotActive = 0x00000000;
-
- if (HAL_SAI_Init(&hsai_BlockB2) != HAL_OK)
-
- {
-
- Error_Handler();
-
- }
-
- /* USER CODE BEGIN SAI2_Init 2 */
-
-
-
- /* USER CODE END SAI2_Init 2 */
-
-
-
- }
-
-
-
- /**
-
- * @brief SDMMC1 Initialization Function
-
- * @param None
-
- * @retval None
-
- */
-
- static void MX_SDMMC1_MMC_Init(void)
-
- {
-
-
-
- /* USER CODE BEGIN SDMMC1_Init 0 */
-
-
-
- /* USER CODE END SDMMC1_Init 0 */
-
-
-
- /* USER CODE BEGIN SDMMC1_Init 1 */
-
-
-
- /* USER CODE END SDMMC1_Init 1 */
-
- hmmc1.Instance = SDMMC1;
-
- hmmc1.Init.ClockEdge = SDMMC_CLOCK_EDGE_RISING;
-
- hmmc1.Init.ClockPowerSave = SDMMC_CLOCK_POWER_SAVE_DISABLE;
-
- hmmc1.Init.BusWide = SDMMC_BUS_WIDE_8B;
-
- hmmc1.Init.HardwareFlowControl = SDMMC_HARDWARE_FLOW_CONTROL_DISABLE;
-
- hmmc1.Init.ClockDiv = 0;
-
- if (HAL_MMC_Init(&hmmc1) != HAL_OK)
-
- {
-
- Error_Handler();
-
- }
-
- /* USER CODE BEGIN SDMMC1_Init 2 */
-
-
-
- /* USER CODE END SDMMC1_Init 2 */
-
-
-
- }
-
-
-
- /**
-
- * @brief SPI2 Initialization Function
-
- * @param None
-
- * @retval None
-
- */
-
- static void MX_SPI2_Init(void)
-
- {
-
-
-
- /* USER CODE BEGIN SPI2_Init 0 */
-
-
-
- /* USER CODE END SPI2_Init 0 */
-
-
-
- /* USER CODE BEGIN SPI2_Init 1 */
-
-
-
- /* USER CODE END SPI2_Init 1 */
-
- /* SPI2 parameter configuration*/
-
- hspi2.Instance = SPI2;
-
- hspi2.Init.Mode = SPI_MODE_MASTER;
-
- hspi2.Init.Direction = SPI_DIRECTION_2LINES;
-
- hspi2.Init.DataSize = SPI_DATASIZE_4BIT;
-
- hspi2.Init.CLKPolarity = SPI_POLARITY_LOW;
-
- hspi2.Init.CLKPhase = SPI_PHASE_1EDGE;
-
- hspi2.Init.NSS = SPI_NSS_HARD_INPUT;
-
- hspi2.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_2;
-
- hspi2.Init.FirstBit = SPI_FIRSTBIT_MSB;
-
- hspi2.Init.TIMode = SPI_TIMODE_DISABLE;
-
- hspi2.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
-
- hspi2.Init.CRCPolynomial = 0x0;
-
- hspi2.Init.NSSPMode = SPI_NSS_PULSE_ENABLE;
-
- hspi2.Init.NSSPolarity = SPI_NSS_POLARITY_LOW;
-
- hspi2.Init.FifoThreshold = SPI_FIFO_THRESHOLD_01DATA;
-
- hspi2.Init.TxCRCInitializationPattern = SPI_CRC_INITIALIZATION_ALL_ZERO_PATTERN;
-
- hspi2.Init.RxCRCInitializationPattern = SPI_CRC_INITIALIZATION_ALL_ZERO_PATTERN;
-
- hspi2.Init.MasterSSIdleness = SPI_MASTER_SS_IDLENESS_00CYCLE;
-
- hspi2.Init.MasterInterDataIdleness = SPI_MASTER_INTERDATA_IDLENESS_00CYCLE;
-
- hspi2.Init.MasterReceiverAutoSusp = SPI_MASTER_RX_AUTOSUSP_DISABLE;
-
- hspi2.Init.MasterKeepIOState = SPI_MASTER_KEEP_IO_STATE_DISABLE;
-
- hspi2.Init.IOSwap = SPI_IO_SWAP_DISABLE;
-
- if (HAL_SPI_Init(&hspi2) != HAL_OK)
-
- {
-
- Error_Handler();
-
- }
-
- /* USER CODE BEGIN SPI2_Init 2 */
-
-
-
- /* USER CODE END SPI2_Init 2 */
-
-
-
- }
-
-
-
- /**
-
- * @brief USART3 Initialization Function
-
- * @param None
-
- * @retval None
-
- */
-
- static void MX_USART3_UART_Init(void)
-
- {
-
-
-
- /* USER CODE BEGIN USART3_Init 0 */
-
-
-
- /* USER CODE END USART3_Init 0 */
-
-
-
- /* USER CODE BEGIN USART3_Init 1 */
-
-
-
- /* USER CODE END USART3_Init 1 */
-
- huart3.Instance = USART3;
-
- huart3.Init.BaudRate = 115200;
-
- huart3.Init.WordLength = UART_WORDLENGTH_8B;
-
- huart3.Init.StopBits = UART_STOPBITS_1;
-
- huart3.Init.Parity = UART_PARITY_NONE;
-
- huart3.Init.Mode = UART_MODE_TX_RX;
-
- huart3.Init.HwFlowCtl = UART_HWCONTROL_NONE;
-
- huart3.Init.OverSampling = UART_OVERSAMPLING_16;
-
- huart3.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
-
- huart3.Init.ClockPrescaler = UART_PRESCALER_DIV1;
-
- huart3.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
-
- if (HAL_UART_Init(&huart3) != HAL_OK)
-
- {
-
- Error_Handler();
-
- }
-
- if (HAL_UARTEx_SetTxFifoThreshold(&huart3, UART_TXFIFO_THRESHOLD_1_8) != HAL_OK)
-
- {
-
- Error_Handler();
-
- }
-
- if (HAL_UARTEx_SetRxFifoThreshold(&huart3, UART_RXFIFO_THRESHOLD_1_8) != HAL_OK)
-
- {
-
- Error_Handler();
-
- }
-
- if (HAL_UARTEx_DisableFifoMode(&huart3) != HAL_OK)
-
- {
-
- Error_Handler();
-
- }
-
- /* USER CODE BEGIN USART3_Init 2 */
-
-
-
- /* USER CODE END USART3_Init 2 */
-
-
-
- }
-
-
-
- /* FMC initialization function */
-
- static void MX_FMC_Init(void)
-
- {
-
-
-
- /* USER CODE BEGIN FMC_Init 0 */
-
-
-
- /* USER CODE END FMC_Init 0 */
-
-
-
- FMC_SDRAM_TimingTypeDef SdramTiming = {0};
-
-
-
- /* USER CODE BEGIN FMC_Init 1 */
-
-
-
- /* USER CODE END FMC_Init 1 */
-
-
-
- /** Perform the SDRAM1 memory initialization sequence
-
- */
-
- hsdram1.Instance = FMC_SDRAM_DEVICE;
-
- /* hsdram1.Init */
-
- hsdram1.Init.SDBank = FMC_SDRAM_BANK2;
-
- hsdram1.Init.ColumnBitsNumber = FMC_SDRAM_COLUMN_BITS_NUM_8;
-
- hsdram1.Init.RowBitsNumber = FMC_SDRAM_ROW_BITS_NUM_12;
-
- hsdram1.Init.MemoryDataWidth = FMC_SDRAM_MEM_BUS_WIDTH_16;
-
- hsdram1.Init.InternalBankNumber = FMC_SDRAM_INTERN_BANKS_NUM_4;
-
- hsdram1.Init.CASLatency = FMC_SDRAM_CAS_LATENCY_1;
-
- hsdram1.Init.WriteProtection = FMC_SDRAM_WRITE_PROTECTION_DISABLE;
-
- hsdram1.Init.SDClockPeriod = FMC_SDRAM_CLOCK_DISABLE;
-
- hsdram1.Init.ReadBurst = FMC_SDRAM_RBURST_DISABLE;
-
- hsdram1.Init.ReadPipeDelay = FMC_SDRAM_RPIPE_DELAY_0;
-
- /* SdramTiming */
-
- SdramTiming.LoadToActiveDelay = 16;
-
- SdramTiming.ExitSelfRefreshDelay = 16;
-
- SdramTiming.SelfRefreshTime = 16;
-
- SdramTiming.RowCycleDelay = 16;
-
- SdramTiming.WriteRecoveryTime = 16;
-
- SdramTiming.RPDelay = 16;
-
- SdramTiming.RCDDelay = 16;
-
-
-
- if (HAL_SDRAM_Init(&hsdram1, &SdramTiming) != HAL_OK)
-
- {
-
- Error_Handler( );
-
- }
-
-
-
- /* USER CODE BEGIN FMC_Init 2 */
-
-
-
- /* USER CODE END FMC_Init 2 */
-
- }
-
-
-
- /**
-
- * @brief GPIO Initialization Function
-
- * @param None
-
- * @retval None
-
- */
-
- static void MX_GPIO_Init(void)
-
- {
-
- GPIO_InitTypeDef GPIO_InitStruct = {0};
-
-
-
- /* GPIO Ports Clock Enable */
-
- __HAL_RCC_GPIOI_CLK_ENABLE();
-
- __HAL_RCC_GPIOB_CLK_ENABLE();
-
- __HAL_RCC_GPIOK_CLK_ENABLE();
-
- __HAL_RCC_GPIOG_CLK_ENABLE();
-
- __HAL_RCC_GPIOC_CLK_ENABLE();
-
- __HAL_RCC_GPIOE_CLK_ENABLE();
-
- __HAL_RCC_GPIOJ_CLK_ENABLE();
-
- __HAL_RCC_GPIOD_CLK_ENABLE();
-
- __HAL_RCC_GPIOH_CLK_ENABLE();
-
- __HAL_RCC_GPIOA_CLK_ENABLE();
-
- __HAL_RCC_GPIOF_CLK_ENABLE();
-
-
-
- /*Configure GPIO pin Output Level */
-
- HAL_GPIO_WritePin(LD2_GPIO_Port, LD2_Pin, GPIO_PIN_RESET);
-
-
-
- /*Configure GPIO pin Output Level */
-
- HAL_GPIO_WritePin(LD1_GPIO_Port, LD1_Pin, GPIO_PIN_RESET);
-
-
-
- /*Configure GPIO pin Output Level */
-
- HAL_GPIO_WritePin(LCD_RST_GPIO_Port, LCD_RST_Pin, GPIO_PIN_RESET);
-
-
-
- /*Configure GPIO pin : PH15 */
-
- GPIO_InitStruct.Pin = GPIO_PIN_15;
-
- GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
-
- GPIO_InitStruct.Pull = GPIO_NOPULL;
-
- GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
-
- GPIO_InitStruct.Alternate = GPIO_AF3_TIM8;
-
- HAL_GPIO_Init(GPIOH, &GPIO_InitStruct);
-
-
-
- /*Configure GPIO pin : LCD_DISPD7_Pin */
-
- GPIO_InitStruct.Pin = LCD_DISPD7_Pin;
-
- GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
-
- GPIO_InitStruct.Pull = GPIO_NOPULL;
-
- HAL_GPIO_Init(LCD_DISPD7_GPIO_Port, &GPIO_InitStruct);
-
-
-
- /*Configure GPIO pins : PE5 PE4 */
-
- GPIO_InitStruct.Pin = GPIO_PIN_5|GPIO_PIN_4;
-
- GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
-
- GPIO_InitStruct.Pull = GPIO_NOPULL;
-
- GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
-
- GPIO_InitStruct.Alternate = GPIO_AF10_SAI4;
-
- HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);
-
-
-
- /*Configure GPIO pin : USB_OTG_FS2_ID_Pin */
-
- GPIO_InitStruct.Pin = USB_OTG_FS2_ID_Pin;
-
- GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
-
- GPIO_InitStruct.Pull = GPIO_NOPULL;
-
- HAL_GPIO_Init(USB_OTG_FS2_ID_GPIO_Port, &GPIO_InitStruct);
-
-
-
- /*Configure GPIO pin : B1_Pin */
-
- GPIO_InitStruct.Pin = B1_Pin;
-
- GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
-
- GPIO_InitStruct.Pull = GPIO_NOPULL;
-
- HAL_GPIO_Init(B1_GPIO_Port, &GPIO_InitStruct);
-
-
-
- /*Configure GPIO pin : PA8 */
-
- GPIO_InitStruct.Pin = GPIO_PIN_8;
-
- GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
-
- GPIO_InitStruct.Pull = GPIO_NOPULL;
-
- GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
-
- GPIO_InitStruct.Alternate = GPIO_AF1_TIM1;
-
- HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
-
-
-
- /*Configure GPIO pin : LD2_Pin */
-
- GPIO_InitStruct.Pin = LD2_Pin;
-
- GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
-
- GPIO_InitStruct.Pull = GPIO_NOPULL;
-
- GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
-
- HAL_GPIO_Init(LD2_GPIO_Port, &GPIO_InitStruct);
-
-
-
- /*Configure GPIO pin : LCD_INT_Pin */
-
- GPIO_InitStruct.Pin = LCD_INT_Pin;
-
- GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING;
-
- GPIO_InitStruct.Pull = GPIO_NOPULL;
-
- HAL_GPIO_Init(LCD_INT_GPIO_Port, &GPIO_InitStruct);
-
-
-
- /*Configure GPIO pin : LCD_BL_Pin */
-
- GPIO_InitStruct.Pin = LCD_BL_Pin;
-
- GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
-
- GPIO_InitStruct.Pull = GPIO_NOPULL;
-
- HAL_GPIO_Init(LCD_BL_GPIO_Port, &GPIO_InitStruct);
-
-
-
- /*Configure GPIO pin : OTG_FS2_OverCurrent_Pin */
-
- GPIO_InitStruct.Pin = OTG_FS2_OverCurrent_Pin;
-
- GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING;
-
- GPIO_InitStruct.Pull = GPIO_NOPULL;
-
- HAL_GPIO_Init(OTG_FS2_OverCurrent_GPIO_Port, &GPIO_InitStruct);
-
-
-
- /*Configure GPIO pin : PA6 */
-
- GPIO_InitStruct.Pin = GPIO_PIN_6;
-
- GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
-
- GPIO_InitStruct.Pull = GPIO_NOPULL;
-
- GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
-
- GPIO_InitStruct.Alternate = GPIO_AF9_TIM13;
-
- HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
-
-
-
- /*Configure GPIO pin : LD1_Pin */
-
- GPIO_InitStruct.Pin = LD1_Pin;
-
- GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
-
- GPIO_InitStruct.Pull = GPIO_NOPULL;
-
- GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
-
- HAL_GPIO_Init(LD1_GPIO_Port, &GPIO_InitStruct);
-
-
-
- /*Configure GPIO pin : LCD_RST_Pin */
-
- GPIO_InitStruct.Pin = LCD_RST_Pin;
-
- GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
-
- GPIO_InitStruct.Pull = GPIO_NOPULL;
-
- GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
-
- HAL_GPIO_Init(LCD_RST_GPIO_Port, &GPIO_InitStruct);
-
-
-
- }
-
-
-
- /* USER CODE BEGIN 4 */
-
-
-
- /* USER CODE END 4 */
-
-
-
- /* USER CODE BEGIN Header_StartDefaultTask */
-
- /**
-
- * @brief Function implementing the defaultTask thread.
-
- * @param argument: Not used
-
- * @retval None
-
- */
-
- /* USER CODE END Header_StartDefaultTask */
-
- void StartDefaultTask(void *argument)
-
- {
-
- /* init code for USB_DEVICE */
-
- MX_USB_DEVICE_Init();
-
- /* USER CODE BEGIN 5 */
-
- /* Infinite loop */
-
- for(;;)
-
- {
-
- osDelay(1);
-
- }
-
- /* USER CODE END 5 */
-
- }
-
-
-
- /**
-
- * @brief Period elapsed callback in non blocking mode
-
- * [url=home.php?mod=space&uid=536309]@NOTE[/url] This function is called when TIM1 interrupt took place, inside
-
- * HAL_TIM_IRQHandler(). It makes a direct call to HAL_IncTick() to increment
-
- * a global variable "uwTick" used as application time base.
-
- * @param htim : TIM handle
-
- * @retval None
-
- */
-
- void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
-
- {
-
- /* USER CODE BEGIN Callback 0 */
-
-
-
- /* USER CODE END Callback 0 */
-
- if (htim->Instance == TIM1) {
-
- HAL_IncTick();
-
- }
-
- /* USER CODE BEGIN Callback 1 */
-
-
-
- /* USER CODE END Callback 1 */
-
- }
-
-
-
- /**
-
- * @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 */
-
我们开始编译测试,看到编译成功
这套工具开发非常方便,节省了大量的时间;能够快速进入应用代码开发;真的是工程师的福音!
ui界面开发,下载图形界面开发工具TouchGFX 4.21.0 Designer,最新版本4.21,话不多说,直奔目标在搜索框输入750,开发板就出来了
新建工程,进入开发界面,异常简单方便,里面有丰富的组件,突然就想起了以前开发MFC的日子了。这个开发工具的图形界面底层使用的C++,点击右下角的生成代码,其实新建工程的时候直接会生成一个完整的工程包,在操作此软件的过程中会把自动生成的C++代码自动添加到工程中,可以加载到IDE中
第一个工程就是图形界面生成的工程主程序代码如下:
- /* USER CODE BEGIN Header */
-
- /**
-
- ******************************************************************************
-
- * [url=home.php?mod=space&uid=288409]@file[/url] : main.c
-
- * @brief : Main program body
-
- ******************************************************************************
-
- * @attention
-
- *
-
- * <h2><center>© Copyright (c) 2020 STMicroelectronics.
-
- * All rights reserved.</center></h2>
-
- *
-
- * This software component is licensed by ST under Ultimate Liberty license
-
- * SLA0044, the "License"; You may not use this file except in compliance with
-
- * the License. You may obtain a copy of the License at:
-
- * www.st.com/SLA0044
-
- *
-
- ******************************************************************************
-
- */
-
- /* USER CODE END Header */
-
- /* Includes ------------------------------------------------------------------*/
-
- #include "main.h"
-
- #include "cmsis_os.h"
-
- #include "libjpeg.h"
-
- #include "app_touchgfx.h"
-
-
-
- /* Private includes ----------------------------------------------------------*/
-
- /* USER CODE BEGIN Includes */
-
- #include "stm32h750b_discovery_qspi.h"
-
- #include "stm32h750b_discovery_sdram.h"
-
- /* 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 ---------------------------------------------------------*/
-
-
-
- CRC_HandleTypeDef hcrc;
-
-
-
- DMA2D_HandleTypeDef hdma2d;
-
-
-
- JPEG_HandleTypeDef hjpeg;
-
- MDMA_HandleTypeDef hmdma_jpeg_infifo_th;
-
- MDMA_HandleTypeDef hmdma_jpeg_outfifo_th;
-
-
-
- LTDC_HandleTypeDef hltdc;
-
-
-
- QSPI_HandleTypeDef hqspi;
-
-
-
- SDRAM_HandleTypeDef hsdram2;
-
-
-
- /* Definitions for defaultTask */
-
- osThreadId_t defaultTaskHandle;
-
- const osThreadAttr_t defaultTask_attributes = {
-
- .name = "defaultTask",
-
- .stack_size = 128 * 4,
-
- .priority = (osPriority_t) osPriorityNormal,
-
- };
-
- /* Definitions for GUITask */
-
- osThreadId_t GUITaskHandle;
-
- const osThreadAttr_t GUITask_attributes = {
-
- .name = "GUITask",
-
- .stack_size = 8192 * 4,
-
- .priority = (osPriority_t) osPriorityNormal,
-
- };
-
- /* Definitions for videoTask */
-
- osThreadId_t videoTaskHandle;
-
- const osThreadAttr_t videoTask_attributes = {
-
- .name = "videoTask",
-
- .stack_size = 1000 * 4,
-
- .priority = (osPriority_t) osPriorityLow,
-
- };
-
- /* USER CODE BEGIN PV */
-
-
-
- /* USER CODE END PV */
-
-
-
- /* Private function prototypes -----------------------------------------------*/
-
- void SystemClock_Config(void);
-
- static void MPU_Config(void);
-
- static void MX_GPIO_Init(void);
-
- static void MX_MDMA_Init(void);
-
- static void MX_LTDC_Init(void);
-
- static void MX_DMA2D_Init(void);
-
- static void MX_QUADSPI_Init(void);
-
- static void MX_FMC_Init(void);
-
- static void MX_JPEG_Init(void);
-
- static void MX_CRC_Init(void);
-
- void StartDefaultTask(void *argument);
-
- extern void TouchGFX_Task(void *argument);
-
- extern void videoTaskFunc(void *argument);
-
-
-
- /* USER CODE BEGIN PFP */
-
-
-
- /* USER CODE END PFP */
-
-
-
- /* Private user code ---------------------------------------------------------*/
-
- /* USER CODE BEGIN 0 */
-
-
-
- /* USER CODE END 0 */
-
-
-
- /**
-
- * @brief The application entry point.
-
- * @retval int
-
- */
-
- int main(void)
-
- {
-
- /* USER CODE BEGIN 1 */
-
-
-
- /* USER CODE END 1 */
-
-
-
- /* MPU Configuration--------------------------------------------------------*/
-
- MPU_Config();
-
-
-
- /* Enable I-Cache---------------------------------------------------------*/
-
- SCB_EnableICache();
-
-
-
- /* Enable D-Cache---------------------------------------------------------*/
-
- SCB_EnableDCache();
-
-
-
- /* 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();
-
-
-
- /* USER CODE BEGIN SysInit */
-
- /* Explicit enabling interrupt to support debugging in CubeIDE when using external flash loader */
-
- __enable_irq();
-
- /* USER CODE END SysInit */
-
-
-
- /* Initialize all configured peripherals */
-
- MX_GPIO_Init();
-
- MX_MDMA_Init();
-
- MX_LTDC_Init();
-
- MX_DMA2D_Init();
-
- MX_FMC_Init();
-
- MX_LIBJPEG_Init();
-
- MX_JPEG_Init();
-
- MX_CRC_Init();
-
- MX_TouchGFX_Init();
-
- /* Call PreOsInit function */
-
- MX_TouchGFX_PreOSInit();
-
- /* USER CODE BEGIN 2 */
-
-
-
- /* USER CODE END 2 */
-
-
-
- /* Init scheduler */
-
- osKernelInitialize();
-
-
-
- /* USER CODE BEGIN RTOS_MUTEX */
-
- /* add mutexes, ... */
-
- /* USER CODE END RTOS_MUTEX */
-
-
-
- /* USER CODE BEGIN RTOS_SEMAPHORES */
-
- /* add semaphores, ... */
-
- /* USER CODE END RTOS_SEMAPHORES */
-
-
-
- /* USER CODE BEGIN RTOS_TIMERS */
-
- /* start timers, add new ones, ... */
-
- /* USER CODE END RTOS_TIMERS */
-
-
-
- /* USER CODE BEGIN RTOS_QUEUES */
-
- /* add queues, ... */
-
- /* USER CODE END RTOS_QUEUES */
-
-
-
- /* Create the thread(s) */
-
- /* creation of defaultTask */
-
- defaultTaskHandle = osThreadNew(StartDefaultTask, NULL, &defaultTask_attributes);
-
-
-
- /* creation of GUITask */
-
- GUITaskHandle = osThreadNew(TouchGFX_Task, NULL, &GUITask_attributes);
-
-
-
- /* creation of videoTask */
-
- videoTaskHandle = osThreadNew(videoTaskFunc, NULL, &videoTask_attributes);
-
-
-
- /* USER CODE BEGIN RTOS_THREADS */
-
- /* add threads, ... */
-
- /* USER CODE END RTOS_THREADS */
-
-
-
- /* USER CODE BEGIN RTOS_EVENTS */
-
- /* add events, ... */
-
- /* USER CODE END RTOS_EVENTS */
-
-
-
- /* Start scheduler */
-
- osKernelStart();
-
-
-
- /* We should never get here as control is now taken by the scheduler */
-
- /* Infinite loop */
-
- /* USER CODE BEGIN WHILE */
-
- while (1)
-
- {
-
- /* USER CODE END WHILE */
-
-
-
- /* 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_SCALE1);
-
-
-
- while(!__HAL_PWR_GET_FLAG(PWR_FLAG_VOSRDY)) {}
-
-
-
- /** Macro to configure the PLL clock source
-
- */
-
- __HAL_RCC_PLL_PLLSOURCE_CONFIG(RCC_PLLSOURCE_HSE);
-
-
-
- /** Initializes the RCC Oscillators according to the specified parameters
-
- * in the RCC_OscInitTypeDef structure.
-
- */
-
- RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
-
- RCC_OscInitStruct.HSEState = RCC_HSE_ON;
-
- RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
-
- RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
-
- RCC_OscInitStruct.PLL.PLLM = 5;
-
- RCC_OscInitStruct.PLL.PLLN = 160;
-
- RCC_OscInitStruct.PLL.PLLP = 2;
-
- RCC_OscInitStruct.PLL.PLLQ = 4;
-
- 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_2) != HAL_OK)
-
- {
-
- Error_Handler();
-
- }
-
- }
-
-
-
- /**
-
- * @brief CRC Initialization Function
-
- * @param None
-
- * @retval None
-
- */
-
- static void MX_CRC_Init(void)
-
- {
-
-
-
- /* USER CODE BEGIN CRC_Init 0 */
-
-
-
- /* USER CODE END CRC_Init 0 */
-
-
-
- /* USER CODE BEGIN CRC_Init 1 */
-
-
-
- /* USER CODE END CRC_Init 1 */
-
- hcrc.Instance = CRC;
-
- hcrc.Init.DefaultPolynomialUse = DEFAULT_POLYNOMIAL_ENABLE;
-
- hcrc.Init.DefaultInitValueUse = DEFAULT_INIT_VALUE_ENABLE;
-
- hcrc.Init.InputDataInversionMode = CRC_INPUTDATA_INVERSION_NONE;
-
- hcrc.Init.OutputDataInversionMode = CRC_OUTPUTDATA_INVERSION_DISABLE;
-
- hcrc.InputDataFormat = CRC_INPUTDATA_FORMAT_BYTES;
-
- if (HAL_CRC_Init(&hcrc) != HAL_OK)
-
- {
-
- Error_Handler();
-
- }
-
- /* USER CODE BEGIN CRC_Init 2 */
-
-
-
- /* USER CODE END CRC_Init 2 */
-
-
-
- }
-
-
-
- /**
-
- * @brief DMA2D Initialization Function
-
- * @param None
-
- * @retval None
-
- */
-
- static void MX_DMA2D_Init(void)
-
- {
-
-
-
- /* USER CODE BEGIN DMA2D_Init 0 */
-
-
-
- /* USER CODE END DMA2D_Init 0 */
-
-
-
- /* USER CODE BEGIN DMA2D_Init 1 */
-
-
-
- /* USER CODE END DMA2D_Init 1 */
-
- hdma2d.Instance = DMA2D;
-
- hdma2d.Init.Mode = DMA2D_M2M;
-
- hdma2d.Init.ColorMode = DMA2D_OUTPUT_RGB565;
-
- hdma2d.Init.OutputOffset = 0;
-
- hdma2d.LayerCfg[1].InputOffset = 0;
-
- hdma2d.LayerCfg[1].InputColorMode = DMA2D_INPUT_RGB565;
-
- hdma2d.LayerCfg[1].AlphaMode = DMA2D_NO_MODIF_ALPHA;
-
- hdma2d.LayerCfg[1].InputAlpha = 0;
-
- hdma2d.LayerCfg[1].AlphaInverted = DMA2D_REGULAR_ALPHA;
-
- hdma2d.LayerCfg[1].RedBlueSwap = DMA2D_RB_REGULAR;
-
- hdma2d.LayerCfg[1].ChromaSubSampling = DMA2D_NO_CSS;
-
- if (HAL_DMA2D_Init(&hdma2d) != HAL_OK)
-
- {
-
- Error_Handler();
-
- }
-
- if (HAL_DMA2D_ConfigLayer(&hdma2d, 1) != HAL_OK)
-
- {
-
- Error_Handler();
-
- }
-
- /* USER CODE BEGIN DMA2D_Init 2 */
-
-
-
- /* USER CODE END DMA2D_Init 2 */
-
-
-
- }
-
-
-
- /**
-
- * @brief JPEG Initialization Function
-
- * @param None
-
- * @retval None
-
- */
-
- static void MX_JPEG_Init(void)
-
- {
-
-
-
- /* USER CODE BEGIN JPEG_Init 0 */
-
-
-
- /* USER CODE END JPEG_Init 0 */
-
-
-
- /* USER CODE BEGIN JPEG_Init 1 */
-
-
-
- /* USER CODE END JPEG_Init 1 */
-
- hjpeg.Instance = JPEG;
-
- if (HAL_JPEG_Init(&hjpeg) != HAL_OK)
-
- {
-
- Error_Handler();
-
- }
-
- /* USER CODE BEGIN JPEG_Init 2 */
-
-
-
- /* USER CODE END JPEG_Init 2 */
-
-
-
- }
-
-
-
- /**
-
- * @brief LTDC Initialization Function
-
- * @param None
-
- * @retval None
-
- */
-
- static void MX_LTDC_Init(void)
-
- {
-
-
-
- /* USER CODE BEGIN LTDC_Init 0 */
-
-
-
- /* USER CODE END LTDC_Init 0 */
-
-
-
- LTDC_LayerCfgTypeDef pLayerCfg = {0};
-
-
-
- /* USER CODE BEGIN LTDC_Init 1 */
-
-
-
- /* USER CODE END LTDC_Init 1 */
-
- hltdc.Instance = LTDC;
-
- hltdc.Init.HSPolarity = LTDC_HSPOLARITY_AL;
-
- hltdc.Init.VSPolarity = LTDC_VSPOLARITY_AL;
-
- hltdc.Init.DEPolarity = LTDC_DEPOLARITY_AL;
-
- hltdc.Init.PCPolarity = LTDC_PCPOLARITY_IPC;
-
- hltdc.Init.HorizontalSync = 39;
-
- hltdc.Init.VerticalSync = 8;
-
- hltdc.Init.AccumulatedHBP = 42;
-
- hltdc.Init.AccumulatedVBP = 11;
-
- hltdc.Init.AccumulatedActiveW = 522;
-
- hltdc.Init.AccumulatedActiveH = 283;
-
- hltdc.Init.TotalWidth = 528;
-
- hltdc.Init.TotalHeigh = 285;
-
- hltdc.Init.Backcolor.Blue = 0;
-
- hltdc.Init.Backcolor.Green = 0;
-
- hltdc.Init.Backcolor.Red = 0;
-
- if (HAL_LTDC_Init(&hltdc) != HAL_OK)
-
- {
-
- Error_Handler();
-
- }
-
- pLayerCfg.WindowX0 = 0;
-
- pLayerCfg.WindowX1 = 480;
-
- pLayerCfg.WindowY0 = 0;
-
- pLayerCfg.WindowY1 = 272;
-
- pLayerCfg.PixelFormat = LTDC_PIXEL_FORMAT_RGB565;
-
- pLayerCfg.Alpha = 255;
-
- pLayerCfg.Alpha0 = 0;
-
- pLayerCfg.BlendingFactor1 = LTDC_BLENDING_FACTOR1_CA;
-
- pLayerCfg.BlendingFactor2 = LTDC_BLENDING_FACTOR2_CA;
-
- pLayerCfg.FBStartAdress = 0;
-
- pLayerCfg.ImageWidth = 480;
-
- pLayerCfg.ImageHeight = 272;
-
- pLayerCfg.Backcolor.Blue = 0;
-
- pLayerCfg.Backcolor.Green = 0;
-
- pLayerCfg.Backcolor.Red = 0;
-
- if (HAL_LTDC_ConfigLayer(&hltdc, &pLayerCfg, 0) != HAL_OK)
-
- {
-
- Error_Handler();
-
- }
-
- /* USER CODE BEGIN LTDC_Init 2 */
-
-
-
- /* USER CODE END LTDC_Init 2 */
-
-
-
- }
-
-
-
- /**
-
- * @brief QUADSPI Initialization Function
-
- * @param None
-
- * @retval None
-
- */
-
- static void MX_QUADSPI_Init(void)
-
- {
-
-
-
- /* USER CODE BEGIN QUADSPI_Init 0 */
-
- BSP_QSPI_Init_t qspi_initParams ;
-
- /* USER CODE END QUADSPI_Init 0 */
-
-
-
- /* USER CODE BEGIN QUADSPI_Init 1 */
-
-
-
- /* USER CODE END QUADSPI_Init 1 */
-
- /* QUADSPI parameter configuration*/
-
- hqspi.Instance = QUADSPI;
-
- hqspi.Init.ClockPrescaler = 3;
-
- hqspi.Init.FifoThreshold = 1;
-
- hqspi.Init.SampleShifting = QSPI_SAMPLE_SHIFTING_NONE;
-
- hqspi.Init.FlashSize = 26;
-
- hqspi.Init.ChipSelectHighTime = QSPI_CS_HIGH_TIME_4_CYCLE;
-
- hqspi.Init.ClockMode = QSPI_CLOCK_MODE_0;
-
- hqspi.Init.DualFlash = QSPI_DUALFLASH_ENABLE;
-
- if (HAL_QSPI_Init(&hqspi) != HAL_OK)
-
- {
-
- Error_Handler();
-
- }
-
- /* USER CODE BEGIN QUADSPI_Init 2 */
-
- qspi_initParams.InterfaceMode = MT25TL01G_QPI_MODE;
-
- qspi_initParams.TransferRate = MT25TL01G_DTR_TRANSFER ;
-
- qspi_initParams.DualFlashMode = MT25TL01G_DUALFLASH_ENABLE;
-
- BSP_QSPI_DeInit(0);
-
- if (BSP_QSPI_Init(0, &qspi_initParams) != BSP_ERROR_NONE)
-
- {
-
- Error_Handler( );
-
- }
-
- if(BSP_QSPI_EnableMemoryMappedMode(0) != BSP_ERROR_NONE)
-
- {
-
- Error_Handler( );
-
- }
-
- /* USER CODE END QUADSPI_Init 2 */
-
-
-
- }
-
-
-
- /**
-
- * Enable MDMA controller clock
-
- */
-
- static void MX_MDMA_Init(void)
-
- {
-
-
-
- /* MDMA controller clock enable */
-
- __HAL_RCC_MDMA_CLK_ENABLE();
-
- /* Local variables */
-
-
-
- /* MDMA interrupt initialization */
-
- /* MDMA_IRQn interrupt configuration */
-
- HAL_NVIC_SetPriority(MDMA_IRQn, 5, 0);
-
- HAL_NVIC_EnableIRQ(MDMA_IRQn);
-
-
-
- }
-
-
-
- /* FMC initialization function */
-
- static void MX_FMC_Init(void)
-
- {
-
-
-
- /* USER CODE BEGIN FMC_Init 0 */
-
-
-
- /* USER CODE END FMC_Init 0 */
-
-
-
- FMC_SDRAM_TimingTypeDef SdramTiming = {0};
-
-
-
- /* USER CODE BEGIN FMC_Init 1 */
-
-
-
- /* USER CODE END FMC_Init 1 */
-
-
-
- /** Perform the SDRAM2 memory initialization sequence
-
- */
-
- hsdram2.Instance = FMC_SDRAM_DEVICE;
-
- /* hsdram2.Init */
-
- hsdram2.Init.SDBank = FMC_SDRAM_BANK2;
-
- hsdram2.Init.ColumnBitsNumber = FMC_SDRAM_COLUMN_BITS_NUM_8;
-
- hsdram2.Init.RowBitsNumber = FMC_SDRAM_ROW_BITS_NUM_12;
-
- hsdram2.Init.MemoryDataWidth = FMC_SDRAM_MEM_BUS_WIDTH_16;
-
- hsdram2.Init.InternalBankNumber = FMC_SDRAM_INTERN_BANKS_NUM_4;
-
- hsdram2.Init.CASLatency = FMC_SDRAM_CAS_LATENCY_3;
-
- hsdram2.Init.WriteProtection = FMC_SDRAM_WRITE_PROTECTION_DISABLE;
-
- hsdram2.Init.SDClockPeriod = FMC_SDRAM_CLOCK_PERIOD_2;
-
- hsdram2.Init.ReadBurst = FMC_SDRAM_RBURST_ENABLE;
-
- hsdram2.Init.ReadPipeDelay = FMC_SDRAM_RPIPE_DELAY_0;
-
- /* SdramTiming */
-
- SdramTiming.LoadToActiveDelay = 2;
-
- SdramTiming.ExitSelfRefreshDelay = 7;
-
- SdramTiming.SelfRefreshTime = 4;
-
- SdramTiming.RowCycleDelay = 7;
-
- SdramTiming.WriteRecoveryTime = 5;
-
- SdramTiming.RPDelay = 2;
-
- SdramTiming.RCDDelay = 2;
-
-
-
- if (HAL_SDRAM_Init(&hsdram2, &SdramTiming) != HAL_OK)
-
- {
-
- Error_Handler( );
-
- }
-
-
-
- /* USER CODE BEGIN FMC_Init 2 */
-
- BSP_SDRAM_DeInit(0);
-
- if(BSP_SDRAM_Init(0) != BSP_ERROR_NONE)
-
- {
-
- Error_Handler( );
-
- }
-
- /* USER CODE END FMC_Init 2 */
-
- }
-
-
-
- /**
-
- * @brief GPIO Initialization Function
-
- * @param None
-
- * @retval None
-
- */
-
- static void MX_GPIO_Init(void)
-
- {
-
- GPIO_InitTypeDef GPIO_InitStruct = {0};
-
-
-
- /* GPIO Ports Clock Enable */
-
- __HAL_RCC_GPIOK_CLK_ENABLE();
-
- __HAL_RCC_GPIOG_CLK_ENABLE();
-
- __HAL_RCC_GPIOI_CLK_ENABLE();
-
- __HAL_RCC_GPIOE_CLK_ENABLE();
-
- __HAL_RCC_GPIOB_CLK_ENABLE();
-
- __HAL_RCC_GPIOJ_CLK_ENABLE();
-
- __HAL_RCC_GPIOD_CLK_ENABLE();
-
- __HAL_RCC_GPIOF_CLK_ENABLE();
-
- __HAL_RCC_GPIOH_CLK_ENABLE();
-
- __HAL_RCC_GPIOA_CLK_ENABLE();
-
-
-
- /*Configure GPIO pin Output Level */
-
- HAL_GPIO_WritePin(GPIOB, FRAME_RATE_Pin|RENDER_TIME_Pin, GPIO_PIN_RESET);
-
-
-
- /*Configure GPIO pin Output Level */
-
- HAL_GPIO_WritePin(LCD_DE_GPIO_Port, LCD_DE_Pin, GPIO_PIN_RESET);
-
-
-
- /*Configure GPIO pin Output Level */
-
- HAL_GPIO_WritePin(VSYNC_FREQ_GPIO_Port, VSYNC_FREQ_Pin, GPIO_PIN_RESET);
-
-
-
- /*Configure GPIO pin Output Level */
-
- HAL_GPIO_WritePin(LCD_BL_CTRL_GPIO_Port, LCD_BL_CTRL_Pin, GPIO_PIN_SET);
-
-
-
- /*Configure GPIO pin Output Level */
-
- HAL_GPIO_WritePin(GPIOA, LCD_RESET_Pin|MCU_ACTIVE_Pin, GPIO_PIN_RESET);
-
-
-
- /*Configure GPIO pins : FRAME_RATE_Pin RENDER_TIME_Pin */
-
- GPIO_InitStruct.Pin = FRAME_RATE_Pin|RENDER_TIME_Pin;
-
- GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
-
- GPIO_InitStruct.Pull = GPIO_NOPULL;
-
- GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
-
- HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
-
-
-
- /*Configure GPIO pin : LCD_DE_Pin */
-
- GPIO_InitStruct.Pin = LCD_DE_Pin;
-
- GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
-
- GPIO_InitStruct.Pull = GPIO_NOPULL;
-
- GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
-
- HAL_GPIO_Init(LCD_DE_GPIO_Port, &GPIO_InitStruct);
-
-
-
- /*Configure GPIO pin : VSYNC_FREQ_Pin */
-
- GPIO_InitStruct.Pin = VSYNC_FREQ_Pin;
-
- GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
-
- GPIO_InitStruct.Pull = GPIO_NOPULL;
-
- GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
-
- HAL_GPIO_Init(VSYNC_FREQ_GPIO_Port, &GPIO_InitStruct);
-
-
-
- /*Configure GPIO pin : LCD_BL_CTRL_Pin */
-
- GPIO_InitStruct.Pin = LCD_BL_CTRL_Pin;
-
- GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
-
- GPIO_InitStruct.Pull = GPIO_NOPULL;
-
- GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
-
- HAL_GPIO_Init(LCD_BL_CTRL_GPIO_Port, &GPIO_InitStruct);
-
-
-
- /*Configure GPIO pin : LCD_RESET_Pin */
-
- GPIO_InitStruct.Pin = LCD_RESET_Pin;
-
- GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
-
- GPIO_InitStruct.Pull = GPIO_NOPULL;
-
- GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
-
- HAL_GPIO_Init(LCD_RESET_GPIO_Port, &GPIO_InitStruct);
-
-
-
- /*Configure GPIO pin : MCU_ACTIVE_Pin */
-
- GPIO_InitStruct.Pin = MCU_ACTIVE_Pin;
-
- GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
-
- GPIO_InitStruct.Pull = GPIO_NOPULL;
-
- GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
-
- HAL_GPIO_Init(MCU_ACTIVE_GPIO_Port, &GPIO_InitStruct);
-
-
-
- }
-
-
-
- /* USER CODE BEGIN 4 */
-
-
-
- /* USER CODE END 4 */
-
-
-
- /* USER CODE BEGIN Header_StartDefaultTask */
-
- /**
-
- * @brief Function implementing the defaultTask thread.
-
- * @param argument: Not used
-
- * @retval None
-
- */
-
- /* USER CODE END Header_StartDefaultTask */
-
- void StartDefaultTask(void *argument)
-
- {
-
- /* USER CODE BEGIN 5 */
-
- /* Infinite loop */
-
- for(;;)
-
- {
-
- osDelay(100);
-
- }
-
- /* USER CODE END 5 */
-
- }
-
-
-
- /* MPU Configuration */
-
-
-
- void MPU_Config(void)
-
- {
-
- MPU_Region_InitTypeDef MPU_InitStruct = {0};
-
-
-
- /* Disables the MPU */
-
- HAL_MPU_Disable();
-
-
-
- /** Initializes and configures the Region and the memory to be protected
-
- */
-
- MPU_InitStruct.Enable = MPU_REGION_ENABLE;
-
- MPU_InitStruct.Number = MPU_REGION_NUMBER0;
-
- MPU_InitStruct.BaseAddress = 0x24000000;
-
- MPU_InitStruct.Size = MPU_REGION_SIZE_512KB;
-
- MPU_InitStruct.SubRegionDisable = 0x0;
-
- MPU_InitStruct.TypeExtField = MPU_TEX_LEVEL0;
-
- MPU_InitStruct.AccessPermission = MPU_REGION_FULL_ACCESS;
-
- MPU_InitStruct.DisableExec = MPU_INSTRUCTION_ACCESS_DISABLE;
-
- MPU_InitStruct.IsShareable = MPU_ACCESS_NOT_SHAREABLE;
-
- MPU_InitStruct.IsCacheable = MPU_ACCESS_CACHEABLE;
-
- MPU_InitStruct.IsBufferable = MPU_ACCESS_BUFFERABLE;
-
-
-
- HAL_MPU_ConfigRegion(&MPU_InitStruct);
-
-
-
- /** Initializes and configures the Region and the memory to be protected
-
- */
-
- MPU_InitStruct.Number = MPU_REGION_NUMBER1;
-
- MPU_InitStruct.BaseAddress = 0x90000000;
-
- MPU_InitStruct.Size = MPU_REGION_SIZE_256MB;
-
- MPU_InitStruct.AccessPermission = MPU_REGION_NO_ACCESS;
-
- MPU_InitStruct.IsCacheable = MPU_ACCESS_NOT_CACHEABLE;
-
- MPU_InitStruct.IsBufferable = MPU_ACCESS_NOT_BUFFERABLE;
-
-
-
- HAL_MPU_ConfigRegion(&MPU_InitStruct);
-
-
-
- /** Initializes and configures the Region and the memory to be protected
-
- */
-
- MPU_InitStruct.Number = MPU_REGION_NUMBER2;
-
- MPU_InitStruct.Size = MPU_REGION_SIZE_128MB;
-
- MPU_InitStruct.AccessPermission = MPU_REGION_FULL_ACCESS;
-
- MPU_InitStruct.DisableExec = MPU_INSTRUCTION_ACCESS_ENABLE;
-
- MPU_InitStruct.IsCacheable = MPU_ACCESS_CACHEABLE;
-
- MPU_InitStruct.IsBufferable = MPU_ACCESS_BUFFERABLE;
-
-
-
- HAL_MPU_ConfigRegion(&MPU_InitStruct);
-
-
-
- /** Initializes and configures the Region and the memory to be protected
-
- */
-
- MPU_InitStruct.Number = MPU_REGION_NUMBER3;
-
- MPU_InitStruct.BaseAddress = 0xD0000000;
-
- MPU_InitStruct.Size = MPU_REGION_SIZE_256MB;
-
- MPU_InitStruct.AccessPermission = MPU_REGION_NO_ACCESS;
-
- MPU_InitStruct.DisableExec = MPU_INSTRUCTION_ACCESS_DISABLE;
-
- MPU_InitStruct.IsCacheable = MPU_ACCESS_NOT_CACHEABLE;
-
- MPU_InitStruct.IsBufferable = MPU_ACCESS_NOT_BUFFERABLE;
-
-
-
- HAL_MPU_ConfigRegion(&MPU_InitStruct);
-
-
-
- /** Initializes and configures the Region and the memory to be protected
-
- */
-
- MPU_InitStruct.Number = MPU_REGION_NUMBER4;
-
- MPU_InitStruct.Size = MPU_REGION_SIZE_32MB;
-
- MPU_InitStruct.AccessPermission = MPU_REGION_FULL_ACCESS;
-
- MPU_InitStruct.IsCacheable = MPU_ACCESS_CACHEABLE;
-
-
-
- HAL_MPU_ConfigRegion(&MPU_InitStruct);
-
- /* Enables the MPU */
-
- HAL_MPU_Enable(MPU_PRIVILEGED_DEFAULT);
-
-
-
- }
-
-
-
- /**
-
- * @brief Period elapsed callback in non blocking mode
-
- * [url=home.php?mod=space&uid=536309]@NOTE[/url] This function is called when TIM6 interrupt took place, inside
-
- * HAL_TIM_IRQHandler(). It makes a direct call to HAL_IncTick() to increment
-
- * a global variable "uwTick" used as application time base.
-
- * @param htim : TIM handle
-
- * @retval None
-
- */
-
- void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
-
- {
-
- /* USER CODE BEGIN Callback 0 */
-
-
-
- /* USER CODE END Callback 0 */
-
- if (htim->Instance == TIM6) {
-
- HAL_IncTick();
-
- }
-
- /* USER CODE BEGIN Callback 1 */
-
-
-
- /* USER CODE END Callback 1 */
-
- }
-
-
-
- /**
-
- * @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 */
-
-
-
- /* 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,
-
- tex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
-
- /* USER CODE END 6 */
-
- }
-
- #endif /* USE_FULL_ASSERT */
-
点击编译,也是没有任何问题编译成功
加入一个闪屏效果,点击按钮切换屏幕然后自动切换回来;
这个软件还是有改进空间,很多图片格式不支持,转换起来不叫麻烦。
- /* USER CODE BEGIN Header */
-
- /**
-
- ******************************************************************************
-
- * File Name : TouchGFXHAL.cpp
-
- ******************************************************************************
-
- * This file is generated by TouchGFX Generator 4.20.0.
-
- ******************************************************************************
-
- * @attention
-
- *
-
- * Copyright (c) 2022 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 */
-
-
-
- #include <TouchGFXHAL.hpp>
-
-
-
- /* USER CODE BEGIN TouchGFXHAL.cpp */
-
- #include "main.h"
-
- #include "stm32h7xx.h"
-
- #include <touchgfx/hal/OSWrappers.hpp>
-
- #include "FreeRTOS.h"
-
- #include "task.h"
-
-
-
- using namespace touchgfx;
-
-
-
- LOCATION_PRAGMA("TouchGFX_Framebuffer")
-
- uint32_t animationBuffer[(480 * 272 * 2 + 3) / 4] LOCATION_ATTRIBUTE_NOLOAD("TouchGFX_Framebuffer");
-
-
-
- void TouchGFXHAL::initialize()
-
- {
-
- // Calling parent implementation of initialize().
-
- //
-
- // To overwrite the generated implementation, omit call to parent function
-
- // and implemented needed functionality here.
-
- // Please note, HAL::initialize() must be called to initialize the framework.
-
-
-
- TouchGFXGeneratedHAL::initialize();
-
- setFrameBufferStartAddresses((void*)frameBuffer0, (void*)frameBuffer1, (void*)animationBuffer);
-
- instrumentation.init();
-
- setMCUInstrumentation(&instrumentation);
-
- enableMCULoadCalculation(true);
-
- }
-
-
-
- void TouchGFXHAL::taskEntry()
-
- {
-
- enableLCDControllerInterrupt();
-
- enableInterrupts();
-
-
-
- OSWrappers::waitForVSync();
-
- backPorchExited();
-
-
-
- #if defined(LCD_RESET_GPIO_Port) && defined(LCD_RESET_Pin)
-
- /* Display Enable */
-
- HAL_GPIO_WritePin(LCD_RESET_GPIO_Port, LCD_RESET_Pin, GPIO_PIN_SET);
-
- #endif
-
- #if defined(LCD_DE_GPIO_Port) && defined(LCD_DE_Pin)
-
- /* Data Enable */
-
- HAL_GPIO_WritePin(LCD_DE_GPIO_Port, LCD_DE_Pin, GPIO_PIN_SET);
-
- #endif
-
- #if defined(LCD_BL_CTRL_GPIO_Port) && defined(LCD_BL_CTRL_Pin)
-
- /* Backlight Enable */
-
- HAL_GPIO_WritePin(LCD_BL_CTRL_GPIO_Port, LCD_BL_CTRL_Pin, GPIO_PIN_SET);
-
- #endif
-
-
-
- for (;;)
-
- {
-
- OSWrappers::waitForVSync();
-
- backPorchExited();
-
- }
-
- }
-
-
-
- /**
-
- * Gets the frame buffer address used by the TFT controller.
- *
- * [url=home.php?mod=space&uid=266161]@return[/url] The address of the frame buffer currently being displayed on the TFT.
- */
- uint16_t* TouchGFXHAL::getTFTFrameBuffer() const
-
- {
-
- // Calling parent implementation of getTFTFrameBuffer().
-
- //
-
- // To overwrite the generated implementation, omit call to parent function
-
- // and implemented needed functionality here.
-
-
-
- return TouchGFXGeneratedHAL::getTFTFrameBuffer();
-
- }
-
-
-
- /**
-
- * Sets the frame buffer address used by the TFT controller.
- *
- * @param [in] address New frame buffer address.
- */
- void TouchGFXHAL::setTFTFrameBuffer(uint16_t* address)
-
- {
-
- // Calling parent implementation of setTFTFrameBuffer(uint16_t* address).
-
- //
-
- // To overwrite the generated implementation, omit call to parent function
-
- // and implemented needed functionality here.
-
-
-
- TouchGFXGeneratedHAL::setTFTFrameBuffer(address);
-
- }
-
-
-
- /**
-
- * This function is called whenever the framework has performed a partial draw.
- *
- * @param rect The area of the screen that has been drawn, expressed in absolute coordinates.
- *
- * [url=home.php?mod=space&uid=8537]@see[/url] flushFrameBuffer().
- */
- void TouchGFXHAL::flushFrameBuffer(const touchgfx::Rect& rect)
-
- {
-
- // Calling parent implementation of flushFrameBuffer(const touchgfx::Rect& rect).
-
- //
-
- // To overwrite the generated implementation, omit call to parent function
-
- // and implemented needed functionality here.
-
- // Please note, HAL::flushFrameBuffer(const touchgfx::Rect& rect) must
-
- // be called to notify the touchgfx framework that flush has been performed.
-
-
-
- TouchGFXGeneratedHAL::flushFrameBuffer(rect);
-
-
-
- // If the framebuffer is placed in Write Through cached memory (e.g. SRAM) then we need
-
- // to flush the Dcache to make sure framebuffer is correct in RAM. That's done
- // using SCB_CleanInvalidateDCache().
- SCB_CleanInvalidateDCache();
- }
- /**
- * Configures the interrupts relevant for TouchGFX. This primarily entails setting
- * the interrupt priorities for the DMA and LCD interrupts.
- */
- void TouchGFXHAL::configureInterrupts()
- {
- // Calling parent implementation of configureInterrupts().
- //
- // To overwrite the generated implementation, omit call to parent function
- // and implemented needed functionality here.
- TouchGFXGeneratedHAL::configureInterrupts();
- }
- /**
- * Used for enabling interrupts set in configureInterrupts()
- */
- void TouchGFXHAL::enableInterrupts()
- {
- // Calling parent implementation of enableInterrupts().
- //
- // To overwrite the generated implementation, omit call to parent function
- // and implemented needed functionality here.
- TouchGFXGeneratedHAL::enableInterrupts();
- }
- /**
- * Used for disabling interrupts set in configureInterrupts()
- */
- void TouchGFXHAL::disableInterrupts()
- {
- // Calling parent implementation of disableInterrupts().
- //
- // To overwrite the generated implementation, omit call to parent function
- // and implemented needed functionality here.
- TouchGFXGeneratedHAL::disableInterrupts();
- }
- /**
- * Configure the LCD controller to fire interrupts at VSYNC. Called automatically
- * once TouchGFX initialization has completed.
- */
- void TouchGFXHAL::enableLCDControllerInterrupt()
- {
- // Calling parent implementation of enableLCDControllerInterrupt().
- //
- // To overwrite the generated implementation, omit call to parent function
- // and implemented needed functionality here.
- TouchGFXGeneratedHAL::enableLCDControllerInterrupt();
- }
- extern "C"
- {
- portBASE_TYPE IdleTaskHook(void* p)
- {
- if ((int)p) //idle task sched out
- {
- touchgfx::HAL::getInstance()->setMCUActive(true);
- }
- else //idle task sched in
- {
- touchgfx::HAL::getInstance()->setMCUActive(false);
- }
- return pdTRUE;
- }
- }
- /* USER CODE END TouchGFXHAL.cpp */
- /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
测试开机动画,加界面切换如下:
---------------------
作者:ROSHEN_007
链接:https://bbs.21ic.com/icview-3275200-1-1.html
来源:21ic.com
此文章已获得原创/原创奖标签,著作权归21ic所有,任何人未经允许禁止转载。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。