#pragma once #include "main.h" #include "stm32h743xx.h" #include "stm32h7xx.h" #include /* Includes ------------------------------------------------------------------*/ /** Protezione dal cambiamento e dall'uso non raccomandato. Membri interni della struttura. Rende il membro solo lettura e genera un warning se usato da codice esterno. */ #define __rdon const #define __rdwr #define __prv8 \ __attribute__(( \ deprecated("Questo campo è PRIVATO. Non usarlo. Usa i metodi adatti " \ "alla manipolazione o controlla la tua implementazione"))) const #define __in_un_altro_file extern; /** Protezione dal linking esterno. Funzioni e variabili globali in un file .c. Limita la funzione/variabile al solo file in cui è definita (visibilità "privata" al file). */ #define READONLY const #define PUBLIC #define PRIVATE static /// Variabile esterna condivisa con una Interrupt Service Routine. #define EXT_ISR_VAR extern volatile /// Dichiarazione della variabile nel file di definizione (es. .c). #define ISR_VAR volatile /// Variabile globale condivisa ma non usata negli interrupt #define EXT_GLOBAL extern /// MY DEBUG 1 = debug | 0 = no my debug #define MY_DEBUG 1 #define NO_HAL_IT 0 // 0 disable 1 enable /* ======= bit functions ========= Macro presenti anche in: Drivers/CMSIS/Device/ST/STM32H7xx/Include/stm32h7xx.h */ /** * @brief Imposta a 1 un bit specifico in un byte (SET). * * Esegue un'operazione OR bit a bit. I bit che erano a 1 rimangono a 1, * il bit all'indice n viene forzato a 1. * * @param byte Puntatore al byte da modificare. * @param n L'indice del bit da impostare (0-7). */ static inline void set_bit(uint8_t *byte, uint8_t n) { *byte = *byte | (1u << n); } /** * @brief Imposta a 0 un bit specifico in un byte (CLEAR). * * Esegue un AND con una maschera inversa. Il bit all'indice n * viene forzato a 0, gli altri rimangono invariati. * * @param byte Puntatore al byte da modificare. * @param n L'indice del bit da pulire (0-7). */ static inline void clear_bit(uint8_t *byte, uint8_t n) { *byte = *byte & ~(1u << n); } /** * @brief Inverte lo stato di un bit specifico (TOGGLE). * * Se il bit è 0 diventa 1, se è 1 diventa 0. Usa l'operatore XOR. * * @param byte Puntatore al byte da modificare. * @param n L'indice del bit da invertire (0-7). */ static inline void toggle_bit(uint8_t *byte, uint8_t n) { *byte = *byte ^ (1u << n); } /** * @brief Legge lo stato di un bit specifico. * * @param byte Puntatore al byte (costante, sola lettura). * @param n L'indice del bit da leggere (0-7). * @return uint8_t Ritorna diverso da 0 se il bit è 1, oppure 0 se il bit è 0. * Nota: non ritorna necessariamente "1", ma il valore del bit nella sua posizione (es. 4, 8, 16). */ static inline uint8_t read_bit(const uint8_t *byte, uint8_t n) { return (*byte & (1u << n)); } // ====== USART ================ // ====== END USART ============ // ====== TIM6 ================= // ====== END TIM6 ============= /** * @brief Funzione di Accensione onBoard * * Permette di far accendere e spegnere contemporaneamente tutti i leg * presenti sulla board. */ void MOTD_init(void);