123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345 |
- /**
- * Bibliotheque DriverJeuLaser (ancienne gassp72 adaptée 2021 - TR)
- *
- * GPIO - ADC - Sequenceur - System Timer - PWM - 72 MHz
- * Modifs :
- * enlèvement de tout ce qui est inutile dans le .h
- * ajout de fonctions GPIO dans le .c pour utilisation en ASM ou en C :
- * - GPIOA_Set(char Broche), GPIOB_Set(char Broche), GPIOC_Set(char Broche)
- * - GPIOA_Clear(char Broche), GPIOB_Clear(char Broche), GPIOC_Clear(char Broche)
- *
- * ajout d'une fonction qui impose une valeur de PWM (TIM3_CCR3)
- * PWM_Set_Value_On_TIM3_C3( int Val)
- * permet en ASM ou en C de fixer la valeur de PWM
-
- * Ajout de commentaires
-
- */
- #ifndef DRIVERJEULASER_H__
- #define DRIVERJEULASER_H__
-
- #include "stm32f10x.h"
-
- //**********************************************************************************************************
- //--------------------- CONFIGURATION CLOCK DU STM32 --------------------------------------
- //**********************************************************************************************************
-
- /**
- * @brief Configure l'ensemble des horloges du uC
- * @note horloge systeme (config statique a 72 MHz pour le STM32F103)
- * @param None
- * @retval None
- */
- void CLOCK_Configure(void);
-
-
-
-
-
-
-
-
-
-
- //**********************************************************************************************************
- //--------------------- LES TIMERS GENERAL PURPOSE TIM1 à TIM 4 ------------------------------
- //**********************************************************************************************************
-
- /**
- * @brief Configure un Timer TIM1 à TIM4 avec une périodicité donnée
- * @note L' horloge des 4 timers a une fréquence de 72MHz
- * @param *Timer = TIM1 ou TIM2 ou TIM3 ou TIM4
- * @param Durée_ticks : nombre de pas (tick) comptés à 72 MHz pour faire déborder le timer
- * La période de débordement du Timer est donc T = Durée_ticks * Tck, avec Tck = 1/72 000 000
- * @retval None
- */
- void Timer_1234_Init_ff( TIM_TypeDef *Timer, u32 Duree_ticks );
-
- /**
- * Macros de base pour utiliser les timers
- */
- // bloque le timer
- #define Bloque_Timer(Timer) Timer->CR1=(Timer->CR1)&~(1<<0)
- // Lance timer
- #define Run_Timer(Timer) Timer->CR1=(Timer->CR1)|(1<<0)
-
-
-
- /**
- * @brief Associe une fonction d'interruption (callback) lors du débordement d'un timer
- * @note
- * @param *Timer = TIM1 ou TIM2 ou TIM3 ou TIM4
- * @param Prio : niveau de priorité de l'interruption (0 -> priorité max, 15 -> priorité min)
- * @param IT_function : le nom de la fonction Callback à appeler lors de l'interruption
- * @retval None
- */
- void Active_IT_Debordement_Timer( TIM_TypeDef *Timer, char Prio, void (*IT_function)(void) );
-
-
-
-
-
-
-
-
-
-
-
- //*********************************************************************************************************
- //--------------------- PWM TIM1 to TIM 4 ------------------------------
- //*********************************************************************************************************
-
- /**
- * @brief Configure un timer en PWM
- * @note
- * @param *Timer = TIM1 ou TIM2 ou TIM3 ou TIM4
- * @param voie : un des 4 canaux possibles 1 à 4.
- * @param Periode_ticks : nombre de pas (tick) comptés à 72 MHz pour faire déborder le timer
- * La période de débordement du Timer est donc T = Durée_ticks * Tck, avec Tck = 1/72 000 000
- * @retval Retourne la période en tick (normalement la même que le param d'entrée sauf si PSC utilisé
- */
- unsigned short int PWM_Init_ff( TIM_TypeDef *Timer, char Voie, u32 Periode_ticks );
-
-
-
- /**
- * @brief Fixe une valeur de PWM, Val, en tick horloge. La rapport cyclique effectif
- * est donc : rcy = Thaut_ticks / Periode_ticks
- * @note spécifique Jeu Laser, PWM liée exclusivement au TIM3, chan3
- * @param Thaut_ticks : durée de l'état haut d'une impulsion en Ticks
- * @retval None
- */
- void PWM_Set_Value_TIM3_Ch3( unsigned short int Thaut_ticks);
-
-
-
-
-
-
-
-
-
- //**********************************************************************************************************
- //--------------------- LE SYSTICK TIMER, Part of Cortex M3 ------------------------------
- //**********************************************************************************************************
-
- /**
- * @brief Configure le timer Systick avec une périodicité donnée
- * @note Ce timer ne peut servir qu'à créer des temporisations ou générer des interruption
- * ce n'est pas à proprement parler un périphérique, il fait partie du Cortex M3
- * Ce timer est un 24 bits
- * @param Periode_ticks : nombre de pas (tick) comptés à 72 MHz pour établir la périodicité
- * La période de débordement du Timer est donc T = Durée_ticks * Tck, avec Tck = 1/72 000 000
- * @retval None
- */
- void Systick_Period_ff( unsigned int Periode_ticks );
-
-
-
- /**
- * @brief Associe une fonction d'interruption (callback) lors du débordement du Systick
- * @note
- * @param Prio : niveau de priorité de l'interruption (0 -> priorité max, 15 -> priorité min)
- * @param IT_function : le nom de la fonction Callback à appeler lors de l'interruption
- * @retval None
- */
- void Systick_Prio_IT( char Prio, void (*Systick_function)(void) );
-
-
- /**
- * Macros de base pour utiliser le Systick
- */
- #define SysTick_On ((SysTick->CTRL)=(SysTick->CTRL)|1<<0)
- #define SysTick_Off ((SysTick->CTRL)=(SysTick->CTRL)& ~(1<<0))
- #define SysTick_Enable_IT ((SysTick->CTRL)=(SysTick->CTRL)|1<<1)
- #define SysTick_Disable_IT ((SysTick->CTRL)=(SysTick->CTRL)& ~(1<<1))
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- //**********************************************************************************************************
- //--------------------- LE SYSTICK TIMER, Part of Cortex M3 ------------------------------
- //**********************************************************************************************************
-
- /**
- * @brief Active l'ADC du STM32, configure la durée de prélèvement de l'échantillon (temps
- * de fermeture du switch d'acquisition
- * @note
- * @param ADC : précise de quel ADC il s'agit, ADC1 ou ADC2
- * @param Duree_Ech_ticks : dirée de fermeture du switch d'échantillonnage en Tick d'horloge CPU
- * exemple pour 1µs on choisira 72.
- * @retval Nombre de Tick réellement pris en compte
- */
- unsigned int Init_TimingADC_ActiveADC_ff( ADC_TypeDef * ADC, u32 Duree_Ech_ticks );
-
-
- /**
- * @brief Sélectionne la voie à convertir
- * @note Attention, la voie va de 0 à 15 et n'est pas directement lié au n°de GPIO
- * @param ADC : précise de quel ADC il s'agit, ADC1 ou ADC2
- * @param Voie_ADC : 1 à 15
- * @retval None
- */
- void Single_Channel_ADC( ADC_TypeDef * ADC, char Voie_ADC );
-
-
-
-
-
- /**
- * @brief Permet lier le déclenchement au débordement d'un timer, spécifie également
- * la période de débordement du timer
- * @note pas besoin de régler le timer avec une autre fonction dédiée timer
- * @param ADC : précise de quel ADC il s'agit, ADC1 ou ADC2
- * @param Source : indique le timer qui déclenche l'ADC choix dans les define ci-dessous
- * @param Periode_ticks : nombre de pas (tick) comptés à 72 MHz pour faire déborder le timer
- * La période de débordement du Timer est donc T = Durée_ticks * Tck, avec Tck = 1/72 000 000
- * @retval None
- */
-
- // param pour Source :
- #define TIM1_CC1 0
- #define TIM1_CC2 1
- #define TIM1_CC3 2
- #define TIM2_CC2 3
- #define TIM4_CC4 5
- void Init_Conversion_On_Trig_Timer_ff( ADC_TypeDef * ADC, char Source, u32 Periode_ticks );
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- //**********************************************************************************************************
- //--------------------- ANALOG INPUT ADC & DMA ------------------------------
- //**********************************************************************************************************
-
- /**
- * @brief Permer de lier l'ADC à un tableau en RAM pour une DMA
- * @note
- * @param Circ : circular. Si '0', en fin de DMA le ptr d'@ reste inchangé
- * si '1' le ptr d'@ se recale à celle du début.
- * @param Ptr_Table_DMA : contient l'@ de début de zone RAM à écrire
- * @retval None
- */
- void Init_ADC1_DMA1(char Circ, short int *Ptr_Table_DMA);
-
-
-
-
-
- /**
- * @brief Lance une DMA sur le nombre de points spécifie. Les resultats seront stockes
- * dans la zone de RAM écrite est indiquée lors de l'appel de la fonction Init_ADC1_DMA1
- * @note
- * @param NbEchDMA est le nombre d'échantillons à stocker.
- * @retval None
- */
- void Start_DMA1( u16 NbEchDMA );
-
- // arret DMA
- #define Stop_DMA1 DMA1_Channel1->CCR =(DMA1_Channel1->CCR) &~0x1;
-
-
- /**
- * @brief Attend la fin d'un cycle de DMA. la duree depend de la periode d'acquisition
- * et du nombre d'echantillons
- * @note fonction d'attente (bloquante)
- * @param None
- * @retval None
- */
- void Wait_On_End_Of_DMA1(void);
-
-
-
-
-
-
-
-
- //**********************************************************************************************************
- //--------------------- GPIO ------------------------------
- //**********************************************************************************************************
-
- /**
- * @brief Initialisation d'un GPIO (A à C), pin x.
- * peut être configuré :
- * -> Input ou output
- * -> architecture technologique (push-pull, open drain...)
-
- * @note
- * @param Port : GPIOA, GPIOB, GPIOC
- * @param Broche : 0 à 15
- * @param Sens : INPUT ou OUTPUT
- * @param Techno : voir define ci dessous
- * @retval 1 erreur, 0 si OK
- */
-
- // Sens
- #define INPUT 'i'
- #define OUTPUT 'o'
-
- // Techno pour pin en entrée (INPUT)
- #define ANALOG 0
- #define INPUT_FLOATING 1
- #define INPUT_PULL_DOWN_UP 2
-
- // Techno pour pin en sortie (OUTPUT)
- #define OUTPUT_PPULL 0
- #define OUTPUT_OPDRAIN 1
- #define ALT_PPULL 2
- #define ALT_OPDRAIN 3
-
- // Exemple :
- // Port_IO_Init(GPIOB, 8, OUTPUT, OUTPUT_PPULL);
- // Place le bit 8 du port B en sortie Push-pull
- char GPIO_Configure(GPIO_TypeDef * Port, int Broche, int Sens, int Techno);
-
-
- /**
- * @brief Mise à 1 d'une broche GPIO
- * @note Une fonction par GPIO
- * @param Broche : 0 à 15
- * @retval None
- */
-
- void GPIOA_Set(char Broche);
- void GPIOB_Set(char Broche);
- void GPIOC_Set(char Broche);
-
-
-
- /**
- * @brief Mise à 0 d'une broche GPIO
- * @note Une fonction par GPIO
- * @param Broche : 0 à 15
- * @retval None
- */
-
- void GPIOA_Clear(char Broche);
- void GPIOB_Clear(char Broche);
- void GPIOC_Clear(char Broche);
-
-
- #endif
-
|