Module/stm32l4x2/system.h

56 lines
1.9 KiB
C
Raw Normal View History

2024-01-16 16:14:54 +01:00
#ifndef __SYSTEM_STM32L4XX_H
#define __SYSTEM_STM32L4XX_H
#include <stdint.h>
/** @file
* @brief Základní nastavení CPU.
*
* Doplněné o DBGMCU pro debug ve sleep módu.
* */
#ifdef __cplusplus
extern "C" {
#endif
/** System Clock Frequency (Core Clock) */
extern uint32_t SystemCoreClock;
/** Inicializace jádra a hodin periferií */
extern void SystemInit (void);
/** Spočte frekvenci jádra v závislosti na nastavení */
extern void SystemCoreClockUpdate (void);
/** Inicializace jen tabulky vektorů, hodiny a flash inicializovány bootloaderem */
extern void UserSystemInit (void);
/// Control registr DEBUG MCU
typedef union {
struct {
uint32_t DBG_SLEEP : 1; //!< Debug Sleep mode
uint32_t DBG_STOP : 1; //!< Debug Stop mode
uint32_t DBG_STANDBY : 1; //!< Debug Standby mode
uint32_t UNUSED1 : 2;
uint32_t TRACE_IOEN : 1; //!< Trace pin assignment control
uint32_t TRACE_MODE : 2; //!< TRACE pin assignment for Asynchronous/Synchronous Mode, TRACEDATA size
uint32_t UNUSED2 : 24;
} B; //!< jednotlivé bity
uint32_t R; //!< Celková hodnota
} DBGMCU_CR;
/// Blok řízení DEBUG MCU
typedef struct {
volatile uint32_t IDCODE; //!< ID procesoru
volatile DBGMCU_CR CR; //!< Řízení debug při low power modech.
volatile uint32_t APB1_FZ1; //!< chování periferií při debug
volatile uint32_t APB1_FZ2; //!< chování periferií při debug
volatile uint32_t APB2_FZ; //!< chování periferií při debug
} DBGMCU_L4;
/// Adresa DBGMCU bloku
static DBGMCU_L4 * const MDBGMCU = (DBGMCU_L4 *) 0xE0042000;
/// Pokud použijeme v programu wfi/wfe, je nutné povolit debug i v tt. módu.
static inline void EnableDebugOnSleep (void) {
MDBGMCU->CR.B.DBG_SLEEP = 1;
}
#ifdef __cplusplus
}
#endif
#endif /*__SYSTEM_STM32L4XX_H */