#include "stm32f10x.h" #include "accelerometer.h" #include "MySPI.h" #include "gpio.h" void Init_accelerometre() { //char testReg; MySPI_Init(SPI1); MySPI_Clear_NSS(); //CS LOW MySPI_Send(0x2D);//Registre Auto_sleep + Write + measure a 1 MySPI_Send(0x08);// désactive MySPI_Set_NSS();//CS HIGH /* MySPI_Clear_NSS(); //CS LOW MySPI_Send(0xAD);// regisstre 0x2D en lecture testReg = MySPI_Read(); // lecture de la valeur du registre MySPI_Set_NSS();//CS HIGH */ MySPI_Clear_NSS(); //CS LOW MySPI_Send(0X2C);//Registre power consuption + Write MySPI_Send(0X1A);//Paramétrage hors low consumption + 100Hz output data rate MySPI_Set_NSS();//CS HIGH MySPI_Clear_NSS(); //CS LOW MySPI_Send(0x31);//registre Data format + write MySPI_Send(0x17);// MySPI_Set_NSS();//CS HIGH } void Lecture_accelerometre(float* GX, float* GY, float* GZ) { int16_t dataX ; int16_t dataY ; int16_t dataZ ; MySPI_Clear_NSS(); //CS LOW MySPI_Send(0xF2);//lecture 1er registre accéléromètre + lecture multibytes dataX = MySPI_Read()<<8; // données sur 13 (12 data + sign) bits passage 8 bit en PF dataX |= MySPI_Read(); //lecture SPI dataX &= 0x1FFF; //masquage au dessus du bit 13 if (dataX > 511) { dataX -= 1024; } *GX = dataX*0.004;//valeur du registre x pas accelerometre dataY = MySPI_Read()<<8; dataY |= MySPI_Read(); dataY &= 0x1FFF; if (dataY > 511) { dataY -= 1024; } *GY = dataY*0.004;//valeur du registre x pas accelerometre dataZ = ((MySPI_Read()<<8)|MySPI_Read()); dataZ &= 0x1FFF; /* if (dataZ > 511) { dataZ -= 1024; } */ *GZ = dataZ*0.004;//valeur du registre x pas accelerometre MySPI_Set_NSS();//CS HIGH }