Upload files to "/"

Les travaux fait en séance 19/11. On est arrivé à récuperer le DATA de l'acceleromètre du voilier. Faut le tester en réel.
This commit is contained in:
Brage-Flonaes Johnsen 2025-11-19 11:24:36 +01:00
parent 5f4ed0902c
commit 31c72fd5f6
3 changed files with 224 additions and 0 deletions

93
Accelerometre.c Normal file
View file

@ -0,0 +1,93 @@
#include <stm32f10x.h>
#include <Horloge.h>
#include <MYGPIO.h>
#include <stdlib.h>
#include <MySPI.h>
#include <stdint.h>
//Pin GPIOA_9 et GPIOA_10 sont pris par USART
/*
I2C SDA IN/OUT
I2C SCL OUT
*/
//il faut recuperer le data qui sort
/*
SPI1_NSS PA4 - Utilisé
NSS = 0 -> slave active
NSS = 1 -> slave inactive
SPI1_SCK PA5
SPI1_MISO PA6
SPI1_MOSI PA7
TIM3 CH3 PB0
0x32 50 DATAX0 R 00000000 X-Axis Data 0
0x33 51 DATAX1 R 00000000 X-Axis Data 1
0x34 52 DATAY0 R 00000000 Y-Axis Data 0
0x35 53 DATAY1 R 00000000 Y-Axis Data 1
0x36 54 DATAZ0 R 00000000 Z-Axis Data 0
0x37 55 DATAZ1 R 00000000 Z-Axis Data 1
*/
void initAccelo(void){
MySPI_Init(SPI1); //Active le SCK
}
// send bits, les bits inclus en char envoyés: RW MB Adress_bit5 @4 @3 @2 @1 @0
//RW: R = 1 et W = 0
//MB à 1 veut measurement et MB à 0 Standby
uint16_t * RecupAccelo(void){ //Renvoie 48 en forme des chars
static uint16_t Messias[3];
//On lit X0
MySPI_Clear_NSS();//Mettre la broche PA4 à 0
MySPI_Send(0b11110010); //Lecture de X0 et MB à 1 pour garder les valeurs
uint16_t X0 = MySPI_Read();
MySPI_Set_NSS(); //Mettre la broche PA4 à 1
//On lit X1
MySPI_Clear_NSS();//Mettre la broche PA4 à 0
MySPI_Send(0b10110011); //Lecture de X1
Messias[0] = X0 | (MySPI_Read() << 8);
MySPI_Set_NSS(); //Mettre la broche PA4 à 1
//On lit Y0
MySPI_Clear_NSS();//Mettre la broche PA4 à 0
MySPI_Send(0b10110100); //Lecture de Y0
uint16_t Y0 = MySPI_Read();
MySPI_Set_NSS(); //Mettre la broche PA4 à 1
//On lit Y1
MySPI_Clear_NSS();//Mettre la broche PA4 à 0
MySPI_Send(0b10110101); //Lecture de Y1
Messias[1] = Y0 | (MySPI_Read() << 8);
MySPI_Set_NSS(); //Mettre la broche PA4 à 1
//On lit Z0
MySPI_Clear_NSS();//Mettre la broche PA4 à 0
MySPI_Send(0b10110110); //Lecture de Z0
uint16_t Z0 = MySPI_Read();
MySPI_Set_NSS(); //Mettre la broche PA4 à 1
//On lit Z1
MySPI_Clear_NSS();//Mettre la broche PA4 à 0
MySPI_Send(0b10110111); //Lecture de Z1
Messias[2] = Z0 | (MySPI_Read() << 8);
MySPI_Set_NSS(); //Mettre la broche PA4 à 1
return Messias;
}

2
Accelerometre.h Normal file
View file

@ -0,0 +1,2 @@
void initAccelo(void);
void RecupAccelo(void);

129
MySPI.h Normal file
View file

@ -0,0 +1,129 @@
#ifndef INC_MYSPI_H_
#define INC_MYSPI_H_
#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
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