mirror of
https://github.com/micropython/micropython.git
synced 2026-01-04 11:10:14 +01:00
stm32: Add initial support for H5 MCUs.
This commit adds initial support for STM32H5xx MCUs. The following features have been confirmed to be working on an STM32H573: - UART over REPL and USB CDC - USB CDC and MSC - internal flash filesystem - machine.Pin - machine.SPI transfers with DMA - machine.ADC - machine.RTC - pyb.LED - pyb.Switch - pyb.rng - mboot Signed-off-by: Damien George <damien@micropython.org>
This commit is contained in:
@@ -233,6 +233,36 @@ void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) {
|
||||
// APB clock. Otherwise (APB prescaler > 1) the timer clock is twice its
|
||||
// respective APB clock. See DM00031020 Rev 4, page 115.
|
||||
uint32_t timer_get_source_freq(uint32_t tim_id) {
|
||||
#if defined(STM32H5)
|
||||
|
||||
uint32_t source, ppre;
|
||||
if ((2 <= tim_id && tim_id <= 7) || (12 <= tim_id && tim_id <= 14)) {
|
||||
// TIM{2-7,12-14} are on APB1
|
||||
source = HAL_RCC_GetPCLK1Freq();
|
||||
ppre = (RCC->CFGR2 >> RCC_CFGR2_PPRE1_Pos) & 7;
|
||||
} else {
|
||||
// TIM{1,8,15-17} are on APB2
|
||||
source = HAL_RCC_GetPCLK2Freq();
|
||||
ppre = (RCC->CFGR2 >> RCC_CFGR2_PPRE2_Pos) & 7;
|
||||
}
|
||||
if (RCC->CFGR1 & RCC_CFGR1_TIMPRE) {
|
||||
if (ppre == 0 || ppre == 4 || ppre == 5) {
|
||||
// PPREx divider is 1, 2 or 4.
|
||||
return 2 * source;
|
||||
} else {
|
||||
return 4 * source;
|
||||
}
|
||||
} else {
|
||||
if (ppre == 0 || ppre == 4) {
|
||||
// PPREx divider is 1 or 2.
|
||||
return HAL_RCC_GetHCLKFreq();
|
||||
} else {
|
||||
return 2 * source;
|
||||
}
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
uint32_t source, clk_div;
|
||||
if (tim_id == 1 || (8 <= tim_id && tim_id <= 11)) {
|
||||
// TIM{1,8,9,10,11} are on APB2
|
||||
@@ -267,6 +297,8 @@ uint32_t timer_get_source_freq(uint32_t tim_id) {
|
||||
source *= 2;
|
||||
}
|
||||
return source;
|
||||
|
||||
#endif
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
@@ -837,6 +869,8 @@ STATIC const uint32_t tim_instance_table[MICROPY_HW_MAX_TIMER] = {
|
||||
TIM_ENTRY(6, TIM6_IRQn),
|
||||
#elif defined(STM32G0)
|
||||
TIM_ENTRY(6, TIM6_DAC_LPTIM1_IRQn),
|
||||
#elif defined(STM32H5)
|
||||
TIM_ENTRY(6, TIM6_IRQn),
|
||||
#else
|
||||
TIM_ENTRY(6, TIM6_DAC_IRQn),
|
||||
#endif
|
||||
@@ -857,6 +891,7 @@ STATIC const uint32_t tim_instance_table[MICROPY_HW_MAX_TIMER] = {
|
||||
TIM_ENTRY(8, TIM8_UP_IRQn),
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if defined(TIM9)
|
||||
#if defined(STM32L1)
|
||||
TIM_ENTRY(9, TIM9_IRQn),
|
||||
@@ -864,6 +899,7 @@ STATIC const uint32_t tim_instance_table[MICROPY_HW_MAX_TIMER] = {
|
||||
TIM_ENTRY(9, TIM1_BRK_TIM9_IRQn),
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if defined(TIM10)
|
||||
#if defined(STM32L1)
|
||||
TIM_ENTRY(10, TIM10_IRQn),
|
||||
@@ -871,6 +907,7 @@ STATIC const uint32_t tim_instance_table[MICROPY_HW_MAX_TIMER] = {
|
||||
TIM_ENTRY(10, TIM1_UP_TIM10_IRQn),
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if defined(TIM11)
|
||||
#if defined(STM32L1)
|
||||
TIM_ENTRY(11, TIM11_IRQn),
|
||||
@@ -878,42 +915,57 @@ STATIC const uint32_t tim_instance_table[MICROPY_HW_MAX_TIMER] = {
|
||||
TIM_ENTRY(11, TIM1_TRG_COM_TIM11_IRQn),
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if defined(TIM12)
|
||||
#if defined(STM32H5)
|
||||
TIM_ENTRY(12, TIM12_IRQn),
|
||||
#else
|
||||
TIM_ENTRY(12, TIM8_BRK_TIM12_IRQn),
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if defined(TIM13)
|
||||
#if defined(STM32H5)
|
||||
TIM_ENTRY(13, TIM13_IRQn),
|
||||
#else
|
||||
TIM_ENTRY(13, TIM8_UP_TIM13_IRQn),
|
||||
#endif
|
||||
#if defined(STM32F0) || defined(STM32G0)
|
||||
#endif
|
||||
|
||||
#if defined(STM32F0) || defined(STM32G0) || defined(STM32H5)
|
||||
TIM_ENTRY(14, TIM14_IRQn),
|
||||
#elif defined(TIM14)
|
||||
TIM_ENTRY(14, TIM8_TRG_COM_TIM14_IRQn),
|
||||
#endif
|
||||
|
||||
#if defined(TIM15)
|
||||
#if defined(STM32F0) || defined(STM32G0) || defined(STM32H7)
|
||||
#if defined(STM32F0) || defined(STM32G0) || defined(STM32H5) || defined(STM32H7)
|
||||
TIM_ENTRY(15, TIM15_IRQn),
|
||||
#else
|
||||
TIM_ENTRY(15, TIM1_BRK_TIM15_IRQn),
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if defined(TIM16)
|
||||
#if defined(STM32G0B1xx) || defined(STM32G0C1xx)
|
||||
TIM_ENTRY(16, TIM16_FDCAN_IT0_IRQn),
|
||||
#elif defined(STM32F0) || defined(STM32G0) || defined(STM32H7) || defined(STM32WL)
|
||||
#elif defined(STM32F0) || defined(STM32G0) || defined(STM32H5) || defined(STM32H7) || defined(STM32WL)
|
||||
TIM_ENTRY(16, TIM16_IRQn),
|
||||
#else
|
||||
TIM_ENTRY(16, TIM1_UP_TIM16_IRQn),
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if defined(TIM17)
|
||||
#if defined(STM32G0B1xx) || defined(STM32G0C1xx)
|
||||
TIM_ENTRY(17, TIM17_FDCAN_IT1_IRQn),
|
||||
#elif defined(STM32F0) || defined(STM32G0) || defined(STM32H7) || defined(STM32WL)
|
||||
#elif defined(STM32F0) || defined(STM32G0) || defined(STM32H5) || defined(STM32H7) || defined(STM32WL)
|
||||
TIM_ENTRY(17, TIM17_IRQn),
|
||||
#else
|
||||
TIM_ENTRY(17, TIM1_TRG_COM_TIM17_IRQn),
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if defined(TIM20)
|
||||
TIM_ENTRY(20, TIM20_UP_IRQn),
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user