Browse Source

improve things

Juraj Ďuďák 8 months ago
parent
commit
7e606d5525
3 changed files with 24 additions and 14 deletions
  1. 1 3
      Core/Src/AppBridge.cpp
  2. 20 11
      Core/Src/NbusCommunicator.cpp
  3. 3 0
      Core/Src/main.c

+ 1 - 3
Core/Src/AppBridge.cpp

@@ -33,9 +33,7 @@ void app(UART_HandleTypeDef *uartNbus, UART_HandleTypeDef *uartMaster){
 
 			frameTX = bridge->getSlave(i)->nbus_module_info();
 			bridge->sendResponseToMaster(frameTX);
-//			if(!frameTX->IsEmpty()) {
-//				HAL_UART_Transmit_DMA(uartMaster, frameTX->GetFrame(), frameTX->GetLength());
-//			}
+
 		}
 
 		HAL_Delay(1);

+ 20 - 11
Core/Src/NbusCommunicator.cpp

@@ -7,7 +7,6 @@
 
 #include "NbusCommunicator.h"
 
-volatile int32_t flag_data_received = -1;
 
 NbusCommunicator::NbusCommunicator(UART_HandleTypeDef* uartUbus, UART_HandleTypeDef *uartMaster) {
 	_packet_tx = new DataFrame(_data_packet_tx, sizeof(_data_packet_tx), TYPE_PLAIN, CRC_ON);
@@ -50,22 +49,21 @@ NbusCommunicator::~NbusCommunicator() {
 
 
 void NbusCommunicator::_receive(){
-	flag_data_received = -1;
+	uint16_t received_size;
 	HAL_GPIO_WritePin(GPIOB, GPIO_PIN_3, GPIO_PIN_SET);
-	HAL_UARTEx_ReceiveToIdle_DMA(_uart_nbus, _data_packet_comm, NBUS_MAX_FRAME_SIZE);
-	uint32_t stop_receive = HAL_GetTick() + 2;
 
-	while(flag_data_received < 0 && HAL_GetTick() < stop_receive);
+	// komunikacia v DMA musi byt spracovana aj tak ako blokujuca
+	// takto je tu menej rezie
+	HAL_UARTEx_ReceiveToIdle(_uart_nbus, _data_packet_comm, NBUS_MAX_FRAME_SIZE, &received_size, 2);
+
 	HAL_GPIO_WritePin(GPIOB, GPIO_PIN_3, GPIO_PIN_RESET);
 
 	_packet_rx->Init();
-	if(flag_data_received > 0){
-//		_packet_rx->AddArray(_data_packet_comm, flag_data_received);
-		_packet_rx->FromArray(_data_packet_comm, flag_data_received);
+	if(received_size > 0){
+		_packet_rx->FromArray(_data_packet_comm, received_size);
 	}
 	_packet_rx->Commit();
 
-	flag_data_received = 0;
 }
 
 void NbusCommunicator::transmit(uint8_t *frame, uint8_t length){
@@ -78,7 +76,7 @@ DataFrame* NbusCommunicator::send(Nbus_pdu *pdu, uint8_t *data, uint8_t data_len
 	_packet_tx->Init();
 	_packet_tx->AddInt8(pdu->ma);	// Module address
 	_packet_tx->AddInt8(pdu->sa);	// Slave address
-	_packet_tx->AddInt8(pdu->fc);	// ECHO
+	_packet_tx->AddInt8(pdu->fc);	// Function Code
 	for(int i = 0 ; i< data_len ; i++){
 		_packet_tx->AddInt8(data[i]);
 	}
@@ -94,11 +92,22 @@ DataFrame* NbusCommunicator::send(Nbus_pdu *pdu, uint8_t *data, uint8_t data_len
 }
 
 void NbusCommunicator::sendToMaster(DataFrame *master_frame){
+
+	while (_uart_master->gState != HAL_UART_STATE_READY) {
+		__NOP(); // cakanie na ukoncenie prebiehajuceho odosielania
+				// tu to moze byt vcelku tesno odoslany dalsi paket. je tam pauza o dlzke 1.2bit
+	}
 	HAL_UART_Transmit_DMA(_uart_master, master_frame->GetFrame(), master_frame->GetLength());
 }
 
 
+/*
 //  Application callbacks
 void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size){
-	flag_data_received = Size;
+	if(huart == &huart1) {
+//		if(huart->RxEventType != HAL_UART_RXEVENT_HT){
+		flag_nbus_received = Size;
+//		}
+	}
 }
+*/

+ 3 - 0
Core/Src/main.c

@@ -100,6 +100,9 @@ int main(void)
   MX_USART1_UART_Init();
   /* USER CODE BEGIN 2 */
 
+  __HAL_DMA_DISABLE_IT(&hdma_usart1_rx, DMA_IT_HT);
+  __HAL_DMA_DISABLE_IT(&hdma_usart2_rx, DMA_IT_HT);
+
   app(&huart1, &huart2);
 
   /* USER CODE END 2 */