Переглянути джерело

[BT-6710]fix ds18b20 module

balbekova 5 роки тому
батько
коміт
b6e6026a29

+ 16 - 9
modules/ds18b20/onewire.c

@@ -114,15 +114,15 @@ void DALLAS_DmaInit(void)
       TxDMA_Channel = DMA_Channel_4;
     } else if (ow_sensor[i].uart_addr == USART6) {
       RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA2, ENABLE);
-      RxDMA_Stream = DMA1_Stream1;
-      TxDMA_Stream = DMA1_Stream6;
+      RxDMA_Stream = DMA2_Stream1;
+      TxDMA_Stream = DMA2_Stream6;
       RxDMA_Channel = DMA_Channel_5;
       TxDMA_Channel = DMA_Channel_5;
     }
   
       /* DMA на чтение */
       DMA_DeInit(RxDMA_Stream);
-      ow_sensor[i].DMA_InitStructureRx.DMA_Channel = RxDMA_Stream;
+      ow_sensor[i].DMA_InitStructureRx.DMA_Channel = RxDMA_Channel;
       ow_sensor[i].DMA_InitStructureRx.DMA_PeripheralBaseAddr = (uint32_t)&ow_sensor[i].uart_addr->DR;
       ow_sensor[i].DMA_InitStructureRx.DMA_Memory0BaseAddr = (uint32_t)&ow_sensor[i].sensorBuf;
       ow_sensor[i].DMA_InitStructureRx.DMA_DIR = DMA_DIR_PeripheralToMemory;
@@ -138,7 +138,7 @@ void DALLAS_DmaInit(void)
 
       /* DMA на запись */
       DMA_DeInit(TxDMA_Stream);
-      ow_sensor[i].DMA_InitStructureTx.DMA_Channel = TxDMA_Stream;
+      ow_sensor[i].DMA_InitStructureTx.DMA_Channel = TxDMA_Channel;
       ow_sensor[i].DMA_InitStructureTx.DMA_PeripheralBaseAddr = &ow_sensor[i].uart_addr->DR;
       ow_sensor[i].DMA_InitStructureTx.DMA_Memory0BaseAddr = (uint32_t)&ow_sensor[i].sensorBuf;
       ow_sensor[i].DMA_InitStructureTx.DMA_DIR = DMA_DIR_MemoryToPeripheral;
