Hallo zusammen, seit geraumer Zeit versuche ich ein kleines Projekt zu realisieren. Darin geht es darum, mit dem STM32L-Discovery Board über SPI den Temperatursensor LM74 anzusteuern und den Messwert in einer Oberfläche über eine RS232 Schnittstelle am PC auszugeben. Es klappt soweit alles, außer die Ansteuerung des LM74 über SPI. Das große Problem liegt glaube ich darin, dass der LM74 in den ersten 16 Takten 2 Dummybytes geschickt bekommen muss, und anschließend für die restlichen 16 Takten den Temperaturwert auslesen kann. Im Internet ist überhaupt nichts dafür zu finden, wenn, dann nur für den PIC. Dort weiß ich auch von Kollegen, dass es klappt. Kann es tatsächlich sein, dass ich in diesem Fall nicht die fertigen SPI Strukturen benutzen kann? Bisher habe ich es so versucht: void spi2init(void) { SPI_InitTypeDef SPI_SPI2_InitStructure; SPI_SPI2_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; SPI_SPI2_InitStructure.SPI_Mode = SPI_Mode_Master; SPI_SPI2_InitStructure.SPI_DataSize = SPI_DataSize_16b; SPI_SPI2_InitStructure.SPI_CPOL = SPI_CPOL_Low; SPI_SPI2_InitStructure.SPI_CPHA = SPI_CPHA_1Edge; SPI_SPI2_InitStructure.SPI_NSS = SPI_NSS_Soft; SPI_SPI2_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_64; SPI_SPI2_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; SPI_SPI2_InitStructure.SPI_CRCPolynomial = 0; SPI_Init(SPI2, &SPI_SPI2_InitStructure); SPI_Cmd(SPI2, ENABLE); } dieser Teil in der GPIO_Init.... GPIOSPI2_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_15; // 13 = SPI2_SCK, 15 = SPI2_MOSI GPIOSPI2_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIOSPI2_InitStructure.GPIO_OType = GPIO_OType_PP; GPIOSPI2_InitStructure.GPIO_Speed = GPIO_Speed_40MHz; GPIO_Init(GPIOB, &GPIOSPI2_InitStructure); GPIO_PinAFConfig(GPIOB, GPIO_PinSource13, GPIO_AF_SPI2); GPIO_PinAFConfig(GPIOB, GPIO_PinSource15, GPIO_AF_SPI2); GPIOSPI2_InitStructure.GPIO_Pin = GPIO_Pin_14; // 14 = SPI2_MISO GPIOSPI2_InitStructure.GPIO_Mode = GPIO_Mode_IN; GPIOSPI2_InitStructure.GPIO_Speed = GPIO_Speed_40MHz; GPIO_Init(GPIOB, &GPIOSPI2_InitStructure); GPIOSPI2_InitStructure.GPIO_Pin = GPIO_Pin_12; // 12= SPI2_CS GPIOSPI2_InitStructure.GPIO_Mode = GPIO_Mode_OUT; GPIOSPI2_InitStructure.GPIO_OType = GPIO_OType_PP; GPIOSPI2_InitStructure.GPIO_Speed = GPIO_Speed_40MHz; GPIO_Init(GPIOB, &GPIOSPI2_InitStructure); GPIO_WriteBit(GPIOB, GPIO_Pin_12, SET); .... außerdem setze ich auch den Clock für das SPI2 Register. in meiner main sieht es dann folgendermaßen aus: ... while(1) { uint16_t send_data = 0xFF; uint16_t receive_data = 0; GPIO_WriteBit(GPIOB, GPIO_Pin_12, RESET); //CS auf Low ziehen SPI_I2S_SendData(SPI2, send_data); while(SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE)); receive_data = SPI_I2S_ReceiveData(SPI2); GPIO_WriteBit(GPIOB, GPIO_Pin_12, SET); //CS wieder auf high setzen if(receive_data1 !=0 || receive_data2 !=0) { i++; receive_data = 3; } } } .. so, nun bekomme ich aber nie Daten in mein uint16_t receive_data zurück. Es bleibt immer auf 0. Hat irgendjemand einen Ansatz oder eine Lösung, wie ich den LM74 ansteuern kann?
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.