2016-12-02 2 views
0

Est-ce que quelqu'un, qui utilise le pilote STM32 HAL, a obtenu la communication I2C avec un capteur Sensirion comme SHT25 fonctionnant et peut me montrer ses extraits?STM32 HAL avec SHT25 de sensirion sur I2C, IIC

J'ai obtenu une communication en utilisant les exemples de code de sensirion. (https://www.sensirion.com/fileadmin/user_upload/customers/sensirion/Dokumente/11_Sample_Codes_Software/Humidity_Sensors/Sensirion_Humidity_Sensors_SHT21_Sample_Code_V1.2.pdf) Je reçois un accusé de réception quand j'adresse le capteur, mais quand je veux lire les données du capteur, je reçois seulement "11111111".

+0

Qu'avez-vous essayé jusqu'à présent? Lire la fiche technique, il y a une liste de commandes qui devraient être utilisées. Recherchez aussi STM32CubeMX et STM32CubeF0/1/2/3/4, plein d'exemples. –

Répondre

0

Code de travail pour Sensirion SHTC1 sur STM32 avec les pilotes HAL:

#define SHTC1_I2C_ADDR 0xE0 
#define TEMP_HUM_CMD_MEASURE_T_FIRST 0x7866 

//Launch convert 
uint8_t cmd[2]; 
cmd[0] = (uint8_t)(TEMP_HUM_CMD_MEASURE_T_FIRST >>> 8); 
cmd[1] = (uint8_t)TEMP_HUM_CMD_MEASURE_T_FIRST; 
HAL_I2C_Master_Transmit(&hi2c1, SHTC1_I2C_ADDR, cmd, 2, 100); 

//Wait 
HAL_Delay(15); 

//Read values 
uint8_t rawValues[6]; //T MSB, T LSB, T CRC, H MSB, H LSB, H CRC 
HAL_I2C_Master_Receive(&hi2c1, SHTC1_I2C_ADDR, rawValues, 6, 100); 
uint16_t rawTemp = (uint16_t)((((uint16_t)rawValues[0])<<8) | (uint16_t)rawValues[1]); 
uint16_t rawHum = (uint16_t)((((uint16_t)rawValues[3])<<8) | (uint16_t)rawValues[4]); 

float hum = (float)((float)100 * (float)rawHum/(float)65536); 
float temp =(float)((float)-45 + (float)175 * (float)rawTemp/(float)65536); 
+0

Je reçois une erreur à HAL_I2C_Master_Transmit. À quoi ressemble votre fonction MX_I2C1_Init()? –

0

Utilisez HAL_I2C_Mem_Write() et HAL_I2C_Mem_Read() API HAL pour les données d'écriture et de lecture via l'interface I2C du capteur. Quelles données à écrire/lire et à partir de quel emplacement de mémoire à écrire/lire vous devez trouver à partir de la fiche de données du capteur.

+0

Les données du capteur ne se trouvent pas dans la mémoire. les données sont acquises après l'envoi d'une commande de déclenchement. –

+0

Je n'ai pas compris ce que vous voulez dire par les données du capteur ne se trouve pas dans la mémoire? Peux-tu expliquer? Pour toute chose numérique, les données doivent être stockées dans une forme de mémoire. –

+0

La fiche technique du SHT25 explique qu'une mesure du capteur est déclenchée par une commande envoyée par un maître. Ensuite, le capteur effectue une mesure et quand il est prêt (après 50 ms), il envoie la valeur mesurée sur I2C au maître. Il n'y a aucun moyen de lire la mémoire du capteur. –