@@ -187,7 +187,7 @@ uint8_t DALLAS_SensorReset(t_sensor_list_t sensor)
 {
     uint8_t presence;
 
-    uart_hw_init(ow_sensor[sensor].uart_addr, DALLAS_SENSOR_RST_UART_BAUD,
+    uart_config_reinit(ow_sensor[sensor].uart_addr, DALLAS_SENSOR_RST_UART_BAUD,
         DALLAS_SENSOR_UART_WORD_LEN, DALLAS_SENSOR_UART_PARITY, DALLAS_SENSOR_UART_STOP_BIT);
 
     // отправляем 0xf0 на скорости 9600
@@ -198,7 +198,7 @@ uint8_t DALLAS_SensorReset(t_sensor_list_t sensor)
 
     presence = USART_ReceiveData(ow_sensor[sensor].uart_addr);
 
-    uart_hw_init(ow_sensor[sensor].uart_addr, DALLAS_SENSOR_UART_BAUD, DALLAS_SENSOR_UART_WORD_LEN,
+    uart_config_reinit(ow_sensor[sensor].uart_addr, DALLAS_SENSOR_UART_BAUD, DALLAS_SENSOR_UART_WORD_LEN,
               DALLAS_SENSOR_UART_PARITY, DALLAS_SENSOR_UART_STOP_BIT);
 
     if (presence != 0xf0) {
@@ -228,27 +228,34 @@ uint8_t DALLAS_Send(t_sensor_list_t sensor, uint8_t sendReset, uint8_t *command,
     uint8_t cLen, uint8_t *data, uint8_t dLen, uint8_t readStart)
 {
     uint32_t timeOutCounter = 0;
+    uint32_t DMA_FLAG_TCIF = 0;
     DMA_Stream_TypeDef *RxDMA_Stream = NULL;
     DMA_Stream_TypeDef *TxDMA_Stream = NULL;
 
     if (ow_sensor[sensor].uart_addr == USART1) {
+      DMA_FLAG_TCIF = DMA_FLAG_TCIF2;
       RxDMA_Stream = DMA1_Stream2;
       TxDMA_Stream = DMA1_Stream7;
     } else if (ow_sensor[sensor].uart_addr == USART2) {
+      DMA_FLAG_TCIF = DMA_FLAG_TCIF5;
       RxDMA_Stream = DMA1_Stream5;
       TxDMA_Stream = DMA1_Stream6;
     } else if (ow_sensor[sensor].uart_addr == USART3) {
+      DMA_FLAG_TCIF = DMA_FLAG_TCIF1;
       RxDMA_Stream = DMA1_Stream1;
       TxDMA_Stream = DMA1_Stream3;
     } else if (ow_sensor[sensor].uart_addr == UART4) {
+      DMA_FLAG_TCIF = DMA_FLAG_TCIF2;
       RxDMA_Stream = DMA1_Stream2;
       TxDMA_Stream = DMA1_Stream4;
     } else if (ow_sensor[sensor].uart_addr == UART5) {
+      DMA_FLAG_TCIF = DMA_FLAG_TCIF0;
       RxDMA_Stream = DMA1_Stream0;
       TxDMA_Stream = DMA1_Stream7;
     } else if (ow_sensor[sensor].uart_addr == USART6) {
-      RxDMA_Stream = DMA1_Stream1;
-      TxDMA_Stream = DMA1_Stream6;
+      DMA_FLAG_TCIF = DMA_FLAG_TCIF1;
+      RxDMA_Stream = DMA2_Stream1;
+      TxDMA_Stream = DMA2_Stream6;
     }
 
     /* если требуется сброс - сбрасываем и проверяем на наличие устройств */
@@ -280,7 +287,7 @@ uint8_t DALLAS_Send(t_sensor_list_t sensor, uint8_t sendReset, uint8_t *command,
         DMA_Cmd(TxDMA_Stream, ENABLE);
 
 
-        while (DMA_GetFlagStatus(RxDMA_Stream, DMA_FLAG_TCIF5) == RESET) {
+        while (DMA_GetFlagStatus(RxDMA_Stream, DMA_FLAG_TCIF) == RESET) {
 
             timeOutCounter++;
             if (timeOutCounter > DALLAS_TIME_OUT) {

+ 1 - 0
peripheral_modules/inc/usart.h

@@ -66,6 +66,7 @@ void rs485_enable_tx(void);
 void init_ups_rbuf(void);
 
 void uart_hw_init(USART_TypeDef *uart, uint32_t baud, uint16_t wordlen, uint16_t parity, uint16_t stop);
+void uart_config_reinit(USART_TypeDef *uart, uint32_t baud, uint16_t wordlen, uint16_t parity, uint16_t stop);
 
 /**
   * @brief  

+ 21 - 0
peripheral_modules/src/usart.c

@@ -57,6 +57,27 @@ SemaphoreHandle_t xSem_user_rx_buf;
 
 USART_InitTypeDef USART_InitStructure;
 
+void uart_config_reinit(USART_TypeDef *uart, uint32_t baud, uint16_t wordlen, uint16_t parity, uint16_t stop)
+{
+    uint16_t wordlen_tmp;
+
+    if (wordlen == 8) {
+        wordlen_tmp = USART_WordLength_8b;
+    }
+    if (wordlen == 9) {
+        wordlen_tmp = USART_WordLength_9b;
+    }
+
+    USART_InitStructure.USART_BaudRate = baud;
+    USART_InitStructure.USART_WordLength = wordlen_tmp;
+    USART_InitStructure.USART_StopBits = stop;
+    USART_InitStructure.USART_Parity = parity;
+    USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
+    USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
+
+    USART_Init(uart, &USART_InitStructure);
+}
+
 void uart_hw_init(USART_TypeDef *uart, uint32_t baud, uint16_t wordlen, uint16_t parity, uint16_t stop)
 {
     uint16_t wordlen_tmp;