Compare commits
5 commits
master
...
Paul_Cyril
Author | SHA1 | Date | |
---|---|---|---|
f6fca418e1 | |||
c531decce4 | |||
06df73ad1a | |||
0df040dc01 | |||
1d8e1b3902 |
15 changed files with 965 additions and 45 deletions
9
Drivers/Inc/CAP_voilier.h
Normal file
9
Drivers/Inc/CAP_voilier.h
Normal file
|
@ -0,0 +1,9 @@
|
|||
#ifndef CAP_voilier_H
|
||||
#define CAP_voilier_H
|
||||
|
||||
|
||||
void My_cap(void);
|
||||
void Madirection_IT (void);
|
||||
|
||||
|
||||
#endif
|
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
|
143
Drivers/Inc/MySPI.h
Normal file
143
Drivers/Inc/MySPI.h
Normal file
|
@ -0,0 +1,143 @@
|
|||
|
||||
#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
|
17
Drivers/Inc/Rouli.h
Normal file
17
Drivers/Inc/Rouli.h
Normal file
|
@ -0,0 +1,17 @@
|
|||
#include "stm32f10x.h"
|
||||
#include "Timer.h"
|
||||
|
||||
typedef struct
|
||||
{
|
||||
float gX;
|
||||
float gY;
|
||||
float gZ;
|
||||
|
||||
}XYZ;
|
||||
|
||||
void rouli_InitAccel(void);
|
||||
|
||||
void rouli_GetAccel (XYZ * axe);
|
||||
|
||||
void rouli_IT_Bascule(void);
|
||||
|
|
@ -31,6 +31,12 @@ void MyTimer_ActiveIT (TIM_TypeDef * Timer, char Prio, void (*IT_function)(void)
|
|||
|
||||
#define MyTimer_Base_Start(Timer) (Timer->CR1 |= 0x01)
|
||||
#define MyTimer_Base_Stop(Timer) (Timer->CR1 &= ~0x01)
|
||||
#define PWM_output 0x00
|
||||
#define PWM_inputTI1 0x01
|
||||
#define PWM_inputTI2 0x10
|
||||
#define PWM_inputTRC 0x11
|
||||
|
||||
void MyPWM_init ( TIM_TypeDef * Timer,char Channel);
|
||||
void MyPWM_Duty (TIM_TypeDef * Timer,char Channel, unsigned short CRR );
|
||||
|
||||
#endif
|
||||
|
|
10
Drivers/Inc/UART.h
Normal file
10
Drivers/Inc/UART.h
Normal file
|
@ -0,0 +1,10 @@
|
|||
#ifndef MYUART_H
|
||||
#define MYUART_H
|
||||
#include "stm32f10x.h"
|
||||
|
||||
void MyUART_init(void);
|
||||
void UART_send(char data);
|
||||
void MyUART_ActiveIT(char Prio, void (*IT_function)(void));
|
||||
char UART_receive(void);
|
||||
|
||||
#endif
|
|
@ -1,92 +1,159 @@
|
|||
#include "TIMER.h"
|
||||
|
||||
/*periode_timer=peridoe_horloge*prescaler*resolution
|
||||
debordement stocké dans registre UIF
|
||||
fixer val prescaler+ autoreload(equivalent resolution)
|
||||
demarrage timer => CEN=1*/
|
||||
|
||||
void (*ptr_func)(void);
|
||||
void (*tim_ptr1_func)(void);
|
||||
void (*tim_ptr2_func)(void);
|
||||
void (*tim_ptr3_func)(void);
|
||||
void (*tim_ptr4_func)(void);
|
||||
|
||||
void MyTimer_Base_Init ( MyTimer_Struct_TypeDef * Timer)
|
||||
{
|
||||
if(Timer->Timer==TIM1)
|
||||
{
|
||||
RCC->APB2ENR |= 0x01<<11;
|
||||
RCC->APB2ENR |= RCC_APB2ENR_TIM1EN;
|
||||
Timer->Timer->BDTR|=TIM_BDTR_MOE;
|
||||
}
|
||||
else if (Timer->Timer==TIM2)
|
||||
{
|
||||
RCC->APB1ENR |= 0x01;
|
||||
RCC->APB1ENR |= RCC_APB1ENR_TIM2EN;
|
||||
}
|
||||
else if (Timer->Timer==TIM3)
|
||||
{
|
||||
RCC->APB1ENR |= 0x01<<1;
|
||||
RCC->APB1ENR |= RCC_APB1ENR_TIM3EN;
|
||||
}
|
||||
else if (Timer->Timer==TIM4)
|
||||
{
|
||||
RCC->APB1ENR |= 0x01<<2;
|
||||
RCC->APB1ENR |= RCC_APB1ENR_TIM4EN;
|
||||
}
|
||||
Timer->Timer->ARR=Timer->ARR;
|
||||
Timer->Timer->PSC=Timer->PSC;
|
||||
Timer->Timer->ARR=Timer->ARR; // On set la donnée d'autoreload
|
||||
Timer->Timer->PSC=Timer->PSC; // On set la donnée de prescaler (ce qui va nous permettre de diviser la valeur d'autoreaload)
|
||||
}
|
||||
|
||||
void MyPWM_init ( TIM_TypeDef * Timer,char Channel)
|
||||
{
|
||||
if(Channel==1)
|
||||
{
|
||||
Timer->CCMR1&=~0x00FF;
|
||||
Timer->CCMR1 &= ~TIM_CCMR1_OC1M_0;
|
||||
Timer->CCMR1 |= TIM_CCMR1_OC1M_1| TIM_CCMR1_OC1M_2;
|
||||
Timer->CCER |= TIM_CCER_CC1E;
|
||||
|
||||
}
|
||||
if(Channel==2)
|
||||
{
|
||||
Timer->CCMR1&=~0xFF00;
|
||||
Timer->CCMR1 &= ~TIM_CCMR1_OC2M_0;
|
||||
Timer->CCMR1 |= TIM_CCMR1_OC2M_1| TIM_CCMR1_OC2M_2;
|
||||
Timer->CCER |= TIM_CCER_CC2E;
|
||||
|
||||
}
|
||||
if(Channel==3)
|
||||
{
|
||||
Timer->CCMR2&=~0x00FF;
|
||||
Timer->CCMR2 &= ~TIM_CCMR2_OC3M_0;
|
||||
Timer->CCMR2 |= TIM_CCMR2_OC3M_1| TIM_CCMR2_OC3M_2;
|
||||
Timer->CCER |= TIM_CCER_CC3E;
|
||||
|
||||
}
|
||||
if(Channel==4)
|
||||
{
|
||||
Timer->CCMR2&=~0xFF00;
|
||||
Timer->CCMR2 &= ~TIM_CCMR2_OC4M_0;
|
||||
Timer->CCMR2 |= TIM_CCMR2_OC4M_1| TIM_CCMR2_OC4M_2;
|
||||
Timer->CCER |= TIM_CCER_CC4E;
|
||||
|
||||
}
|
||||
}
|
||||
void MyPWM_Duty (TIM_TypeDef * Timer,char Channel, unsigned short CRR )
|
||||
{
|
||||
|
||||
|
||||
if(Channel==1)
|
||||
{
|
||||
Timer->CCR1=CRR;
|
||||
}
|
||||
if(Channel==2)
|
||||
{
|
||||
Timer->CCR2=CRR;
|
||||
}
|
||||
if(Channel==3)
|
||||
{
|
||||
Timer->CCR3=CRR;
|
||||
|
||||
}
|
||||
if(Channel==4)
|
||||
{
|
||||
Timer->CCR4=CRR;
|
||||
}
|
||||
|
||||
}
|
||||
void MyTimer_ActiveIT (TIM_TypeDef * Timer, char Prio, void (*IT_function)(void))
|
||||
{
|
||||
int num_tim;
|
||||
ptr_func=IT_function;
|
||||
Timer->DIER |= 0x01;
|
||||
Timer->DIER |= 0x01; // On autorise les interruptions sur timer
|
||||
if(Timer==TIM1)
|
||||
{
|
||||
num_tim=TIM1_UP_IRQn;
|
||||
tim_ptr1_func=IT_function;
|
||||
}
|
||||
else if(Timer==TIM2)
|
||||
{
|
||||
num_tim=TIM2_IRQn;
|
||||
tim_ptr2_func=IT_function;
|
||||
}
|
||||
else if(Timer==TIM3)
|
||||
{
|
||||
num_tim=TIM3_IRQn;
|
||||
tim_ptr3_func=IT_function;
|
||||
}
|
||||
else if(Timer==TIM4)
|
||||
{
|
||||
num_tim=TIM4_IRQn;
|
||||
tim_ptr4_func=IT_function;
|
||||
}
|
||||
NVIC->ISER[0] |= 0x01<<num_tim;
|
||||
NVIC->IP[num_tim] |= Prio << 4;
|
||||
NVIC->ISER[0] |= 0x01<<num_tim; // On précise quelle interruption on souhaite activé
|
||||
NVIC->IP[num_tim] |= Prio << 4; // On précise la priorité qu'on souhaite lui donner
|
||||
|
||||
|
||||
}
|
||||
|
||||
void init_encoder_timer(TIM_TypeDef * Timer) //voir page 391
|
||||
{
|
||||
Timer->SMCR = 0x1;
|
||||
|
||||
}
|
||||
|
||||
void TIM2_IRQHandler (void)
|
||||
{
|
||||
if(ptr_func!=0)
|
||||
if(tim_ptr2_func!=0)
|
||||
{
|
||||
(*ptr_func)();
|
||||
(*tim_ptr2_func)();
|
||||
}
|
||||
TIM2->SR &= ~(1<<0) ;
|
||||
TIM2->SR &= ~(1<<0) ; // Remet à 0 le flag de l'interruption
|
||||
}
|
||||
|
||||
void TIM3_IRQHandler (void)
|
||||
{
|
||||
if(ptr_func!=0)
|
||||
if(tim_ptr3_func!=0)
|
||||
{
|
||||
(*ptr_func)();
|
||||
(*tim_ptr3_func)();
|
||||
}
|
||||
TIM3->SR &= ~(1<<0) ;
|
||||
}
|
||||
|
||||
void TIM4_IRQHandler (void)
|
||||
{
|
||||
if(ptr_func!=0)
|
||||
if(tim_ptr4_func!=0)
|
||||
{
|
||||
(*ptr_func)();
|
||||
(*tim_ptr4_func)();
|
||||
}
|
||||
TIM4->SR &= ~(1<<0) ;
|
||||
}
|
||||
|
||||
void TIM1_UP_IRQHandler (void) // à vérifier
|
||||
void TIM1_UP_IRQHandler (void)
|
||||
{
|
||||
if(ptr_func!=0)
|
||||
if(tim_ptr1_func!=0)
|
||||
{
|
||||
(*ptr_func)();
|
||||
(*tim_ptr1_func)();
|
||||
}
|
||||
TIM1->SR &= ~(1<<0) ;
|
||||
}
|
||||
|
|
65
Drivers/Src/UART.c
Normal file
65
Drivers/Src/UART.c
Normal file
|
@ -0,0 +1,65 @@
|
|||
#include "UART.h"
|
||||
#include "GPIO.h"
|
||||
|
||||
void (*uart_rx_ptr_func)(void);
|
||||
|
||||
void MyUART_init(void) // que pour du 9600 bauds
|
||||
{
|
||||
MyGPIO_Struct_TypeDef RX_pin;
|
||||
MyGPIO_Struct_TypeDef TX_pin;
|
||||
|
||||
RX_pin.GPIO = GPIOA;
|
||||
RX_pin.GPIO_Conf = In_Floating;
|
||||
RX_pin.GPIO_Pin = 10;
|
||||
|
||||
TX_pin.GPIO = GPIOA;
|
||||
TX_pin.GPIO_Conf = AltOut_Ppull;
|
||||
TX_pin.GPIO_Pin = 9;
|
||||
|
||||
MyGPIO_Init (&RX_pin);
|
||||
MyGPIO_Init (&TX_pin);
|
||||
|
||||
RCC->APB2ENR |= RCC_APB2ENR_USART1EN; // validation horloge USART1
|
||||
USART1->CR1 |= USART_CR1_UE; // Activation de l'USART
|
||||
USART1->CR1 &= ~USART_CR1_M; // Choix d'une taille de 8 bits de données
|
||||
USART1->CR2 &= USART_CR2_STOP; // Choix d'un seul bit de stop
|
||||
USART1->BRR |= 468 << 4; // Fixe le baud rate à 9600bps //valeurs trouvé p804
|
||||
USART1->BRR |= 75; // Fixe le baud rate à 9600bps
|
||||
USART1->CR1 |= USART_CR1_RE;
|
||||
USART1->CR1 |= USART_CR1_TE;
|
||||
}
|
||||
|
||||
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
|
||||
{
|
||||
}
|
||||
USART1->DR = data; // Ecriture de la donnée dans le registre DR
|
||||
}
|
||||
|
||||
void MyUART_ActiveIT(char Prio, void (*IT_function)(void))
|
||||
{
|
||||
USART1->CR1 |= USART_CR1_RXNEIE; // On autorise l'interruption sur réception de l'UART
|
||||
uart_rx_ptr_func=IT_function;
|
||||
NVIC->ISER[1] |= 0x01<<(USART1_IRQn%32); // On précise quelle interruption on souhaite activé
|
||||
NVIC->IP[USART1_IRQn] |= Prio << 4; // On précise la priorité qu'on souhaite lui donner
|
||||
}
|
||||
|
||||
void USART1_IRQHandler()
|
||||
{
|
||||
if (USART1->SR & USART_SR_RXNE)
|
||||
{
|
||||
USART1->SR &= ~USART_SR_RXNE; // On abaisse le flag d'interruption
|
||||
if(uart_rx_ptr_func!=0)
|
||||
{
|
||||
(*uart_rx_ptr_func)();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
char UART_receive()
|
||||
{
|
||||
return USART1->DR; // on recupere dans DR
|
||||
}
|
||||
|
||||
|
26
Projet_DevDrivers/Sources/Bordage.c
Normal file
26
Projet_DevDrivers/Sources/Bordage.c
Normal file
|
@ -0,0 +1,26 @@
|
|||
#include "stm32f10x.h"
|
||||
#include "GPIO.h"
|
||||
#include "TIMER.h"
|
||||
|
||||
int bordage (void)
|
||||
{
|
||||
//int weatherCock, sailingAngle, roulis;
|
||||
MyGPIO_Struct_TypeDef signalA = {GPIOC,6,In_PullDown};
|
||||
MyGPIO_Struct_TypeDef signalB = {GPIOC,7,In_PullDown};
|
||||
MyGPIO_Struct_TypeDef signalI = {GPIOC,8,In_PullDown};
|
||||
|
||||
MyGPIO_Init(&signalA);
|
||||
MyGPIO_Init(&signalB);
|
||||
MyGPIO_Init(&signalI);
|
||||
|
||||
/*if(((weatherCock > 0) && (weatherCock <= 45)) || roulis>40)
|
||||
{
|
||||
sailingAngle=0;
|
||||
}else
|
||||
{
|
||||
sailingAngle=(weatherCock/2);
|
||||
}*/
|
||||
|
||||
return 0;
|
||||
|
||||
}
|
48
Projet_DevDrivers/Sources/CAP_voilier.c
Normal file
48
Projet_DevDrivers/Sources/CAP_voilier.c
Normal file
|
@ -0,0 +1,48 @@
|
|||
#include "UART.h"
|
||||
#include "TIMER.h"
|
||||
#include "GPIO.h"
|
||||
|
||||
MyTimer_Struct_TypeDef timer1;
|
||||
void Madirection_IT (void);
|
||||
signed char direction ;
|
||||
int duty_cap ;
|
||||
MyGPIO_Struct_TypeDef PA9;
|
||||
MyGPIO_Struct_TypeDef PB1;
|
||||
|
||||
|
||||
void My_cap(void)
|
||||
{
|
||||
PA9.GPIO=GPIOA;
|
||||
PA9.GPIO_Conf=AltOut_Ppull;
|
||||
PA9.GPIO_Pin=9;
|
||||
MyGPIO_Init(&PA9);
|
||||
PB1.GPIO=GPIOB;
|
||||
PB1.GPIO_Conf=Out_Ppull;
|
||||
PB1.GPIO_Pin=1;
|
||||
MyGPIO_Init(&PB1);
|
||||
|
||||
timer1.Timer=TIM1;
|
||||
timer1.ARR=20000; //pour avoir 20Khz
|
||||
timer1.PSC=3600;
|
||||
MyTimer_Base_Init(&timer1);
|
||||
MyTimer_Base_Start(timer1.Timer);
|
||||
MyPWM_init(timer1.Timer,2);
|
||||
MyUART_init();
|
||||
MyUART_ActiveIT(2,&Madirection_IT);
|
||||
|
||||
}
|
||||
|
||||
void Madirection_IT (void)
|
||||
{
|
||||
direction = UART_receive();
|
||||
if( direction <0 )
|
||||
{
|
||||
MyGPIO_Set(GPIOB,1);
|
||||
}else
|
||||
{
|
||||
MyGPIO_Reset(GPIOB,1);
|
||||
}
|
||||
|
||||
duty_cap=(20000*(int8_t) direction)/100 ;
|
||||
MyPWM_Duty(timer1.Timer,2, duty_cap );
|
||||
}
|
|
@ -1,38 +1,80 @@
|
|||
#include "stm32f10x.h"
|
||||
#include "GPIO.h"
|
||||
#include "TIMER.h"
|
||||
|
||||
#include "MyI2C.h"
|
||||
#include "MySPI.h"
|
||||
#include "Rouli.h"
|
||||
#include "CAP_voilier.h"
|
||||
#include <stdio.h>
|
||||
|
||||
|
||||
void Mafonction_IT (void);
|
||||
MyGPIO_Struct_TypeDef PA5;
|
||||
MyGPIO_Struct_TypeDef PC13;
|
||||
MyTimer_Struct_TypeDef timer2;
|
||||
MyGPIO_Struct_TypeDef PB0;
|
||||
MyTimer_Struct_TypeDef timer2,timer3;
|
||||
//PA5 LED
|
||||
//PC13 Bouton
|
||||
char X0,X1,Y0,Y1,Z0,Z1;
|
||||
char read_DATA,read_BWR,read_PWRC;
|
||||
int16_t gX,gY,gZ;
|
||||
int test =0;
|
||||
XYZ mesures;
|
||||
|
||||
int main ( void )
|
||||
{
|
||||
|
||||
|
||||
PA5.GPIO=GPIOA;
|
||||
PA5.GPIO_Conf=Out_Ppull;
|
||||
PA5.GPIO_Pin=5;
|
||||
MyGPIO_Init(&PA5);
|
||||
timer2.Timer=TIM2;
|
||||
timer2.ARR=35999; //pour avoir 500ms
|
||||
timer2.ARR=18000; //pour avoir 250ms
|
||||
timer2.PSC=1000;
|
||||
MyTimer_Base_Init(&timer2);
|
||||
MyTimer_ActiveIT(timer2.Timer,1, &Mafonction_IT);
|
||||
MyTimer_Base_Start(timer2.Timer);
|
||||
|
||||
|
||||
PB0.GPIO=GPIOB;
|
||||
PB0.GPIO_Conf=AltOut_Ppull;
|
||||
PB0.GPIO_Pin=0;
|
||||
MyGPIO_Init(&PB0);
|
||||
timer3.Timer=TIM3;
|
||||
timer3.ARR=14400; //pour avoir 20ms
|
||||
timer3.PSC=100;
|
||||
MyTimer_Base_Init(&timer3);
|
||||
//MyTimer_ActiveIT(timer3.Timer,2, &Mafonction_IT);
|
||||
MyTimer_Base_Start(timer3.Timer);
|
||||
MyPWM_init(timer3.Timer,3);
|
||||
|
||||
|
||||
MySPI_Init(SPI1);
|
||||
rouli_InitAccel();
|
||||
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();
|
||||
|
||||
while(1)
|
||||
{
|
||||
rouli_GetAccel(&mesures);
|
||||
My_cap();
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
void Mafonction_IT (void)
|
||||
{
|
||||
MyGPIO_Toggle(PA5.GPIO,5);
|
||||
if((mesures.gY <= (-0.7)) || (mesures.gY >= 0.7))
|
||||
{
|
||||
MyPWM_Duty(timer3.Timer,3,720);//0.985ms
|
||||
test = test+1;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
48
Projet_DevDrivers/Sources/Rouli.c
Normal file
48
Projet_DevDrivers/Sources/Rouli.c
Normal file
|
@ -0,0 +1,48 @@
|
|||
#include "stm32f10x.h"
|
||||
#include "GPIO.h"
|
||||
#include "TIMER.h"
|
||||
#include "MySPI.h"
|
||||
#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ètres */
|
||||
MySPI_Send(WRITE|BW_RATE); /* Ecriture dans le BW rate */
|
||||
MySPI_Send(0x0A); /* Envoi des paramètres */
|
||||
MySPI_Send(WRITE|POWER_CTL); /* Ecriture dans le POWER_CTL */
|
||||
MySPI_Send(0x08); /* Envoi des paramè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
|
||||
|
||||
|
|
@ -75,7 +75,7 @@
|
|||
<OPTFL>
|
||||
<tvExp>1</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<IsCurrentTarget>1</IsCurrentTarget>
|
||||
<IsCurrentTarget>0</IsCurrentTarget>
|
||||
</OPTFL>
|
||||
<CpuCode>18</CpuCode>
|
||||
<DebugOpt>
|
||||
|
@ -125,7 +125,7 @@
|
|||
<SetRegEntry>
|
||||
<Number>0</Number>
|
||||
<Key>DLGDARM</Key>
|
||||
<Name>(1010=-1,-1,-1,-1,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=733,260,1154,687,0)(121=-1,-1,-1,-1,0)(122=1345,565,1766,992,0)(123=-1,-1,-1,-1,0)(140=-1,-1,-1,-1,0)(240=-1,-1,-1,-1,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=1189,292,1783,1043,1)(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=-1,-1,-1,-1,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=733,260,1154,687,0)(121=667,158,1088,585,0)(122=1345,565,1766,992,0)(123=-1,-1,-1,-1,0)(140=-1,-1,-1,-1,0)(240=-1,-1,-1,-1,0)(190=-1,-1,-1,-1,0)(200=-1,-1,-1,-1,0)(170=-1,-1,-1,-1,0)(130=1141,158,1735,909,0)(131=1302,9,1896,760,0)(132=-1,-1,-1,-1,0)(133=-1,-1,-1,-1,0)(160=715,50,1163,464,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>
|
||||
<Number>0</Number>
|
||||
|
@ -139,6 +139,31 @@
|
|||
</SetRegEntry>
|
||||
</TargetDriverDllRegistry>
|
||||
<Breakpoint/>
|
||||
<WatchWindow1>
|
||||
<Ww>
|
||||
<count>0</count>
|
||||
<WinNumber>1</WinNumber>
|
||||
<ItemText>test</ItemText>
|
||||
</Ww>
|
||||
<Ww>
|
||||
<count>1</count>
|
||||
<WinNumber>1</WinNumber>
|
||||
<ItemText>duty_cap</ItemText>
|
||||
</Ww>
|
||||
<Ww>
|
||||
<count>2</count>
|
||||
<WinNumber>1</WinNumber>
|
||||
<ItemText>direction</ItemText>
|
||||
</Ww>
|
||||
</WatchWindow1>
|
||||
<MemoryWindow1>
|
||||
<Mm>
|
||||
<WinNumber>1</WinNumber>
|
||||
<SubType>0</SubType>
|
||||
<ItemText>0x20000018</ItemText>
|
||||
<AccSizeX>0</AccSizeX>
|
||||
</Mm>
|
||||
</MemoryWindow1>
|
||||
<Tracepoint>
|
||||
<THDelay>0</THDelay>
|
||||
</Tracepoint>
|
||||
|
@ -147,7 +172,7 @@
|
|||
<periodic>1</periodic>
|
||||
<aLwin>1</aLwin>
|
||||
<aCover>0</aCover>
|
||||
<aSer1>0</aSer1>
|
||||
<aSer1>1</aSer1>
|
||||
<aSer2>0</aSer2>
|
||||
<aPa>0</aPa>
|
||||
<viewmode>1</viewmode>
|
||||
|
@ -184,8 +209,8 @@
|
|||
<LogicAnalyzers>
|
||||
<Wi>
|
||||
<IntNumber>0</IntNumber>
|
||||
<FirstString>((PORTA & 0x00000020) >> 5 & 0x20) >> 5</FirstString>
|
||||
<SecondString>FF000000000000000000000000000000E0FFEF400100000000000000000000000000000028504F5254412026203078303030303030323029203E3E2035000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000001000000000000000000F03F170000000000000000000000000000000000000090020008</SecondString>
|
||||
<FirstString>((porta & 0x00000200) >> 9 & 0x200) >> 9</FirstString>
|
||||
<SecondString>00800000000000000000000000000000E0FFEF400100000000000000000000000000000028706F7274612026203078303030303032303029203E3E2039000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000001000000000000000000F03F170000000000000000000000000000000000000004010008</SecondString>
|
||||
</Wi>
|
||||
</LogicAnalyzers>
|
||||
<SystemViewers>
|
||||
|
@ -262,7 +287,7 @@
|
|||
<OPTFL>
|
||||
<tvExp>1</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<IsCurrentTarget>0</IsCurrentTarget>
|
||||
<IsCurrentTarget>1</IsCurrentTarget>
|
||||
</OPTFL>
|
||||
<CpuCode>18</CpuCode>
|
||||
<DebugOpt>
|
||||
|
@ -312,7 +337,7 @@
|
|||
<SetRegEntry>
|
||||
<Number>0</Number>
|
||||
<Key>DLGTARM</Key>
|
||||
<Name>(1010=-1,-1,-1,-1,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=318,388,739,793,0)(121=1101,403,1522,808,0)(122=1281,393,1702,798,0)(123=-1,-1,-1,-1,0)(140=-1,-1,-1,-1,0)(240=-1,-1,-1,-1,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=-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)(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=-1,-1,-1,-1,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=692,211,912,671,1)(1011=-1,-1,-1,-1,0)(180=-1,-1,-1,-1,0)(120=1499,644,1920,1049,0)(121=1391,503,1812,908,1)(122=950,270,1371,675,1)(123=-1,-1,-1,-1,0)(140=-1,-1,-1,-1,0)(240=-1,-1,-1,-1,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=1215,466,1809,1160,0)(132=1326,108,1920,802,1)(133=-1,-1,-1,-1,0)(160=972,135,1420,549,1)(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>
|
||||
<Number>0</Number>
|
||||
|
@ -335,7 +360,60 @@
|
|||
<Name>UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32F10x_128 -FS08000000 -FL020000 -FP0($$Device:STM32F103RB$Flash\STM32F10x_128.FLM))</Name>
|
||||
</SetRegEntry>
|
||||
</TargetDriverDllRegistry>
|
||||
<Breakpoint/>
|
||||
<Breakpoint>
|
||||
<Bp>
|
||||
<Number>0</Number>
|
||||
<Type>0</Type>
|
||||
<LineNumber>33</LineNumber>
|
||||
<EnabledFlag>0</EnabledFlag>
|
||||
<Address>134218882</Address>
|
||||
<ByteObject>0</ByteObject>
|
||||
<HtxType>0</HtxType>
|
||||
<ManyObjects>0</ManyObjects>
|
||||
<SizeOfObject>0</SizeOfObject>
|
||||
<BreakByAccess>0</BreakByAccess>
|
||||
<BreakIfRCount>1</BreakIfRCount>
|
||||
<Filename>.\Sources\CAP_voilier.c</Filename>
|
||||
<ExecCommand></ExecCommand>
|
||||
<Expression>\\TP1\Sources/CAP_voilier.c\33</Expression>
|
||||
</Bp>
|
||||
<Bp>
|
||||
<Number>1</Number>
|
||||
<Type>0</Type>
|
||||
<LineNumber>50</LineNumber>
|
||||
<EnabledFlag>0</EnabledFlag>
|
||||
<Address>134221314</Address>
|
||||
<ByteObject>0</ByteObject>
|
||||
<HtxType>0</HtxType>
|
||||
<ManyObjects>0</ManyObjects>
|
||||
<SizeOfObject>0</SizeOfObject>
|
||||
<BreakByAccess>0</BreakByAccess>
|
||||
<BreakIfRCount>1</BreakIfRCount>
|
||||
<Filename>..\Drivers\Src\UART.c</Filename>
|
||||
<ExecCommand></ExecCommand>
|
||||
<Expression>\\TP1\../Drivers/Src/UART.c\50</Expression>
|
||||
</Bp>
|
||||
</Breakpoint>
|
||||
<WatchWindow1>
|
||||
<Ww>
|
||||
<count>0</count>
|
||||
<WinNumber>1</WinNumber>
|
||||
<ItemText>mesures</ItemText>
|
||||
</Ww>
|
||||
<Ww>
|
||||
<count>1</count>
|
||||
<WinNumber>1</WinNumber>
|
||||
<ItemText>test</ItemText>
|
||||
</Ww>
|
||||
</WatchWindow1>
|
||||
<MemoryWindow1>
|
||||
<Mm>
|
||||
<WinNumber>1</WinNumber>
|
||||
<SubType>0</SubType>
|
||||
<ItemText>0x20000018</ItemText>
|
||||
<AccSizeX>0</AccSizeX>
|
||||
</Mm>
|
||||
</MemoryWindow1>
|
||||
<Tracepoint>
|
||||
<THDelay>0</THDelay>
|
||||
</Tracepoint>
|
||||
|
@ -344,7 +422,7 @@
|
|||
<periodic>1</periodic>
|
||||
<aLwin>1</aLwin>
|
||||
<aCover>0</aCover>
|
||||
<aSer1>0</aSer1>
|
||||
<aSer1>1</aSer1>
|
||||
<aSer2>0</aSer2>
|
||||
<aPa>0</aPa>
|
||||
<viewmode>1</viewmode>
|
||||
|
@ -356,7 +434,7 @@
|
|||
<AscS3>0</AscS3>
|
||||
<aSer3>0</aSer3>
|
||||
<eProf>0</eProf>
|
||||
<aLa>1</aLa>
|
||||
<aLa>0</aLa>
|
||||
<aPa1>0</aPa1>
|
||||
<AscS4>0</AscS4>
|
||||
<aSer4>0</aSer4>
|
||||
|
@ -398,7 +476,7 @@
|
|||
<GroupNumber>1</GroupNumber>
|
||||
<FileNumber>1</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExp>1</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>.\Sources\Principal.c</PathWithFileName>
|
||||
|
@ -422,7 +500,7 @@
|
|||
<GroupNumber>1</GroupNumber>
|
||||
<FileNumber>3</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>1</tvExp>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>..\Drivers\Src\TIMER.c</PathWithFileName>
|
||||
|
@ -430,6 +508,78 @@
|
|||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>1</GroupNumber>
|
||||
<FileNumber>4</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>.\Sources\Bordage.c</PathWithFileName>
|
||||
<FilenameWithoutPath>Bordage.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>1</GroupNumber>
|
||||
<FileNumber>5</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>
|
||||
<File>
|
||||
<GroupNumber>1</GroupNumber>
|
||||
<FileNumber>6</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>7</FileNumber>
|
||||
<FileType>5</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>..\Drivers\Inc\UART.h</PathWithFileName>
|
||||
<FilenameWithoutPath>UART.h</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>1</GroupNumber>
|
||||
<FileNumber>8</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>1</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>..\Drivers\Src\UART.c</PathWithFileName>
|
||||
<FilenameWithoutPath>UART.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>1</GroupNumber>
|
||||
<FileNumber>9</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</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>
|
||||
</Group>
|
||||
|
||||
<Group>
|
||||
|
|
|
@ -398,6 +398,36 @@
|
|||
<FileType>1</FileType>
|
||||
<FilePath>..\Drivers\Src\TIMER.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>Bordage.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>.\Sources\Bordage.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>Lib_Com_Periph_2022.lib</FileName>
|
||||
<FileType>4</FileType>
|
||||
<FilePath>..\Drivers\Inc\Lib_Com_Periph_2022.lib</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>Rouli.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>.\Sources\Rouli.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>UART.h</FileName>
|
||||
<FileType>5</FileType>
|
||||
<FilePath>..\Drivers\Inc\UART.h</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>UART.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\Drivers\Src\UART.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>CAP_voilier.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>.\Sources\CAP_voilier.c</FilePath>
|
||||
</File>
|
||||
</Files>
|
||||
</Group>
|
||||
<Group>
|
||||
|
@ -800,6 +830,36 @@
|
|||
<FileType>1</FileType>
|
||||
<FilePath>..\Drivers\Src\TIMER.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>Bordage.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>.\Sources\Bordage.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>Lib_Com_Periph_2022.lib</FileName>
|
||||
<FileType>4</FileType>
|
||||
<FilePath>..\Drivers\Inc\Lib_Com_Periph_2022.lib</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>Rouli.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>.\Sources\Rouli.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>UART.h</FileName>
|
||||
<FileType>5</FileType>
|
||||
<FilePath>..\Drivers\Inc\UART.h</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>UART.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\Drivers\Src\UART.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>CAP_voilier.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>.\Sources\CAP_voilier.c</FilePath>
|
||||
</File>
|
||||
</Files>
|
||||
</Group>
|
||||
<Group>
|
||||
|
|
Loading…
Reference in a new issue