Ajout des dernières fonctionnalités
This commit is contained in:
parent
1e9f281f4d
commit
15bdf1de4a
16 changed files with 676 additions and 116 deletions
BIN
Drivers/Inc/Lib_Com_Periph_2022.lib
Normal file
BIN
Drivers/Inc/Lib_Com_Periph_2022.lib
Normal file
Binary file not shown.
229
Drivers/Inc/MyI2C.h
Normal file
229
Drivers/Inc/MyI2C.h
Normal file
|
@ -0,0 +1,229 @@
|
||||||
|
#ifndef _I2C_
|
||||||
|
#define _I2C_
|
||||||
|
|
||||||
|
#include "stm32f10x.h"
|
||||||
|
|
||||||
|
/*************************************************************************************
|
||||||
|
===================== By Periph team INSA GEI 2022 ===========================
|
||||||
|
*************************************************************************************/
|
||||||
|
|
||||||
|
/*
|
||||||
|
*************************************************************************************
|
||||||
|
===================== I2C les IO STM32F103 =================================
|
||||||
|
*************************************************************************************
|
||||||
|
|
||||||
|
Les IO sont pris en charge par la lib, pas besoin de faire les configurations Alt OD.
|
||||||
|
|
||||||
|
**I2C1**
|
||||||
|
SCL PB6
|
||||||
|
SDA PB7
|
||||||
|
|
||||||
|
**I2C2**
|
||||||
|
SCL PB10
|
||||||
|
SDA PB11
|
||||||
|
|
||||||
|
|
||||||
|
*************************************************************************************
|
||||||
|
==================== Fondamentaux I2C ==========================================
|
||||||
|
*************************************************************************************
|
||||||
|
- Bus synchrone Low speed (<100kHz) ou high speed (=400kHz), Ici Low speed 100kHz.
|
||||||
|
- Transfert octet par octet, poids fort en premier, avec aquittement pour chaque octet
|
||||||
|
- Deux lignes SDA et SCL (horloge) en open drain, repos '1'
|
||||||
|
- bit "normal" = SDA stable lors du pulse SCL (ie durant l'état haut de SCL, SDA est stable)
|
||||||
|
- bit Start/Stop/Restart = SDA non stable lorsque SCL vaut '1' (violation règle précédente)
|
||||||
|
* Start : front descendant de SDA lorsque SCL vaut '1'
|
||||||
|
* Stop : front montant de SDA lorsque SCL = '1'
|
||||||
|
* Restart = Start en cours de trame (typiquement pour changer Write/read).
|
||||||
|
- uC en Mode Master uniquement (c'est notre choix) : c'est le uC qui est maître de l'horloge SCL.
|
||||||
|
- Le Slave a une @ 7 bits. On ajoute un bit LSB qui est /WR (donc 0 pour écriture, 1 pour lecture)
|
||||||
|
- Une adresse s'écrit donc |a6 a5 a4 a3 a2 a1 a0 /WR| ce qui donne 8 bits. Elle indique une future
|
||||||
|
lecture ou écriture.
|
||||||
|
On parle d'@ 7 bits en regroupant |a6 a5 a4 a3 a2 a1 a0|
|
||||||
|
On parle d'@ 8 bits en regroupant |a6 a5 a4 a3 a2 a1 a0 /WR| (donc une @ écriture, une @ lecture)
|
||||||
|
NB : préférer le concept @7bits...c'est plus clair.
|
||||||
|
|
||||||
|
- On peut lire ou écrire une ou plusieurs données à la suite. C'est lors de l'envoie de l'adresse Slave
|
||||||
|
par le Master que le sens à venir pour les datas est indiqué.
|
||||||
|
- En écriture,
|
||||||
|
* les Ack sont faits par le slave après chaque octet envoyé par le master (Ack = mise à 0 le bit 9).
|
||||||
|
- En lecture,
|
||||||
|
* dès que le l@ slave est transmise (/RW = 1), et le Ack réalisé, le slave positionne le bit 7
|
||||||
|
du prochain octet à lire sur SDA par anticipation ,
|
||||||
|
* le master enchaîne ses pulses (9), lors du pulse 9 (le dernier) c'est le master qui acquite.
|
||||||
|
* Après chaque acquitement, le Slave amorce le prochain octet en positionnant son bit 7 sur SDA
|
||||||
|
* Après le dernier octet, le Master génère un stop.
|
||||||
|
* Pour pouvoir générer le stop, le Master doit piloter SDA, or ce n'est pas possible puisque
|
||||||
|
le Slave positionne le futur bit 7 ... Pour régler ce problème :
|
||||||
|
lors du dernier transfert, le Master N'acquitte PAS (NACK). Ainsi le Slave ne
|
||||||
|
propose plus le bit 7 du prochain octet sur SDA et libère SDA. Le Master peut alors clôturer la
|
||||||
|
communication avec un Stop.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
======= Echange typique avec un Slave ================================================================
|
||||||
|
- Une lecture ou écriture se fait vers un Slave et à partir d'une adresse mémoire donnée (pointeur interne).
|
||||||
|
Ce pointeur est automatiquement incrémenté dans le slave lors des accès écriture ou lecture.
|
||||||
|
|
||||||
|
- Ecriture de N octets , trame complète (@ = adresse slave, pt = valeur de chargement du pointeur interne)
|
||||||
|
|Start Cond |@6|@5|@4|@3|@2|@1|@0| Wr =0 |Slave ACK|
|
||||||
|
|pt7|pt6|pt5|pt4|pt3|pt2|pt1|pt0|Slave ACK|
|
||||||
|
|d7|d6|d5|d4|d3|d2|d1|d0|Slave ACK| (data 1)
|
||||||
|
.....
|
||||||
|
|d7|d6|d5|d4|d3|d2|d1|d0|Salve ACK|Stop Cond| (data N)
|
||||||
|
|
||||||
|
- Lecture de N octets à partir d'une adresse de pointeur donnée
|
||||||
|
|Start Cond |@6|@5|@4|@3|@2|@1|@0| Wr =0 |Slave ACK|
|
||||||
|
|pt7|pt6|pt5|pt4|pt3|pt2|pt1|pt0|Slave ACK|
|
||||||
|
|ReStart Cond |@6|@5|@4|@3|@2|@1|@0| Wr =1 |Slave ACK| (NB: restart nécessaire pour changer écriture / lecture)
|
||||||
|
|d7|d6|d5|d4|d3|d2|d1|d0|Master ACK| (data 1)
|
||||||
|
.....
|
||||||
|
|d7|d6|d5|d4|d3|d2|d1|d0|Master ACK| (data N-1)
|
||||||
|
|d7|d6|d5|d4|d3|d2|d1|d0|Master NACK|Stop Cond| (data N)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
*************************************************************************************
|
||||||
|
==================== La lib I2C ==========================================
|
||||||
|
*************************************************************************************
|
||||||
|
|
||||||
|
3 fonctions essentielles :
|
||||||
|
MyI2C_Init
|
||||||
|
MyI2C_PutString
|
||||||
|
MyI2C_GetString
|
||||||
|
|
||||||
|
1 fonction spéciale : MyI2C_Get_Error
|
||||||
|
|
||||||
|
Les fonctions Put/Get string fonctionnent sur le principe classique décrit précédemment
|
||||||
|
(Slave@, Pter @, Data...).
|
||||||
|
La fonction init prend parmi ses paramètres le nom d'une fct callback d'erreur.
|
||||||
|
En fait, le driver gère en IT les erreurs possibles I2C. La fonction MyI2C_Get_Error permet de
|
||||||
|
recevoir un code erreur.
|
||||||
|
Il est conseillé d'utiliser ce callback. Si on tombe dedans, c'est qu'une erreur s'est produite.
|
||||||
|
Si le code erreur est "inconnu", souvent c'est qu'il y a un soucis à l'adressage slave:
|
||||||
|
Vérifier alors la connectique physique SDA/SCL ainsi que l'alimentation du slave ou tout simplement
|
||||||
|
l'@ slave !
|
||||||
|
|
||||||
|
|
||||||
|
==========================================================================================*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*=========================================================================================
|
||||||
|
GESTION ERREURS
|
||||||
|
========================================================================================= */
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
OK,
|
||||||
|
BusError, //
|
||||||
|
AckFail, // Pas,d'ack
|
||||||
|
TimeOut, // SCL est resté plus de 25ms à l'état bas
|
||||||
|
UnknownError // IT erreur déclenchée mais pas de flag explicite ...
|
||||||
|
} MyI2C_Err_Enum;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Retourne les erreurs I2C
|
||||||
|
* @param I2Cx: where x can be 1 or 2 to select the I2C peripheral.
|
||||||
|
* @retval Type d'erreur rencontrée , voir MyI2C_Err_Enum
|
||||||
|
*/
|
||||||
|
|
||||||
|
MyI2C_Err_Enum MyI2C_Get_Error(I2C_TypeDef * I2Cx);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*=========================================================================================
|
||||||
|
INITIALISATION I2C
|
||||||
|
========================================================================================= */
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Initialise l'interface I2C (1 ou 2)
|
||||||
|
* @param I2Cx: where x can be 1 or 2 to select the I2C peripheral.
|
||||||
|
* @param char IT_Prio_I2CErr 0 à 15 (utilisé en cas d'erreur, IT courte et non bloquante
|
||||||
|
* @param *ITErr_function : callback à utiliser pour sortir d'un plantage transmission
|
||||||
|
* @retval None
|
||||||
|
* @Example MyI2C_Init(I2C1, 2,My_CallbackErr);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
*/
|
||||||
|
void MyI2C_Init(I2C_TypeDef * I2Cx, char IT_Prio_I2CErr, void (*ITErr_function) (void));
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*=========================================================================================
|
||||||
|
EMISSION I2C : PutString
|
||||||
|
========================================================================================= */
|
||||||
|
|
||||||
|
|
||||||
|
// Structure de données pour l'émission ou la réception I2C :
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
char SlaveAdress7bits; // l'adresse I2C du slave device
|
||||||
|
char * Ptr_Data; // l'adresse du début de tableau char à recevoir/émettre (tableau en RAM uC)
|
||||||
|
char Nb_Data; // le nbre d'octets à envoyer / recevoir
|
||||||
|
}
|
||||||
|
MyI2C_RecSendData_Typedef;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief|Start Cond |@6|@5|@4|@3|@2|@1|@0| Wr =0 |Slave ACK|
|
||||||
|
|pt7|pt6|pt5|pt4|pt3|pt2|pt1|pt0|Slave ACK|
|
||||||
|
|d7|d6|d5|d4|d3|d2|d1|d0|Slave ACK| (data 1)
|
||||||
|
.....
|
||||||
|
|d7|d6|d5|d4|d3|d2|d1|d0|Salve ACK|Stop Cond| (data N)
|
||||||
|
|
||||||
|
* @param I2Cx: where x can be 1 or 2 to select the I2C peripheral.
|
||||||
|
* @param PteurAdress = adresse de démarrage écriture à l'interieur du slave I2C
|
||||||
|
* @param DataToSend, adresse de la structure qui contient les informations à transmettre
|
||||||
|
voir définition MyI2C_RecSendData_Typedef
|
||||||
|
* @retval None
|
||||||
|
* @Example MyI2C_PutString(I2C1,0xAA, &MyI2C_SendTimeData);
|
||||||
|
* Ecrit dans le slave câblé sur I2C1 à partir de l'@ mémoire interne Slave 0xAA
|
||||||
|
|
||||||
|
*/
|
||||||
|
void MyI2C_PutString(I2C_TypeDef * I2Cx, char PteurAdress, MyI2C_RecSendData_Typedef * DataToSend);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*=========================================================================================
|
||||||
|
Réception I2C : GetString
|
||||||
|
========================================================================================= */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief |Start Cond |@6|@5|@4|@3|@2|@1|@0| Wr =0 |Slave ACK|
|
||||||
|
|pt7|pt6|pt5|pt4|pt3|pt2|pt1|pt0|Slave ACK|
|
||||||
|
|ReStart Cond |@6|@5|@4|@3|@2|@1|@0| Wr =1 |Slave ACK|
|
||||||
|
|d7|d6|d5|d4|d3|d2|d1|d0|Master ACK| (data 1)
|
||||||
|
.....
|
||||||
|
|d7|d6|d5|d4|d3|d2|d1|d0|Master NACK|Stop Cond| (data N)
|
||||||
|
|
||||||
|
* @param I2Cx: where x can be 1 or 2 to select the I2C peripheral.
|
||||||
|
* @param PteurAdress = adresse de démarrage lecture à l'interieur du slave I2C
|
||||||
|
* @param DataToSend, adresse de la structure qui contient les informations nécessaires à la
|
||||||
|
réception des données voir définition MyI2C_RecSendData_Typedef
|
||||||
|
* @retval None
|
||||||
|
* @Example MyI2C_GetString(I2C1,0xAA, &MyI2C_RecevievedTimeData);
|
||||||
|
Lit dans le slave câblé sur I2C1 à partir de l'@ mémoire interne Slave 0xAA
|
||||||
|
*/
|
||||||
|
void MyI2C_GetString(I2C_TypeDef * I2Cx, char PteurAdress, MyI2C_RecSendData_Typedef * DataToReceive);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
145
Drivers/Inc/MySPI.h
Normal file
145
Drivers/Inc/MySPI.h
Normal file
|
@ -0,0 +1,145 @@
|
||||||
|
|
||||||
|
#ifndef INC_MYSPI_H_
|
||||||
|
#define INC_MYSPI_H_
|
||||||
|
|
||||||
|
#include "stm32f10x.h"
|
||||||
|
|
||||||
|
#define DATAX0 0x32
|
||||||
|
#define DATAX1 0x33
|
||||||
|
#define DATAY0 0x34
|
||||||
|
#define DATAY1 0x35
|
||||||
|
#define DATAZ0 0x36
|
||||||
|
#define DATAZ1 0x37
|
||||||
|
#define DATA_FORMAT 0x31
|
||||||
|
#define BW_RATE 0x2C
|
||||||
|
#define POWER_CTL 0x2D
|
||||||
|
#define READ_MB 0xC0
|
||||||
|
#define WRITE_MB 0x40
|
||||||
|
#define READ 0x80
|
||||||
|
#define WRITE 0x00
|
||||||
|
|
||||||
|
|
||||||
|
/*************************************************************************************
|
||||||
|
===================== By Periph team INSA GEI 2022 ===========================
|
||||||
|
*************************************************************************************/
|
||||||
|
|
||||||
|
/*
|
||||||
|
*************************************************************************************
|
||||||
|
===================== I2C les IO STM32F103 =================================
|
||||||
|
*************************************************************************************
|
||||||
|
Les IO sont pris en charge par la lib, pas besoin de faire les configurations
|
||||||
|
|
||||||
|
|
||||||
|
Sur la Nucléo , le SPI1 est perturbé par la LED2 (PA5), mais doit pouvoir subir les front SCK qd même (LED clignote vite..)
|
||||||
|
le SPI2 n'est pas utilisable car pin non connectées par défaut (sauf à modifier les SB). En fait la Nucléo fait un choix entre SPI1
|
||||||
|
et SPI2 par soudage jumper (SB).
|
||||||
|
|
||||||
|
-> Utiliser SPI1 avec la carte Nucléo
|
||||||
|
|
||||||
|
* **IO SPI 1**
|
||||||
|
SPI1_NSS PA4
|
||||||
|
SPI1_SCK PA5
|
||||||
|
SPI1_MISO PA6
|
||||||
|
SPI1_MOSI PA7
|
||||||
|
|
||||||
|
**IO SPI 2**
|
||||||
|
SPI2_NSS PB12
|
||||||
|
SPI2_SCK PB13
|
||||||
|
SPI2_MISO PB14
|
||||||
|
SPI2_MOSI PB15
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
*************************************************************************************
|
||||||
|
==================== Fondamentaux SPI ==========================================
|
||||||
|
*************************************************************************************
|
||||||
|
- Bus Synchrone, 4 fils (même si on peut l'utiliser en 3 fils)
|
||||||
|
- Transfert à l'octet
|
||||||
|
- Protocole entre un Master (contrôle SCK) et un Slave
|
||||||
|
- SCK permet de synchroniser les bits de chaque octet. Il se configure par :
|
||||||
|
* son niveau de repos : ici niveau '1'
|
||||||
|
* le front actif de synchronisation pour chaque bit : ici front montant (front up durant bit stable)
|
||||||
|
- /CS ou /NSS active le slave sur l'état bas
|
||||||
|
- MOSI : Master Out Slave In (donc data circulant du Master vers le Slave, donc écriture dans le Slave)
|
||||||
|
- MISO : Master In Slave Out (donc data circulant du Slave vers le Master, donc lecture du Slave)
|
||||||
|
|
||||||
|
Bien que la lib propose une fonction d'écriture et de lecture :
|
||||||
|
* une écriture s'accompagne obligatoirement d'une lecture (bidon)
|
||||||
|
* une lecture s'accompagne obligatoirement d'une écriture (bidon)
|
||||||
|
La gestion /CS = /NSS se fait "à la main". On peut alors lire toute une série d'octets
|
||||||
|
en laissant /CS à l'état bas pendant toute la durée de circulation des octets.
|
||||||
|
|
||||||
|
|
||||||
|
*************************************************************************************
|
||||||
|
==================== La lib SPI ==========================================
|
||||||
|
*************************************************************************************
|
||||||
|
|
||||||
|
fonctions essentielles :
|
||||||
|
|
||||||
|
MySPI_Init
|
||||||
|
MySPI_Send
|
||||||
|
MySPI_Read
|
||||||
|
MySPI_Set_NSS
|
||||||
|
MySPI_Clear_NSS
|
||||||
|
|
||||||
|
|
||||||
|
==========================================================================================*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*=========================================================================================
|
||||||
|
INITIALISATION SPI
|
||||||
|
========================================================================================= */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Configure le SPI spécifié : FSCK = 281kHz, Repos SCK = '1', Front actif = up
|
||||||
|
Gestion /CS logicielle à part, configure les 4 IO
|
||||||
|
- SCK, MOSI : Out Alt push pull
|
||||||
|
- MISO : floating input
|
||||||
|
- /NSS (/CS) : Out push pull
|
||||||
|
* @param SPI_TypeDef * SPI : SPI1 ou SPI2
|
||||||
|
*/
|
||||||
|
void MySPI_Init(SPI_TypeDef * SPI);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Envoie un octet (/CS non géré, à faire logiciellement)
|
||||||
|
Plus en détail, émission de l'octet souhaité sur MOSI
|
||||||
|
Lecture en même temps d'un octet poubelle sur MISO (non exploité)
|
||||||
|
* @param : char ByteToSend : l'octet à envoyer
|
||||||
|
*/
|
||||||
|
void MySPI_Send(char ByteToSend);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Reçoit un octet (/CS non géré, à faire logiciellement)
|
||||||
|
Plus en détail, émission d'un octet bidon sur MOSI (0x00)
|
||||||
|
pour élaborer les 8 fronts sur SCK et donc piloter le slave en lecture
|
||||||
|
qui répond sur MISO
|
||||||
|
* @param : none
|
||||||
|
* @retval : l'octet lu.
|
||||||
|
*/
|
||||||
|
char MySPI_Read(void);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Positionne /CS = /NSS à '1'. A utiliser pour borner les octets à transmettre/recevoir
|
||||||
|
* @param : none
|
||||||
|
*/
|
||||||
|
void MySPI_Set_NSS(void);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Positionne /CS = /NSS à '0'. A utiliser pour borner les octets à transmettre/recevoir
|
||||||
|
* @param :none
|
||||||
|
*/
|
||||||
|
void MySPI_Clear_NSS(void);
|
||||||
|
|
||||||
|
#endif
|
|
@ -77,7 +77,6 @@ void MyPWM_Duty (TIM_TypeDef * Timer,char Channel, unsigned short CRR )
|
||||||
if(Channel==3)
|
if(Channel==3)
|
||||||
{
|
{
|
||||||
Timer->CCR3=CRR;
|
Timer->CCR3=CRR;
|
||||||
|
|
||||||
}
|
}
|
||||||
if(Channel==4)
|
if(Channel==4)
|
||||||
{
|
{
|
||||||
|
@ -124,16 +123,10 @@ void init_encoder_timer(void (*IT_function)(void)) //voir page 391
|
||||||
GPIO_PB6.GPIO_Conf = In_Floating;
|
GPIO_PB6.GPIO_Conf = In_Floating;
|
||||||
GPIO_PB6.GPIO_Pin = 6;
|
GPIO_PB6.GPIO_Pin = 6;
|
||||||
|
|
||||||
|
|
||||||
GPIO_PB7.GPIO = GPIOB;
|
GPIO_PB7.GPIO = GPIOB;
|
||||||
GPIO_PB7.GPIO_Conf = In_Floating;
|
GPIO_PB7.GPIO_Conf = In_Floating;
|
||||||
GPIO_PB7.GPIO_Pin = 7;
|
GPIO_PB7.GPIO_Pin = 7;
|
||||||
|
|
||||||
|
|
||||||
/*GPIO_PC3.GPIO = GPIOC;
|
|
||||||
GPIO_PC3.GPIO_Conf = In_Floating;
|
|
||||||
GPIO_PC3.GPIO_Pin = 3;*/
|
|
||||||
|
|
||||||
Timer.Timer=TIM4;
|
Timer.Timer=TIM4;
|
||||||
Timer.ARR = 719;
|
Timer.ARR = 719;
|
||||||
Timer.PSC = 0;
|
Timer.PSC = 0;
|
||||||
|
@ -144,10 +137,6 @@ void init_encoder_timer(void (*IT_function)(void)) //voir page 391
|
||||||
|
|
||||||
MyGPIO_Init (&GPIO_PB7);
|
MyGPIO_Init (&GPIO_PB7);
|
||||||
|
|
||||||
//MyGPIO_Init (&GPIO_PC3);
|
|
||||||
|
|
||||||
//MyGPIO_ActiveIT (GPIO_PC3.GPIO, GPIO_PC3.GPIO_Pin, 4, IT_function);
|
|
||||||
|
|
||||||
TIM4-> SMCR &= ~0x0007;
|
TIM4-> SMCR &= ~0x0007;
|
||||||
TIM4-> SMCR |= TIM_SMCR_SMS_1;
|
TIM4-> SMCR |= TIM_SMCR_SMS_1;
|
||||||
TIM4-> CCMR1 &= ~0xF2F2; // Mise à 0 des CC1S, CC2S, IC1F et IC2F
|
TIM4-> CCMR1 &= ~0xF2F2; // Mise à 0 des CC1S, CC2S, IC1F et IC2F
|
||||||
|
@ -156,7 +145,6 @@ void init_encoder_timer(void (*IT_function)(void)) //voir page 391
|
||||||
TIM4-> CCER &= TIM_CCER_CC1P;
|
TIM4-> CCER &= TIM_CCER_CC1P;
|
||||||
TIM4-> CCER &= TIM_CCER_CC2P;
|
TIM4-> CCER &= TIM_CCER_CC2P;
|
||||||
TIM4-> CR1 |= TIM_CR1_CEN;
|
TIM4-> CR1 |= TIM_CR1_CEN;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Reset_degree (void)
|
void Reset_degree (void)
|
||||||
|
|
|
@ -33,6 +33,7 @@ void UART_send(char data)
|
||||||
{
|
{
|
||||||
while(!(USART1->SR & USART_SR_TXE)) // Tant que le buffer d'envoi n'est pas vide, on n'envoie pas plus de données
|
while(!(USART1->SR & USART_SR_TXE)) // Tant que le buffer d'envoi n'est pas vide, on n'envoie pas plus de données
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
USART1->DR = data; // Ecriture de la donnée dans le registre DR
|
USART1->DR = data; // Ecriture de la donnée dans le registre DR
|
||||||
}
|
}
|
||||||
|
@ -49,7 +50,7 @@ void USART1_IRQHandler()
|
||||||
{
|
{
|
||||||
if (USART1->SR & USART_SR_RXNE)
|
if (USART1->SR & USART_SR_RXNE)
|
||||||
{
|
{
|
||||||
USART1->SR &= ~USART_SR_RXNE; // On abaisse le flag d'interruption
|
//USART1->SR &= ~USART_SR_RXNE; // On abaisse le flag d'interruption
|
||||||
if(uart_rx_ptr_func!=0)
|
if(uart_rx_ptr_func!=0)
|
||||||
{
|
{
|
||||||
(*uart_rx_ptr_func)();
|
(*uart_rx_ptr_func)();
|
||||||
|
|
|
@ -1,49 +0,0 @@
|
||||||
#include "stm32f10x.h"
|
|
||||||
#include "GPIO.h"
|
|
||||||
#include "TIMER.h"
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void MyFunction_IT (void);
|
|
||||||
MyGPIO_Struct_TypeDef PA5;
|
|
||||||
MyGPIO_Struct_TypeDef PA6;
|
|
||||||
MyGPIO_Struct_TypeDef PC13;
|
|
||||||
MyTimer_Struct_TypeDef timer3;
|
|
||||||
//PA5 LED
|
|
||||||
//PC13 Bouton
|
|
||||||
|
|
||||||
int main ( void )
|
|
||||||
{
|
|
||||||
PA5.GPIO=GPIOA;
|
|
||||||
PA5.GPIO_Conf=Out_Ppull;
|
|
||||||
PA5.GPIO_Pin=5;
|
|
||||||
MyGPIO_Init(&PA5);
|
|
||||||
PA6.GPIO=GPIOA;
|
|
||||||
PA6.GPIO_Conf=AltOut_Ppull;
|
|
||||||
PA6.GPIO_Pin=6;
|
|
||||||
MyGPIO_Init(&PA6);
|
|
||||||
|
|
||||||
timer3.Timer=TIM3;
|
|
||||||
timer3.ARR=35999; //pour avoir 500ms
|
|
||||||
timer3.PSC=1000;
|
|
||||||
MyTimer_Base_Init(&timer3);
|
|
||||||
MyTimer_ActiveIT(timer3.Timer,1, &MyFunction_IT);
|
|
||||||
MyTimer_Base_Start(timer3.Timer);
|
|
||||||
|
|
||||||
MyPWM_init (TIM3,1);
|
|
||||||
MyPWM_Duty (TIM3,1, 10000);
|
|
||||||
|
|
||||||
|
|
||||||
while(1)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void MyFunction_IT (void)
|
|
||||||
{
|
|
||||||
MyGPIO_Toggle(PA5.GPIO,5);
|
|
||||||
}
|
|
11
Projet_voile/Includes/CAP_voilier.h
Normal file
11
Projet_voile/Includes/CAP_voilier.h
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
#ifndef CAP_voilier_H
|
||||||
|
#define CAP_voilier_H
|
||||||
|
|
||||||
|
#include "UART.h"
|
||||||
|
#include "TIMER.h"
|
||||||
|
#include "GPIO.h"
|
||||||
|
|
||||||
|
void My_cap_init(void);
|
||||||
|
void Madirection_IT (void);
|
||||||
|
|
||||||
|
#endif
|
|
@ -3,6 +3,7 @@
|
||||||
#include "stm32f10x.h"
|
#include "stm32f10x.h"
|
||||||
#include "GPIO.h"
|
#include "GPIO.h"
|
||||||
#include "TIMER.h"
|
#include "TIMER.h"
|
||||||
|
#include "Rouli.h"
|
||||||
|
|
||||||
void init_pwm_voile(void);
|
void init_pwm_voile(void);
|
||||||
|
|
||||||
|
|
23
Projet_voile/Includes/Rouli.h
Normal file
23
Projet_voile/Includes/Rouli.h
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
#ifndef ROULI_H
|
||||||
|
#define ROULI_H
|
||||||
|
|
||||||
|
#include "stm32f10x.h"
|
||||||
|
#include "GPIO.h"
|
||||||
|
#include "TIMER.h"
|
||||||
|
#include "MySPI.h"
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
float gX;
|
||||||
|
float gY;
|
||||||
|
float gZ;
|
||||||
|
|
||||||
|
}XYZ;
|
||||||
|
|
||||||
|
void rouli_InitAccel(void);
|
||||||
|
|
||||||
|
void rouli_GetAccel (XYZ * axe);
|
||||||
|
|
||||||
|
void rouli_IT_Bascule(void);
|
||||||
|
|
||||||
|
#endif
|
52
Projet_voile/Sources/CAP_voilier.c
Normal file
52
Projet_voile/Sources/CAP_voilier.c
Normal file
|
@ -0,0 +1,52 @@
|
||||||
|
#include "CAP_voilier.h"
|
||||||
|
|
||||||
|
MyTimer_Struct_TypeDef timer1;
|
||||||
|
void Madirection_IT (void);
|
||||||
|
signed char direction ;
|
||||||
|
int duty_cap ;
|
||||||
|
MyGPIO_Struct_TypeDef PA8;
|
||||||
|
MyGPIO_Struct_TypeDef PB1;
|
||||||
|
char valeur =0;
|
||||||
|
extern char MyChar;
|
||||||
|
|
||||||
|
|
||||||
|
void My_cap_init(void)
|
||||||
|
{
|
||||||
|
PA8.GPIO=GPIOA;
|
||||||
|
PA8.GPIO_Conf=AltOut_Ppull;
|
||||||
|
PA8.GPIO_Pin=8;
|
||||||
|
MyGPIO_Init(&PA8);
|
||||||
|
|
||||||
|
PB1.GPIO=GPIOB;
|
||||||
|
PB1.GPIO_Conf=Out_Ppull;
|
||||||
|
PB1.GPIO_Pin=1;
|
||||||
|
MyGPIO_Init(&PB1);
|
||||||
|
|
||||||
|
timer1.Timer=TIM1;
|
||||||
|
timer1.ARR=100; //pour avoir 20Khz et un PWM a 100 positions
|
||||||
|
timer1.PSC=36;
|
||||||
|
MyTimer_Base_Init(&timer1);
|
||||||
|
MyTimer_Base_Start(timer1.Timer);
|
||||||
|
MyPWM_init(timer1.Timer,1);
|
||||||
|
MyUART_init();
|
||||||
|
|
||||||
|
MyUART_ActiveIT(1,&Madirection_IT);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void Madirection_IT (void)
|
||||||
|
{
|
||||||
|
direction = UART_receive();
|
||||||
|
if( direction <0 )
|
||||||
|
{
|
||||||
|
MyGPIO_Set(GPIOB,1);
|
||||||
|
valeur =-direction;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
MyGPIO_Reset(GPIOB,1);
|
||||||
|
valeur = direction;
|
||||||
|
}
|
||||||
|
duty_cap=valeur;
|
||||||
|
MyPWM_Duty(timer1.Timer,1, duty_cap );
|
||||||
|
}
|
|
@ -6,16 +6,24 @@
|
||||||
#include "TIMER.h"
|
#include "TIMER.h"
|
||||||
#include "Girouette.h"
|
#include "Girouette.h"
|
||||||
#include "Pwm_voile.h"
|
#include "Pwm_voile.h"
|
||||||
|
#include "MyI2C.h"
|
||||||
|
#include "MySPI.h"
|
||||||
|
#include "CAP_voilier.h"
|
||||||
|
|
||||||
char MyChar;
|
char MyChar;
|
||||||
|
|
||||||
|
char X0,X1,Y0,Y1,Z0,Z1;
|
||||||
|
char read_DATA,read_BWR,read_PWRC;
|
||||||
|
int16_t gX,gY,gZ;
|
||||||
|
int test =0;
|
||||||
|
|
||||||
//MyGPIO_Struct_TypeDef PA5; //PA5 LED
|
//MyGPIO_Struct_TypeDef PA5; //PA5 LED
|
||||||
//MyGPIO_Struct_TypeDef PC13; //PC13 Bouton
|
//MyGPIO_Struct_TypeDef PC13; //PC13 Bouton
|
||||||
|
|
||||||
void UART_RX_IT (void)
|
//void UART_RX_IT (void)
|
||||||
{
|
//{
|
||||||
MyChar=UART_receive();
|
// MyChar=UART_receive();
|
||||||
}
|
//}
|
||||||
|
|
||||||
int main ( void )
|
int main ( void )
|
||||||
{
|
{
|
||||||
|
@ -27,13 +35,24 @@ int main ( void )
|
||||||
|
|
||||||
init_girouette();
|
init_girouette();
|
||||||
init_pwm_voile();
|
init_pwm_voile();
|
||||||
|
MySPI_Init(SPI1);
|
||||||
|
rouli_InitAccel();
|
||||||
|
My_cap_init();
|
||||||
|
|
||||||
|
MySPI_Send(READ|DATA_FORMAT);
|
||||||
|
read_DATA = MySPI_Read();
|
||||||
|
MySPI_Send(READ|BW_RATE);
|
||||||
|
read_BWR = MySPI_Read();
|
||||||
|
MySPI_Send(READ|POWER_CTL);
|
||||||
|
read_PWRC = MySPI_Read();
|
||||||
|
|
||||||
|
// MyUART_init();
|
||||||
|
// MyUART_ActiveIT(1, &UART_RX_IT); //mode permet d'activer soit l'interruption sur TX
|
||||||
|
|
||||||
MyUART_init();
|
|
||||||
MyUART_ActiveIT(1, &UART_RX_IT); //mode permet d'activer soit l'interruption sur TX
|
|
||||||
while(1)
|
while(1)
|
||||||
{
|
{
|
||||||
Test_tour_girouette();
|
Test_tour_girouette();
|
||||||
//Orientation_voiles();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2,11 +2,19 @@
|
||||||
|
|
||||||
MyTimer_Struct_TypeDef Timer2, Timer3;
|
MyTimer_Struct_TypeDef Timer2, Timer3;
|
||||||
MyGPIO_Struct_TypeDef PB0;
|
MyGPIO_Struct_TypeDef PB0;
|
||||||
|
XYZ mesures;
|
||||||
|
|
||||||
void write_pwm(void)
|
void write_pwm(void)
|
||||||
{
|
{
|
||||||
int val_pwm;
|
int val_pwm;
|
||||||
float cnt;
|
float cnt;
|
||||||
|
rouli_GetAccel(&mesures);
|
||||||
|
if((mesures.gY <= (-0.7)) || (mesures.gY >= 0.7))
|
||||||
|
{
|
||||||
|
val_pwm = 720;//0.985ms
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
cnt=Read_CNT();
|
cnt=Read_CNT();
|
||||||
if(cnt>=360)
|
if(cnt>=360)
|
||||||
{
|
{
|
||||||
|
@ -17,15 +25,16 @@ void write_pwm(void)
|
||||||
{
|
{
|
||||||
val_pwm=2*(Timer3.ARR/20)-((Timer3.ARR/20)*(cnt/360.0));
|
val_pwm=2*(Timer3.ARR/20)-((Timer3.ARR/20)*(cnt/360.0));
|
||||||
}
|
}
|
||||||
//Timer3.ARR/20 --> 1ms, pour controler le moteur c'est entre 1ms et 2ms
|
}
|
||||||
//calcul angle en pwm
|
|
||||||
MyPWM_Duty(Timer3.Timer,3,val_pwm);
|
MyPWM_Duty(Timer3.Timer,3,val_pwm);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void init_pwm_voile(void)
|
void init_pwm_voile(void)
|
||||||
{
|
{
|
||||||
Timer2.Timer=TIM2;
|
Timer2.Timer=TIM2;
|
||||||
Timer2.ARR=1800;
|
Timer2.ARR=18000;
|
||||||
Timer2.PSC=1000;
|
Timer2.PSC=1000;
|
||||||
MyTimer_Base_Init(&Timer2);
|
MyTimer_Base_Init(&Timer2);
|
||||||
MyTimer_ActiveIT(Timer2.Timer,2,&write_pwm);
|
MyTimer_ActiveIT(Timer2.Timer,2,&write_pwm);
|
||||||
|
@ -42,3 +51,4 @@ void init_pwm_voile(void)
|
||||||
MyTimer_Base_Start(Timer3.Timer);
|
MyTimer_Base_Start(Timer3.Timer);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
43
Projet_voile/Sources/Rouli.c
Normal file
43
Projet_voile/Sources/Rouli.c
Normal file
|
@ -0,0 +1,43 @@
|
||||||
|
#include "Rouli.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* Dans cette partie nous allons traiter le roulis du voiluier */
|
||||||
|
|
||||||
|
void rouli_InitAccel(void)
|
||||||
|
{
|
||||||
|
MySPI_Clear_NSS();
|
||||||
|
/* Init de l'accelerometre avec SPI */
|
||||||
|
MySPI_Send(WRITE|DATA_FORMAT); /* Ecriture dans le data Format */
|
||||||
|
MySPI_Send(0x0B); /* Envoi des param<61>tres */
|
||||||
|
MySPI_Send(WRITE|BW_RATE); /* Ecriture dans le BW rate */
|
||||||
|
MySPI_Send(0x0A); /* Envoi des param<61>tres */
|
||||||
|
MySPI_Send(WRITE|POWER_CTL); /* Ecriture dans le POWER_CTL */
|
||||||
|
MySPI_Send(0x08); /* Envoi des param<61>tre */
|
||||||
|
MySPI_Set_NSS();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void rouli_GetAccel (XYZ * axe)
|
||||||
|
{
|
||||||
|
char X0,X1,Y0,Y1,Z0,Z1;
|
||||||
|
|
||||||
|
MySPI_Clear_NSS();
|
||||||
|
|
||||||
|
MySPI_Send(READ_MB|DATAX0);
|
||||||
|
|
||||||
|
X0 = MySPI_Read () ;
|
||||||
|
X1 = MySPI_Read () ;
|
||||||
|
Y0 = MySPI_Read () ;
|
||||||
|
Y1 = MySPI_Read () ;
|
||||||
|
Z0 = MySPI_Read () ;
|
||||||
|
Z1 = MySPI_Read () ;
|
||||||
|
MySPI_Set_NSS();
|
||||||
|
|
||||||
|
axe->gX = ((short int)((X1<<8)|X0))*0.004;
|
||||||
|
axe->gY = ((short int)((Y1<<8)|Y0))*0.004;
|
||||||
|
axe->gZ = ((short int)((Z1<<8)|Z0))*0.004;
|
||||||
|
}
|
||||||
|
|
||||||
|
// axe y entre -0.7 et 0.7
|
||||||
|
|
|
@ -125,7 +125,7 @@
|
||||||
<SetRegEntry>
|
<SetRegEntry>
|
||||||
<Number>0</Number>
|
<Number>0</Number>
|
||||||
<Key>DLGDARM</Key>
|
<Key>DLGDARM</Key>
|
||||||
<Name>(1010=710,304,1086,861,1)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)(100=-1,-1,-1,-1,0)(110=-1,-1,-1,-1,0)(111=-1,-1,-1,-1,0)(1011=-1,-1,-1,-1,0)(180=-1,-1,-1,-1,0)(120=1161,471,1582,898,1)(121=-1,-1,-1,-1,0)(122=1317,323,1738,750,0)(123=-1,-1,-1,-1,0)(140=1117,100,1805,440,1)(240=263,238,662,583,1)(190=-1,-1,-1,-1,0)(200=-1,-1,-1,-1,0)(170=-1,-1,-1,-1,0)(130=-1,-1,-1,-1,0)(131=-1,-1,-1,-1,0)(132=-1,-1,-1,-1,0)(133=-1,-1,-1,-1,0)(160=-1,-1,-1,-1,0)(161=-1,-1,-1,-1,0)(162=-1,-1,-1,-1,0)(210=-1,-1,-1,-1,0)(211=-1,-1,-1,-1,0)(220=-1,-1,-1,-1,0)(221=-1,-1,-1,-1,0)(230=-1,-1,-1,-1,0)(234=-1,-1,-1,-1,0)(231=-1,-1,-1,-1,0)(232=-1,-1,-1,-1,0)(233=-1,-1,-1,-1,0)(150=-1,-1,-1,-1,0)(151=-1,-1,-1,-1,0)</Name>
|
<Name>(1010=710,304,1086,861,1)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)(100=-1,-1,-1,-1,0)(110=-1,-1,-1,-1,0)(111=-1,-1,-1,-1,0)(1011=-1,-1,-1,-1,0)(180=-1,-1,-1,-1,0)(120=1161,471,1582,898,1)(121=1064,158,1485,585,1)(122=1317,323,1738,750,0)(123=-1,-1,-1,-1,0)(140=1117,100,1805,440,1)(240=263,238,662,583,1)(190=-1,-1,-1,-1,0)(200=-1,-1,-1,-1,0)(170=-1,-1,-1,-1,0)(130=150,186,744,937,1)(131=-1,-1,-1,-1,0)(132=-1,-1,-1,-1,0)(133=-1,-1,-1,-1,0)(160=-1,-1,-1,-1,0)(161=-1,-1,-1,-1,0)(162=-1,-1,-1,-1,0)(210=-1,-1,-1,-1,0)(211=-1,-1,-1,-1,0)(220=-1,-1,-1,-1,0)(221=-1,-1,-1,-1,0)(230=-1,-1,-1,-1,0)(234=-1,-1,-1,-1,0)(231=-1,-1,-1,-1,0)(232=-1,-1,-1,-1,0)(233=-1,-1,-1,-1,0)(150=-1,-1,-1,-1,0)(151=-1,-1,-1,-1,0)</Name>
|
||||||
</SetRegEntry>
|
</SetRegEntry>
|
||||||
<SetRegEntry>
|
<SetRegEntry>
|
||||||
<Number>0</Number>
|
<Number>0</Number>
|
||||||
|
@ -144,7 +144,7 @@
|
||||||
<Type>0</Type>
|
<Type>0</Type>
|
||||||
<LineNumber>90</LineNumber>
|
<LineNumber>90</LineNumber>
|
||||||
<EnabledFlag>1</EnabledFlag>
|
<EnabledFlag>1</EnabledFlag>
|
||||||
<Address>134218190</Address>
|
<Address>134219870</Address>
|
||||||
<ByteObject>0</ByteObject>
|
<ByteObject>0</ByteObject>
|
||||||
<HtxType>0</HtxType>
|
<HtxType>0</HtxType>
|
||||||
<ManyObjects>0</ManyObjects>
|
<ManyObjects>0</ManyObjects>
|
||||||
|
@ -160,7 +160,7 @@
|
||||||
<Type>0</Type>
|
<Type>0</Type>
|
||||||
<LineNumber>100</LineNumber>
|
<LineNumber>100</LineNumber>
|
||||||
<EnabledFlag>1</EnabledFlag>
|
<EnabledFlag>1</EnabledFlag>
|
||||||
<Address>134218154</Address>
|
<Address>134219834</Address>
|
||||||
<ByteObject>0</ByteObject>
|
<ByteObject>0</ByteObject>
|
||||||
<HtxType>0</HtxType>
|
<HtxType>0</HtxType>
|
||||||
<ManyObjects>0</ManyObjects>
|
<ManyObjects>0</ManyObjects>
|
||||||
|
@ -180,7 +180,7 @@
|
||||||
<periodic>1</periodic>
|
<periodic>1</periodic>
|
||||||
<aLwin>1</aLwin>
|
<aLwin>1</aLwin>
|
||||||
<aCover>0</aCover>
|
<aCover>0</aCover>
|
||||||
<aSer1>1</aSer1>
|
<aSer1>0</aSer1>
|
||||||
<aSer2>0</aSer2>
|
<aSer2>0</aSer2>
|
||||||
<aPa>0</aPa>
|
<aPa>0</aPa>
|
||||||
<viewmode>1</viewmode>
|
<viewmode>1</viewmode>
|
||||||
|
@ -192,7 +192,7 @@
|
||||||
<AscS3>0</AscS3>
|
<AscS3>0</AscS3>
|
||||||
<aSer3>0</aSer3>
|
<aSer3>0</aSer3>
|
||||||
<eProf>0</eProf>
|
<eProf>0</eProf>
|
||||||
<aLa>1</aLa>
|
<aLa>0</aLa>
|
||||||
<aPa1>0</aPa1>
|
<aPa1>0</aPa1>
|
||||||
<AscS4>0</AscS4>
|
<AscS4>0</AscS4>
|
||||||
<aSer4>0</aSer4>
|
<aSer4>0</aSer4>
|
||||||
|
@ -328,7 +328,7 @@
|
||||||
<SetRegEntry>
|
<SetRegEntry>
|
||||||
<Number>0</Number>
|
<Number>0</Number>
|
||||||
<Key>DLGTARM</Key>
|
<Key>DLGTARM</Key>
|
||||||
<Name>(1010=457,337,833,894,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)(100=-1,-1,-1,-1,0)(110=-1,-1,-1,-1,0)(111=-1,-1,-1,-1,0)(1011=-1,-1,-1,-1,0)(180=-1,-1,-1,-1,0)(120=1002,18,1423,423,0)(121=235,274,656,679,1)(122=353,663,774,1068,0)(123=-1,-1,-1,-1,0)(140=1031,78,1719,418,0)(240=1050,425,1449,770,0)(190=-1,-1,-1,-1,0)(200=-1,-1,-1,-1,0)(170=-1,-1,-1,-1,0)(130=-1,-1,-1,-1,0)(131=-1,-1,-1,-1,0)(132=377,147,971,841,1)(133=139,242,733,936,0)(160=-1,-1,-1,-1,0)(161=-1,-1,-1,-1,0)(162=-1,-1,-1,-1,0)(210=-1,-1,-1,-1,0)(211=-1,-1,-1,-1,0)(220=-1,-1,-1,-1,0)(221=-1,-1,-1,-1,0)(230=-1,-1,-1,-1,0)(231=-1,-1,-1,-1,0)(232=-1,-1,-1,-1,0)(233=-1,-1,-1,-1,0)(150=-1,-1,-1,-1,0)(151=-1,-1,-1,-1,0)</Name>
|
<Name>(1010=457,337,833,894,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)(100=-1,-1,-1,-1,0)(110=-1,-1,-1,-1,0)(111=-1,-1,-1,-1,0)(1011=-1,-1,-1,-1,0)(180=-1,-1,-1,-1,0)(120=919,465,1340,870,0)(121=996,383,1417,788,0)(122=353,663,774,1068,0)(123=-1,-1,-1,-1,0)(140=1031,78,1719,418,0)(240=1050,425,1449,770,0)(190=-1,-1,-1,-1,0)(200=-1,-1,-1,-1,0)(170=-1,-1,-1,-1,0)(130=1066,271,1660,965,0)(131=-1,-1,-1,-1,0)(132=854,318,1448,1012,0)(133=139,242,733,936,0)(160=914,540,1362,954,0)(161=-1,-1,-1,-1,0)(162=-1,-1,-1,-1,0)(210=-1,-1,-1,-1,0)(211=-1,-1,-1,-1,0)(220=-1,-1,-1,-1,0)(221=-1,-1,-1,-1,0)(230=-1,-1,-1,-1,0)(231=-1,-1,-1,-1,0)(232=-1,-1,-1,-1,0)(233=-1,-1,-1,-1,0)(150=-1,-1,-1,-1,0)(151=-1,-1,-1,-1,0)</Name>
|
||||||
</SetRegEntry>
|
</SetRegEntry>
|
||||||
<SetRegEntry>
|
<SetRegEntry>
|
||||||
<Number>0</Number>
|
<Number>0</Number>
|
||||||
|
@ -358,6 +358,16 @@
|
||||||
<WinNumber>1</WinNumber>
|
<WinNumber>1</WinNumber>
|
||||||
<ItemText>cnt,0x0A</ItemText>
|
<ItemText>cnt,0x0A</ItemText>
|
||||||
</Ww>
|
</Ww>
|
||||||
|
<Ww>
|
||||||
|
<count>1</count>
|
||||||
|
<WinNumber>1</WinNumber>
|
||||||
|
<ItemText>MyChar</ItemText>
|
||||||
|
</Ww>
|
||||||
|
<Ww>
|
||||||
|
<count>2</count>
|
||||||
|
<WinNumber>1</WinNumber>
|
||||||
|
<ItemText>direction</ItemText>
|
||||||
|
</Ww>
|
||||||
</WatchWindow1>
|
</WatchWindow1>
|
||||||
<Tracepoint>
|
<Tracepoint>
|
||||||
<THDelay>0</THDelay>
|
<THDelay>0</THDelay>
|
||||||
|
@ -379,7 +389,7 @@
|
||||||
<AscS3>0</AscS3>
|
<AscS3>0</AscS3>
|
||||||
<aSer3>0</aSer3>
|
<aSer3>0</aSer3>
|
||||||
<eProf>0</eProf>
|
<eProf>0</eProf>
|
||||||
<aLa>1</aLa>
|
<aLa>0</aLa>
|
||||||
<aPa1>0</aPa1>
|
<aPa1>0</aPa1>
|
||||||
<AscS4>0</AscS4>
|
<AscS4>0</AscS4>
|
||||||
<aSer4>0</aSer4>
|
<aSer4>0</aSer4>
|
||||||
|
@ -401,12 +411,6 @@
|
||||||
<pszMrulep></pszMrulep>
|
<pszMrulep></pszMrulep>
|
||||||
<pSingCmdsp></pSingCmdsp>
|
<pSingCmdsp></pSingCmdsp>
|
||||||
<pMultCmdsp></pMultCmdsp>
|
<pMultCmdsp></pMultCmdsp>
|
||||||
<SystemViewers>
|
|
||||||
<Entry>
|
|
||||||
<Name>System Viewer\TIM4</Name>
|
|
||||||
<WinId>35905</WinId>
|
|
||||||
</Entry>
|
|
||||||
</SystemViewers>
|
|
||||||
<DebugDescription>
|
<DebugDescription>
|
||||||
<Enable>1</Enable>
|
<Enable>1</Enable>
|
||||||
<EnableFlashSeq>0</EnableFlashSeq>
|
<EnableFlashSeq>0</EnableFlashSeq>
|
||||||
|
@ -439,7 +443,7 @@
|
||||||
<GroupNumber>1</GroupNumber>
|
<GroupNumber>1</GroupNumber>
|
||||||
<FileNumber>2</FileNumber>
|
<FileNumber>2</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>1</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
<bDave2>0</bDave2>
|
<bDave2>0</bDave2>
|
||||||
<PathWithFileName>.\Sources\Girouette.c</PathWithFileName>
|
<PathWithFileName>.\Sources\Girouette.c</PathWithFileName>
|
||||||
|
@ -451,7 +455,7 @@
|
||||||
<GroupNumber>1</GroupNumber>
|
<GroupNumber>1</GroupNumber>
|
||||||
<FileNumber>3</FileNumber>
|
<FileNumber>3</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>1</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
<bDave2>0</bDave2>
|
<bDave2>0</bDave2>
|
||||||
<PathWithFileName>..\DRIVERS\Src\GPIO.c</PathWithFileName>
|
<PathWithFileName>..\DRIVERS\Src\GPIO.c</PathWithFileName>
|
||||||
|
@ -463,7 +467,7 @@
|
||||||
<GroupNumber>1</GroupNumber>
|
<GroupNumber>1</GroupNumber>
|
||||||
<FileNumber>4</FileNumber>
|
<FileNumber>4</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>1</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
<bDave2>0</bDave2>
|
<bDave2>0</bDave2>
|
||||||
<PathWithFileName>..\Drivers\Src\TIMER.c</PathWithFileName>
|
<PathWithFileName>..\Drivers\Src\TIMER.c</PathWithFileName>
|
||||||
|
@ -499,7 +503,7 @@
|
||||||
<GroupNumber>1</GroupNumber>
|
<GroupNumber>1</GroupNumber>
|
||||||
<FileNumber>7</FileNumber>
|
<FileNumber>7</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>1</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
<bDave2>0</bDave2>
|
<bDave2>0</bDave2>
|
||||||
<PathWithFileName>.\Sources\Pwm_voile.c</PathWithFileName>
|
<PathWithFileName>.\Sources\Pwm_voile.c</PathWithFileName>
|
||||||
|
@ -507,6 +511,42 @@
|
||||||
<RteFlg>0</RteFlg>
|
<RteFlg>0</RteFlg>
|
||||||
<bShared>0</bShared>
|
<bShared>0</bShared>
|
||||||
</File>
|
</File>
|
||||||
|
<File>
|
||||||
|
<GroupNumber>1</GroupNumber>
|
||||||
|
<FileNumber>8</FileNumber>
|
||||||
|
<FileType>1</FileType>
|
||||||
|
<tvExp>0</tvExp>
|
||||||
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
|
<bDave2>0</bDave2>
|
||||||
|
<PathWithFileName>.\Sources\Rouli.c</PathWithFileName>
|
||||||
|
<FilenameWithoutPath>Rouli.c</FilenameWithoutPath>
|
||||||
|
<RteFlg>0</RteFlg>
|
||||||
|
<bShared>0</bShared>
|
||||||
|
</File>
|
||||||
|
<File>
|
||||||
|
<GroupNumber>1</GroupNumber>
|
||||||
|
<FileNumber>9</FileNumber>
|
||||||
|
<FileType>1</FileType>
|
||||||
|
<tvExp>1</tvExp>
|
||||||
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
|
<bDave2>0</bDave2>
|
||||||
|
<PathWithFileName>.\Sources\CAP_voilier.c</PathWithFileName>
|
||||||
|
<FilenameWithoutPath>CAP_voilier.c</FilenameWithoutPath>
|
||||||
|
<RteFlg>0</RteFlg>
|
||||||
|
<bShared>0</bShared>
|
||||||
|
</File>
|
||||||
|
<File>
|
||||||
|
<GroupNumber>1</GroupNumber>
|
||||||
|
<FileNumber>10</FileNumber>
|
||||||
|
<FileType>4</FileType>
|
||||||
|
<tvExp>0</tvExp>
|
||||||
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
|
<bDave2>0</bDave2>
|
||||||
|
<PathWithFileName>..\Drivers\Inc\Lib_Com_Periph_2022.lib</PathWithFileName>
|
||||||
|
<FilenameWithoutPath>Lib_Com_Periph_2022.lib</FilenameWithoutPath>
|
||||||
|
<RteFlg>0</RteFlg>
|
||||||
|
<bShared>0</bShared>
|
||||||
|
</File>
|
||||||
</Group>
|
</Group>
|
||||||
|
|
||||||
<Group>
|
<Group>
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
<TargetCommonOption>
|
<TargetCommonOption>
|
||||||
<Device>STM32F103RB</Device>
|
<Device>STM32F103RB</Device>
|
||||||
<Vendor>STMicroelectronics</Vendor>
|
<Vendor>STMicroelectronics</Vendor>
|
||||||
<PackID>Keil.STM32F1xx_DFP.2.4.0</PackID>
|
<PackID>Keil.STM32F1xx_DFP.2.3.0</PackID>
|
||||||
<PackURL>http://www.keil.com/pack/</PackURL>
|
<PackURL>http://www.keil.com/pack/</PackURL>
|
||||||
<Cpu>IRAM(0x20000000,0x00005000) IROM(0x08000000,0x00020000) CPUTYPE("Cortex-M3") CLOCK(12000000) ELITTLE</Cpu>
|
<Cpu>IRAM(0x20000000,0x00005000) IROM(0x08000000,0x00020000) CPUTYPE("Cortex-M3") CLOCK(12000000) ELITTLE</Cpu>
|
||||||
<FlashUtilSpec></FlashUtilSpec>
|
<FlashUtilSpec></FlashUtilSpec>
|
||||||
|
@ -186,7 +186,6 @@
|
||||||
<RvdsVP>0</RvdsVP>
|
<RvdsVP>0</RvdsVP>
|
||||||
<RvdsMve>0</RvdsMve>
|
<RvdsMve>0</RvdsMve>
|
||||||
<RvdsCdeCp>0</RvdsCdeCp>
|
<RvdsCdeCp>0</RvdsCdeCp>
|
||||||
<nBranchProt>0</nBranchProt>
|
|
||||||
<hadIRAM2>0</hadIRAM2>
|
<hadIRAM2>0</hadIRAM2>
|
||||||
<hadIROM2>0</hadIROM2>
|
<hadIROM2>0</hadIROM2>
|
||||||
<StupSel>8</StupSel>
|
<StupSel>8</StupSel>
|
||||||
|
@ -419,6 +418,21 @@
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<FilePath>.\Sources\Pwm_voile.c</FilePath>
|
<FilePath>.\Sources\Pwm_voile.c</FilePath>
|
||||||
</File>
|
</File>
|
||||||
|
<File>
|
||||||
|
<FileName>Rouli.c</FileName>
|
||||||
|
<FileType>1</FileType>
|
||||||
|
<FilePath>.\Sources\Rouli.c</FilePath>
|
||||||
|
</File>
|
||||||
|
<File>
|
||||||
|
<FileName>CAP_voilier.c</FileName>
|
||||||
|
<FileType>1</FileType>
|
||||||
|
<FilePath>.\Sources\CAP_voilier.c</FilePath>
|
||||||
|
</File>
|
||||||
|
<File>
|
||||||
|
<FileName>Lib_Com_Periph_2022.lib</FileName>
|
||||||
|
<FileType>4</FileType>
|
||||||
|
<FilePath>..\Drivers\Inc\Lib_Com_Periph_2022.lib</FilePath>
|
||||||
|
</File>
|
||||||
</Files>
|
</Files>
|
||||||
</Group>
|
</Group>
|
||||||
<Group>
|
<Group>
|
||||||
|
@ -439,7 +453,7 @@
|
||||||
<TargetCommonOption>
|
<TargetCommonOption>
|
||||||
<Device>STM32F103RB</Device>
|
<Device>STM32F103RB</Device>
|
||||||
<Vendor>STMicroelectronics</Vendor>
|
<Vendor>STMicroelectronics</Vendor>
|
||||||
<PackID>Keil.STM32F1xx_DFP.2.4.0</PackID>
|
<PackID>Keil.STM32F1xx_DFP.2.3.0</PackID>
|
||||||
<PackURL>http://www.keil.com/pack/</PackURL>
|
<PackURL>http://www.keil.com/pack/</PackURL>
|
||||||
<Cpu>IRAM(0x20000000,0x00005000) IROM(0x08000000,0x00020000) CPUTYPE("Cortex-M3") CLOCK(12000000) ELITTLE</Cpu>
|
<Cpu>IRAM(0x20000000,0x00005000) IROM(0x08000000,0x00020000) CPUTYPE("Cortex-M3") CLOCK(12000000) ELITTLE</Cpu>
|
||||||
<FlashUtilSpec></FlashUtilSpec>
|
<FlashUtilSpec></FlashUtilSpec>
|
||||||
|
@ -609,7 +623,6 @@
|
||||||
<RvdsVP>0</RvdsVP>
|
<RvdsVP>0</RvdsVP>
|
||||||
<RvdsMve>0</RvdsMve>
|
<RvdsMve>0</RvdsMve>
|
||||||
<RvdsCdeCp>0</RvdsCdeCp>
|
<RvdsCdeCp>0</RvdsCdeCp>
|
||||||
<nBranchProt>0</nBranchProt>
|
|
||||||
<hadIRAM2>0</hadIRAM2>
|
<hadIRAM2>0</hadIRAM2>
|
||||||
<hadIROM2>0</hadIROM2>
|
<hadIROM2>0</hadIROM2>
|
||||||
<StupSel>8</StupSel>
|
<StupSel>8</StupSel>
|
||||||
|
@ -763,7 +776,7 @@
|
||||||
<MiscControls></MiscControls>
|
<MiscControls></MiscControls>
|
||||||
<Define></Define>
|
<Define></Define>
|
||||||
<Undefine></Undefine>
|
<Undefine></Undefine>
|
||||||
<IncludePath>.\Includes;..\DRIVERS\Inc</IncludePath>
|
<IncludePath>.\Includes;..\Drivers\Inc</IncludePath>
|
||||||
</VariousControls>
|
</VariousControls>
|
||||||
</Cads>
|
</Cads>
|
||||||
<Aads>
|
<Aads>
|
||||||
|
@ -842,6 +855,40 @@
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<FilePath>.\Sources\Pwm_voile.c</FilePath>
|
<FilePath>.\Sources\Pwm_voile.c</FilePath>
|
||||||
</File>
|
</File>
|
||||||
|
<File>
|
||||||
|
<FileName>Rouli.c</FileName>
|
||||||
|
<FileType>1</FileType>
|
||||||
|
<FilePath>.\Sources\Rouli.c</FilePath>
|
||||||
|
</File>
|
||||||
|
<File>
|
||||||
|
<FileName>CAP_voilier.c</FileName>
|
||||||
|
<FileType>1</FileType>
|
||||||
|
<FilePath>.\Sources\CAP_voilier.c</FilePath>
|
||||||
|
</File>
|
||||||
|
<File>
|
||||||
|
<FileName>Lib_Com_Periph_2022.lib</FileName>
|
||||||
|
<FileType>4</FileType>
|
||||||
|
<FilePath>..\Drivers\Inc\Lib_Com_Periph_2022.lib</FilePath>
|
||||||
|
<FileOption>
|
||||||
|
<CommonProperty>
|
||||||
|
<UseCPPCompiler>2</UseCPPCompiler>
|
||||||
|
<RVCTCodeConst>0</RVCTCodeConst>
|
||||||
|
<RVCTZI>0</RVCTZI>
|
||||||
|
<RVCTOtherData>0</RVCTOtherData>
|
||||||
|
<ModuleSelection>0</ModuleSelection>
|
||||||
|
<IncludeInBuild>1</IncludeInBuild>
|
||||||
|
<AlwaysBuild>2</AlwaysBuild>
|
||||||
|
<GenerateAssemblyFile>2</GenerateAssemblyFile>
|
||||||
|
<AssembleAssemblyFile>2</AssembleAssemblyFile>
|
||||||
|
<PublicsOnly>2</PublicsOnly>
|
||||||
|
<StopOnExitCode>11</StopOnExitCode>
|
||||||
|
<CustomArgument></CustomArgument>
|
||||||
|
<IncludeLibraryModules></IncludeLibraryModules>
|
||||||
|
<ComprImg>1</ComprImg>
|
||||||
|
</CommonProperty>
|
||||||
|
<FileArmAds/>
|
||||||
|
</FileOption>
|
||||||
|
</File>
|
||||||
</Files>
|
</Files>
|
||||||
</Group>
|
</Group>
|
||||||
<Group>
|
<Group>
|
||||||
|
@ -876,7 +923,7 @@
|
||||||
<file attr="config" category="header" name="RTE_Driver\Config\RTE_Device.h" version="1.1.2">
|
<file attr="config" category="header" name="RTE_Driver\Config\RTE_Device.h" version="1.1.2">
|
||||||
<instance index="0">RTE\Device\STM32F103RB\RTE_Device.h</instance>
|
<instance index="0">RTE\Device\STM32F103RB\RTE_Device.h</instance>
|
||||||
<component Cclass="Device" Cgroup="Startup" Cvendor="Keil" Cversion="1.0.0" condition="STM32F1xx CMSIS"/>
|
<component Cclass="Device" Cgroup="Startup" Cvendor="Keil" Cversion="1.0.0" condition="STM32F1xx CMSIS"/>
|
||||||
<package name="STM32F1xx_DFP" schemaVersion="1.7.2" url="http://www.keil.com/pack/" vendor="Keil" version="2.4.0"/>
|
<package name="STM32F1xx_DFP" schemaVersion="1.4.0" url="http://www.keil.com/pack/" vendor="Keil" version="2.3.0"/>
|
||||||
<targetInfos>
|
<targetInfos>
|
||||||
<targetInfo name="Réel"/>
|
<targetInfo name="Réel"/>
|
||||||
<targetInfo name="Simulé"/>
|
<targetInfo name="Simulé"/>
|
||||||
|
@ -885,7 +932,7 @@
|
||||||
<file attr="config" category="source" condition="STM32F1xx MD ARMCC" name="Device\Source\ARM\startup_stm32f10x_md.s" version="1.0.0">
|
<file attr="config" category="source" condition="STM32F1xx MD ARMCC" name="Device\Source\ARM\startup_stm32f10x_md.s" version="1.0.0">
|
||||||
<instance index="0">RTE\Device\STM32F103RB\startup_stm32f10x_md.s</instance>
|
<instance index="0">RTE\Device\STM32F103RB\startup_stm32f10x_md.s</instance>
|
||||||
<component Cclass="Device" Cgroup="Startup" Cvendor="Keil" Cversion="1.0.0" condition="STM32F1xx CMSIS"/>
|
<component Cclass="Device" Cgroup="Startup" Cvendor="Keil" Cversion="1.0.0" condition="STM32F1xx CMSIS"/>
|
||||||
<package name="STM32F1xx_DFP" schemaVersion="1.7.2" url="http://www.keil.com/pack/" vendor="Keil" version="2.4.0"/>
|
<package name="STM32F1xx_DFP" schemaVersion="1.4.0" url="http://www.keil.com/pack/" vendor="Keil" version="2.3.0"/>
|
||||||
<targetInfos>
|
<targetInfos>
|
||||||
<targetInfo name="Réel"/>
|
<targetInfo name="Réel"/>
|
||||||
<targetInfo name="Simulé"/>
|
<targetInfo name="Simulé"/>
|
||||||
|
@ -894,7 +941,7 @@
|
||||||
<file attr="config" category="source" name="Device\Source\system_stm32f10x.c" version="1.0.0">
|
<file attr="config" category="source" name="Device\Source\system_stm32f10x.c" version="1.0.0">
|
||||||
<instance index="0">RTE\Device\STM32F103RB\system_stm32f10x.c</instance>
|
<instance index="0">RTE\Device\STM32F103RB\system_stm32f10x.c</instance>
|
||||||
<component Cclass="Device" Cgroup="Startup" Cvendor="Keil" Cversion="1.0.0" condition="STM32F1xx CMSIS"/>
|
<component Cclass="Device" Cgroup="Startup" Cvendor="Keil" Cversion="1.0.0" condition="STM32F1xx CMSIS"/>
|
||||||
<package name="STM32F1xx_DFP" schemaVersion="1.7.2" url="http://www.keil.com/pack/" vendor="Keil" version="2.4.0"/>
|
<package name="STM32F1xx_DFP" schemaVersion="1.4.0" url="http://www.keil.com/pack/" vendor="Keil" version="2.3.0"/>
|
||||||
<targetInfos>
|
<targetInfos>
|
||||||
<targetInfo name="Réel"/>
|
<targetInfo name="Réel"/>
|
||||||
<targetInfo name="Simulé"/>
|
<targetInfo name="Simulé"/>
|
||||||
|
|
22
README.md
22
README.md
|
@ -17,10 +17,10 @@ Le projet se sépare en 2 grandes parties :
|
||||||
Pour cela, nous avons utilisé les 3 documentations disponibles dans la première section de ce [cours moodle](https://moodle.insa-toulouse.fr/course/view.php?id=79#section-1).
|
Pour cela, nous avons utilisé les 3 documentations disponibles dans la première section de ce [cours moodle](https://moodle.insa-toulouse.fr/course/view.php?id=79#section-1).
|
||||||
|
|
||||||
Nous avons donc réalisé les drivers suivant :
|
Nous avons donc réalisé les drivers suivant :
|
||||||
[x] l'[ADC](Drivers/Inc/ADC.h)
|
- [x] l'[ADC](Drivers/Inc/ADC.h)
|
||||||
[x] les [GPIOs](Drivers/Inc/GPIO.h)
|
- [x] les [GPIOs](Drivers/Inc/GPIO.h)
|
||||||
[x] l'[UART](Drivers/Inc/UART.h)
|
- [x] l'[UART](Drivers/Inc/UART.h)
|
||||||
[x] les [Timers et le PWM](Drivers/Inc/TIMER.h)
|
- [x] les [Timers et le PWM](Drivers/Inc/TIMER.h)
|
||||||
|
|
||||||
Les drivers pour l'utilisation du SPI et de l'I2C nous sont fournis.
|
Les drivers pour l'utilisation du SPI et de l'I2C nous sont fournis.
|
||||||
|
|
||||||
|
@ -29,13 +29,13 @@ Les drivers pour l'utilisation du SPI et de l'I2C nous sont fournis.
|
||||||
Pour cela nous avons utilisé les documentations disponible dans la [section suivante](https://moodle.insa-toulouse.fr/course/view.php?id=79#section-16) du cours moodle précédemment cité.
|
Pour cela nous avons utilisé les documentations disponible dans la [section suivante](https://moodle.insa-toulouse.fr/course/view.php?id=79#section-16) du cours moodle précédemment cité.
|
||||||
|
|
||||||
Nous avons donc réalisé les fonctions suivantes :
|
Nous avons donc réalisé les fonctions suivantes :
|
||||||
[x] la [Girouette](Projet_voile/Includes/Girouette.h)
|
- [x] la [Girouette](Projet_voile/Includes/Girouette.h)
|
||||||
[ ] l' [Horloge](Drivers/Inc/Horloge.h)
|
- [ ] l' [Horloge](Drivers/Inc/Horloge.h)
|
||||||
[ ] l'[IMU](Drivers/Inc/IMU.h)
|
- [x] l'[IMU](Drivers/Inc/IMU.h)
|
||||||
[x] le [Moteur des voiles](Drivers/Inc/Moteur_voile.h)
|
- [x] le [Moteur des voiles](Drivers/Inc/Moteur_voile.h)
|
||||||
[ ] le [Moteur du plateau](Drivers/Inc/Moteur_plateau.h)
|
- [x] le [Moteur du plateau](Drivers/Inc/Moteur_plateau.h)
|
||||||
[ ] la [Mesure de tension de la batterie](Drivers/Inc/Mesure_tension.h)
|
- [ ] la [Mesure de tension de la batterie](Drivers/Inc/Mesure_tension.h)
|
||||||
[ ] la [télécommande](Drivers/Inc/Telecommande.h)
|
- [x] la [télécommande](Drivers/Inc/Telecommande.h)
|
||||||
|
|
||||||
Evidemment chacune de ces fonctions font appel aux drivers de la couche en dessous.
|
Evidemment chacune de ces fonctions font appel aux drivers de la couche en dessous.
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue