123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321 |
- /*
- *******************************************************************************
- * Copyright (c) 2020-2021, STMicroelectronics
- * All rights reserved.
- *
- * This software component is licensed by ST under BSD 3-Clause license,
- * the "License"; You may not use this file except in compliance with the
- * License. You may obtain a copy of the License at:
- * opensource.org/licenses/BSD-3-Clause
- *
- *******************************************************************************
- */
- #if defined(STM32H723xx)
- #include "pins_arduino.h"
- // Digital PinName array
- const PinName digitalPin[] = {
- PA_0, // D0/A0
- PA_1, // D1/A1
- PA_2, // D2/A2
- PA_3, // D3/A3
- PA_4, // D4/A4
- PA_5, // D5/A5
- PA_6, // D6/A6
- PA_7, // D7/A7
- PA_8, // D8
- PA_9, // D9
- PA_10, // D10
- PA_11, // D11
- PA_12, // D12
- PA_13, // D13
- PA_14, // D14
- PA_15, // D15
- PB_0, // D16/A8
- PB_1, // D17/A9
- PB_2, // D18
- PB_3, // D19
- PB_4, // D20
- PB_5, // D21
- PB_6, // D22
- PB_7, // D23
- PB_8, // D24
- PB_9, // D25
- PB_10, // D26
- PB_11, // D27
- PB_12, // D28
- PB_13, // D29
- PB_14, // D30
- PB_15, // D31
- PC_0, // D32/A10
- PC_1, // D33/A11
- PC_4, // D34/A12
- PC_5, // D35/A13
- PC_6, // D36
- PC_7, // D37
- PC_8, // D38
- PC_9, // D39
- PC_10, // D40
- PC_11, // D41
- PC_12, // D42
- PC_13, // D43
- PC_14, // D44
- PC_15, // D45
- PD_0, // D46
- PD_1, // D47
- PD_2, // D48
- PD_3, // D49
- PD_4, // D50
- PD_5, // D51
- PD_6, // D52
- PD_7, // D53
- PD_8, // D54
- PD_9, // D55
- PD_10, // D56
- PD_11, // D57
- PD_12, // D58
- PD_13, // D59
- PD_14, // D60
- PD_15, // D61
- PE_0, // D62
- PE_1, // D63
- PE_2, // D64
- PE_3, // D65
- PE_4, // D66
- PE_5, // D67
- PE_6, // D68
- PE_7, // D69
- PE_8, // D70
- PE_9, // D71
- PE_10, // D72
- PE_11, // D73
- PE_12, // D74
- PE_13, // D75
- PE_14, // D76
- PE_15, // D77
- PF_0, // D78
- PF_1, // D79
- PF_2, // D80
- PF_3, // D81/A14
- PF_4, // D82/A15
- PF_5, // D83/A16
- PF_6, // D84/A17
- PF_7, // D85/A18
- PF_8, // D86/A19
- PF_9, // D87/A20
- PF_10, // D88/A21
- PF_11, // D89/A22
- PF_12, // D90/A23
- PF_13, // D91/A24
- PF_14, // D92/A25
- PF_15, // D93
- PG_0, // D94
- PG_1, // D95
- PG_2, // D96
- PG_3, // D97
- PG_4, // D98
- PG_5, // D99
- PG_6, // D100
- PG_7, // D101
- PG_8, // D102
- PG_9, // D103
- PG_10, // D104
- PG_11, // D105
- PG_12, // D106
- PG_13, // D107
- PG_14, // D108
- PG_15, // D109
- PH_0, // D110
- PH_1, // D111
- PC_2_C, // D112/A26
- PC_3_C, // D113/A27
- PC_2, // D114/A28
- PC_3 // D115/A29
- };
- // Analog (Ax) pin number array
- const uint32_t analogInputPin[] = {
- 0, // A0, PA0
- 1, // A1, PA1
- 2, // A2, PA2
- 3, // A3, PA3
- 4, // A4, PA4
- 5, // A5, PA5
- 6, // A6, PA6
- 7, // A7, PA7
- 16, // A8, PB0
- 17, // A9, PB1
- 32, // A10, PC0
- 33, // A11, PC1
- 34, // A12, PC4
- 35, // A13, PC5
- 81, // A14, PF3
- 82, // A15, PF4
- 83, // A16, PF5
- 84, // A17, PF6
- 85, // A18, PF7
- 86, // A19, PF8
- 87, // A20, PF9
- 88, // A21, PF10
- 89, // A22, PF11
- 90, // A23, PF12
- 91, // A24, PF13
- 92, // A25, PF14
- 112, // A26, PC2_C
- 113, // A27, PC3_C
- 114, // A28, PC2
- 115 // A29, PC3
- };
- 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 = 0x0;
- MPU_InitStruct.Size = MPU_REGION_SIZE_4GB;
- MPU_InitStruct.SubRegionDisable = 0x87;
- MPU_InitStruct.TypeExtField = MPU_TEX_LEVEL0;
- MPU_InitStruct.AccessPermission = MPU_REGION_NO_ACCESS;
- MPU_InitStruct.DisableExec = MPU_INSTRUCTION_ACCESS_DISABLE;
- MPU_InitStruct.IsShareable = MPU_ACCESS_SHAREABLE;
- MPU_InitStruct.IsCacheable = MPU_ACCESS_NOT_CACHEABLE;
- MPU_InitStruct.IsBufferable = MPU_ACCESS_NOT_BUFFERABLE;
- HAL_MPU_ConfigRegion(&MPU_InitStruct);
- /* Enables the MPU */
- HAL_MPU_Enable(MPU_PRIVILEGED_DEFAULT);
- }
- /*
- * @brief System Clock Configuration
- * @param None
- * @retval None
- */
- WEAK void SystemClock_Config(void)
- {
- RCC_OscInitTypeDef RCC_OscInitStruct = {0};
- RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
- RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {};
- MPU_Config();
- /** 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_HSE;
- RCC_OscInitStruct.HSEState = RCC_HSE_ON;
- RCC_OscInitStruct.HSI48State = RCC_HSI48_ON; // 48Mhz for USB
- RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
- RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
- RCC_OscInitStruct.PLL.PLLM = 5; // 25Mhz / 5 = 5Mhz
- RCC_OscInitStruct.PLL.PLLN = 110; // 25Mhz / 5 * 110 = 550Mhz
- RCC_OscInitStruct.PLL.PLLP = 1; // 550Mhz / 1 = 550Mhz
- RCC_OscInitStruct.PLL.PLLQ = 10; // 550Mhz / 10 = 55Mhz
- RCC_OscInitStruct.PLL.PLLR = 10; // unused
- 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();
- }
- PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_USB
- | RCC_PERIPHCLK_SDMMC | RCC_PERIPHCLK_ADC
- | RCC_PERIPHCLK_LPUART1 | RCC_PERIPHCLK_USART16
- | RCC_PERIPHCLK_USART234578 | RCC_PERIPHCLK_I2C123
- | RCC_PERIPHCLK_I2C4 | RCC_PERIPHCLK_SPI123
- | RCC_PERIPHCLK_SPI45 | RCC_PERIPHCLK_SPI6;
- /* HSI48 used for USB 48 Mhz */
- /* PLL1 qclk also used for FMC, SDMMC, RNG, SAI */
- /* PLL2 pclk is needed for adc max 80 Mhz (p,q,r same) */
- /* PLL2 pclk also used for LP timers 2,3,4,5, SPI 1,2,3 */
- /* PLL2 qclk is needed for uart, can, spi4,5,6 80 Mhz */
- /* PLL3 r clk is needed for i2c 80 Mhz (p,q,r same) */
- PeriphClkInitStruct.PLL2.PLL2M = 15; // M DIV 15 vco 25 / 15 ~ 1.667 Mhz
- PeriphClkInitStruct.PLL2.PLL2N = 96; // N MUL 96
- PeriphClkInitStruct.PLL2.PLL2P = 2; // P div 2
- PeriphClkInitStruct.PLL2.PLL2Q = 2; // Q div 2
- PeriphClkInitStruct.PLL2.PLL2R = 2; // R div 2
- // RCC_PLL1VCIRANGE_0 Clock range frequency between 1 and 2 MHz
- PeriphClkInitStruct.PLL2.PLL2RGE = RCC_PLL2VCIRANGE_0;
- PeriphClkInitStruct.PLL2.PLL2VCOSEL = RCC_PLL2VCOMEDIUM;
- PeriphClkInitStruct.PLL2.PLL2FRACN = 0;
- PeriphClkInitStruct.PLL3.PLL3M = 15; // M DIV 15 vco 25 / 15 ~ 1.667 Mhz
- PeriphClkInitStruct.PLL3.PLL3N = 96; // N MUL 96
- PeriphClkInitStruct.PLL3.PLL3P = 2; // P div 2
- PeriphClkInitStruct.PLL3.PLL3Q = 2; // Q div 2
- PeriphClkInitStruct.PLL3.PLL3R = 2; // R div 2
- // RCC_PLL1VCIRANGE_0 Clock range frequency between 1 and 2 MHz
- PeriphClkInitStruct.PLL3.PLL3RGE = RCC_PLL3VCIRANGE_0;
- PeriphClkInitStruct.PLL3.PLL3VCOSEL = RCC_PLL3VCOMEDIUM;
- PeriphClkInitStruct.PLL3.PLL3FRACN = 0;
- // ADC from PLL2 pclk
- PeriphClkInitStruct.AdcClockSelection = RCC_ADCCLKSOURCE_PLL2;
- // USB from HSI48
- PeriphClkInitStruct.UsbClockSelection = RCC_USBCLKSOURCE_HSI48;
- // SDMMC from PLL1 qclk
- PeriphClkInitStruct.SdmmcClockSelection = 0;
- //PeriphClkInitStruct.SdmmcClockSelection = RCC_SDMMCCLKSOURCE_PLL;
- // LPUART from PLL2 qclk
- PeriphClkInitStruct.Lpuart1ClockSelection = 0;
- //PeriphClkInitStruct.Lpuart1ClockSelection = RCC_LPUART1CLKSOURCE_PLL2;
- // USART from PLL2 qclk
- PeriphClkInitStruct.Usart16ClockSelection = RCC_USART16CLKSOURCE_PLL2;
- // USART from PLL2 qclk
- PeriphClkInitStruct.Usart234578ClockSelection = 0;
- //PeriphClkInitStruct.Usart234578ClockSelection = RCC_USART234578CLKSOURCE_PLL2;
- // I2C123 from PLL3 rclk
- PeriphClkInitStruct.I2c123ClockSelection = RCC_I2C123CLKSOURCE_PLL3;
- // I2C4 from PLL3 rclk
- PeriphClkInitStruct.I2c4ClockSelection = 0;
- //PeriphClkInitStruct.I2c4ClockSelection = RCC_I2C4CLKSOURCE_PLL3;
- // SPI123 from PLL2 pclk
- PeriphClkInitStruct.Spi123ClockSelection = RCC_SPI123CLKSOURCE_PLL2;
- // SPI45 from PLL2 qclk
- PeriphClkInitStruct.Spi45ClockSelection = 0;
- //PeriphClkInitStruct.Spi45ClockSelection = RCC_SPI45CLKSOURCE_PLL2;
- // SPI6 from PLL2 qclk
- PeriphClkInitStruct.Spi6ClockSelection = 0;
- //PeriphClkInitStruct.Spi6ClockSelection = RCC_SPI6CLKSOURCE_PLL2;
- if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK) {
- Error_Handler();
- }
- }
- #endif /* ARDUINO_GENERIC_* */
|