Hallo Leute,
ich bin mir nicht sicher warum das lesen meines Eingangs auf einmal
nicht mehr funktioniert. Es geht um folgende Codezeile:
1 | while (HAL_GPIO_ReadPin(BHI160_INT_GPIO_Port, BHI160_INT_Pin) == GPIO_PIN_RESET);
|
Der Eingang ist an die den Interrupt von meinem IMU (BHI160)
angeschlossen.
Wenn ich die Funktion debugge bekomme ich als return Wert
GPIO_PIN_RESET.
1 | GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
|
2 | {
|
3 | GPIO_PinState bitstatus;
|
4 | /* Check the parameters */
|
5 | assert_param(IS_GPIO_PIN(GPIO_Pin));
|
6 | if((GPIOx->IDR & GPIO_Pin) != (uint32_t)GPIO_PIN_RESET)
|
7 | {
|
8 | bitstatus = GPIO_PIN_SET;
|
9 | }
|
10 | else
|
11 | {
|
12 | bitstatus = GPIO_PIN_RESET;
|
13 | }
|
14 | return bitstatus;
|
15 | }
|
Demnach sollte die Bedingung doch erfüllt sein und somit im code
weitermachen, hingegen springt er immer wieder in die Funktion rein uns
liest den Eingang aus. Das Ergebnis ist jedes mal GPIO_PIN_RESET. Aus
testzwecken habe ich den Eingang einfach auf 3,3V angelegt, die Funktion
liest den Eingang richtig aus und gibt GPIO_PIN_SET zurück. Warum auch
immer springt er dann weiter und meint
1 | while (HAL_GPIO_ReadPin(BHI160_INT_GPIO_Port, BHI160_INT_Pin) == GPIO_PIN_RESET);
|
sei erfüllt....
Irgendwie kann ich mir das nicht erklären. So habe ich meinen Eingang
konfiguriert.
1 | /*Configure GPIO pin : BHI160_INT_Pin */
|
2 | GPIO_InitStruct.Pin = BHI160_INT_Pin;
|
3 | GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
|
4 | GPIO_InitStruct.Pull = GPIO_NOPULL;
|
5 | HAL_GPIO_Init(BHI160_INT_GPIO_Port, &GPIO_InitStruct);
|
Kann mir jemand auf die Sprünge helfen?