Projet-Voilier-3/driver/Driver_ADC.c
Sanchez Manon c930991ccb Ajout du Driver_IMU, pour la gestion de l'accéléromètre.
Les fichiers Driver_SPI sont des versions personnelles non fonctionelle de la gestion du SPI.
C'est la bibliothèque MySPI qui est utilisée dans le projet.

Ajout de commentaires dans tous les fichiers driver en format doxygen.
2023-04-05 16:39:01 +02:00

70 行
1.9 KiB
C
Raw Blame 履歴

このファイルには曖昧(ambiguous)なUnicode文字が含まれています

このファイルには、他の文字と見間違える可能性があるUnicode文字が含まれています。 それが意図的なものと考えられる場合は、この警告を無視して構いません。 それらの文字を表示するにはエスケープボタンを使用します。

#include "stm32f10x.h"
#include "stdio.h"
#include "Driver_ADC.h"
void erreur (void)
{
while(1);
}
void (*ADC1_2_fx) (void) = &erreur;
/**
*************************************************************************************************
* @brief Activation et configuration de l'ADC1.
* @param -> Priorité de l'intérruption.
* @Note -> Fonction à lancer systématiquement avant daller plus en détail dans les conf plus fines (PWM, codeur inc...)
*************************************************************************************************
*/
void driver_adc_1_init (char Prio, void (*IT_function)(void))
{
//On règle la fréquence à 12Mhz
RCC->CFGR |= RCC_CFGR_ADCPRE_DIV6;
//Validation de l'horloge ACD1
RCC->APB2ENR |= RCC_APB2ENR_ADC1EN;
//Activation de l'external trig
ADC1->CR2 |= ADC_CR2_EXTTRIG;
//Activation SWSTART
ADC1->CR2 |= ADC_CR2_EXTSEL;
//Validation de l'horloge ACD1
RCC->APB2ENR |= RCC_APB2ENR_ADC1EN;
//Activation de l'ADC1
ADC1->CR2 |= ADC_CR2_ADON;
//Fixe le nb de conversion, ici 1
ADC1->SQR1 &= ADC_SQR1_L;
//Numéro de voie à convertir
ADC1->SQR3 |= 1;
//Lancement de la calibration
ADC1->CR2 |= ADC_CR2_CAL;
//Attente de la fin de la calibration
while((ADC1->CR2 & ADC_CR2_CAL));
//Activation de l'intéruption sur le flag EOC
ADC1->CR1 |= ADC_CR1_EOCIE;
//Activation de l'intéruption et configuration du niveau de priorité
NVIC_EnableIRQ(ADC1_2_IRQn);
NVIC_SetPriority(ADC1_2_IRQn, Prio);
//Fonction à appeler à l'intéruption
ADC1_2_fx = IT_function;
}
/* Fonction de lancement*/
void driver_adc_1_launch_read (void)
{
//Lancement de la conversion
ADC1->CR2 |= ADC_CR2_SWSTART;
}
/*Lecture de la converstion*/
uint16_t driver_adc_1_read (void)
{
//Retour de la conversion
return ADC1->DR &~ ((0x0F) << 12);
}
void ADC1_2_IRQHandler(void)
{
//On abaisse le flag pour la prochaine lecture
ADC1->SR &= ~ADC_SR_EOC;
//On lance la fonction de l'utilisateur
(*ADC1_2_fx)();
}