Răsfoiți Sursa

1ms RX timeout (app)

Juraj Ďuďák 1 an în urmă
părinte
comite
d5a4c8efea
3 a modificat fișierele cu 12 adăugiri și 13 ștergeri
  1. 6 10
      Core/Src/main.c
  2. 1 1
      test/app.py
  3. 5 2
      test/comm.py

+ 6 - 10
Core/Src/main.c

@@ -84,11 +84,12 @@ static void MX_SPI1_Init(void);
 
 /* Private user code ---------------------------------------------------------*/
 /* USER CODE BEGIN 0 */
+#define MAX_SYSTICK  0xFFFFFFFF;
 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 uint32_t uart_timeout = MAX_SYSTICK;
 
 volatile uint8_t icm_data_ready = 0;
 //volatile uint8_t uart_data_ready = 0;
@@ -131,13 +132,12 @@ static inline uint8_t loop_callback() {
 	}
 
 	uint32_t ht = HAL_GetTick();
-	//TODO toto opravit, ten timeout hned skoci do obsluhy
-	if(uart_timeout + 2 > ht) {
+	// timemout: 1 - 2 ms
+	if(ht - 1 > uart_timeout) {
 		dataL = 0;
 		dataI = 0;
 		data[0] = 0;
-		uart_timeout = 0;
-//		HAL_GPIO_WritePin(LD3_GPIO_Port, LD3_Pin, GPIO_PIN_RESET);
+		uart_timeout = MAX_SYSTICK;
 		led_off();
 		HAL_UARTEx_ReceiveToIdle_DMA(&huart2, data, 64);
 		return 2;  // UART receive timeout
@@ -155,7 +155,6 @@ void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size){
 		uart_timeout = HAL_GetTick();
 		dataL = data[0];
 		dataI = 0;
-//		HAL_GPIO_TogglePin(LD3_GPIO_Port, LD3_Pin);
 		led_on();
 		if (Size == 1) {
 			return;
@@ -170,13 +169,12 @@ void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size){
 
 	dataI += Size;
 	if(dataI >= dataL){
-//		HAL_GPIO_TogglePin(LD3_GPIO_Port, LD3_Pin);
 		led_off();
 		nbus_cb_UART_RX(dataI);
 		dataL=0;
 		dataI=0;
 		data[0]=0;
-		uart_timeout = 0;
+		uart_timeout = MAX_SYSTICK;
 	}
 
 }
@@ -225,8 +223,6 @@ int main(void)
   dataI=0;
   dataL=0;
 
-  HAL_UART_RegisterRxEventCallback(&huart2, HAL_UARTEx_RxEventCallback);
-
 #ifdef MODULE_INIT_IP_ADC
   MX_ADC_Init();
 #endif

+ 1 - 1
test/app.py

@@ -21,7 +21,7 @@ class AppTest:
         resp = self.serial_port.request(self.module, 0, CMD_ECHO,msg)        
         echo = ""
         if len(resp) == 0:
-            print("No ECHO")
+            print("No ECHO (0-size resp)")
             return 0
         for r in range(len(msg)):
             echo = echo + chr(resp[3+r])

+ 5 - 2
test/comm.py

@@ -130,7 +130,7 @@ class SerialComm:
             self.open()
         self.port.flush()
 
-        start[0] = len(start)+5
+        start[0] = len(start)
         crc_sum = crc8(start[1:])
         
         start.append(crc_sum)
@@ -188,7 +188,10 @@ class SerialComm:
             counter = counter + 1
             if counter > 5:
                 return []
-            
+        
+        if len(data) == 0:
+            return []
+
         if data[2] & 0x80 != 0:
             print("Chyba", hex(data[3]))
             return [data[3]]