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:
parent
5f4ed0902c
commit
31c72fd5f6
3 changed files with 224 additions and 0 deletions
93
Accelerometre.c
Normal file
93
Accelerometre.c
Normal 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
2
Accelerometre.h
Normal file
|
|
@ -0,0 +1,2 @@
|
||||||
|
void initAccelo(void);
|
||||||
|
void RecupAccelo(void);
|
||||||
129
MySPI.h
Normal file
129
MySPI.h
Normal 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
|
||||||
Loading…
Reference in a new issue