|
|
@@ -88,6 +88,7 @@ uint8_t data[64]; // tmp read buffer
|
|
|
uint8_t *dataUART; // pointee for rx_buffer
|
|
|
volatile uint8_t dataL;
|
|
|
volatile uint8_t dataI;
|
|
|
+volatile uint32_t uart_timeout;
|
|
|
|
|
|
volatile uint8_t icm_data_ready = 0;
|
|
|
|
|
|
@@ -125,8 +126,16 @@ inline void app_delay(uint8_t ms){
|
|
|
static inline uint8_t loop_callback() {
|
|
|
if(icm_data_ready == 1){
|
|
|
icm_data_ready = 0;
|
|
|
- return 1;
|
|
|
+ return 1; // interrupt from external sensor: data ready
|
|
|
}
|
|
|
+
|
|
|
+ if(uart_timeout + 2 > HAL_GetTick()) {
|
|
|
+ dataL = 0;
|
|
|
+ dataI = 0;
|
|
|
+ data[0] = 0;
|
|
|
+ return 2; // UART receive timeout
|
|
|
+ }
|
|
|
+
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
@@ -135,6 +144,7 @@ void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size){
|
|
|
HAL_UARTEx_ReceiveToIdle_DMA(huart, data, 64);
|
|
|
uint8_t copy_offset = 0;
|
|
|
if(dataL==0){
|
|
|
+ uart_timeout = HAL_GetTick();
|
|
|
dataL = data[0];
|
|
|
dataI = 0;
|
|
|
HAL_GPIO_TogglePin(LD3_GPIO_Port, LD3_Pin);
|