sggt/App/HART/hart.c

90 lines
2.1 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// #include <stdio.h>
#include <string.h>
#include "FreeRTOS.h"
#include "task.h"
#include "hart.h"
#include "gpio.h"
void hart_send(UART_HandleTypeDef *huart, uint8_t *data)
{
usart_printf(huart, (char *)data);
}
void parse_scom_hart(st_scom *scom)
{
if (scom == &scom1_hart)
{
scom->rx_flag = FALSE;
if ((scom->rx_buff[0] == 0xff) && (scom->rx_buff[1] == 0xff) && (scom->rx_buff[scom->rx_len - 1] == 0xAA))
{
;
}
scom->tx_flag = TRUE;
scom->rx_len = 0;
}
}
void hart_communicate(st_scom *scom)
{
uint8_t hart_data_test[18] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0xaa};
HART_RTS(RTS_OFF);
if (scom->rx_flag == TRUE)
{
scom->rx_flag = FALSE;
parse_scom_hart(scom);
}
// scom->tx_flag = TRUE;
if (scom->tx_flag == TRUE)
{
scom->tx_flag = FALSE;
HART_RTS(RTS_ON);
vTaskDelay(5);
memcpy(scom->tx_buff, hart_data_test, sizeof(hart_data_test));
hart_send(&huart1, scom->tx_buff);
HART_RTS(RTS_OFF);
}
}
//DEVICE <---SIG---> PC
//将来自设备的HART数据装载至com485_tx将comhart_tx的HART数据发送至设备
void transparent_hart(st_scom *scom)
{
if (scom != &scom1_hart) return;
HART_RTS(RTS_OFF);
//DEVICE -> SIG
if (scom->rx_flag == TRUE)
{
scom->rx_flag = FALSE;
//中断内接收到的数据是否符合HART数据报符合则写入com485_tx准备发送至PC
if ((scom->rx_buff[0] == 0xff) && (scom->rx_buff[1] == 0xff) && (scom->rx_buff[scom->rx_len - 1] == 0xAA))
{
//SIG -> PC
memcpy(scom2_rs485.tx_buff, scom->rx_buff, sizeof(scom->rx_buff));
scom2_rs485.tx_len = scom->rx_len;
scom2_rs485.tx_flag = TRUE;
}
scom->rx_len = 0;
}
//SIG -> DEVICE
if (scom->tx_flag == TRUE)
{
scom->tx_flag = FALSE;
HART_RTS(RTS_ON);
vTaskDelay(5);
hart_send(&huart1, scom->tx_buff);
HART_RTS(RTS_OFF);
}
}