更新:

1、HART连接模式的按键选择逻辑调整;
2、HART关闭的情况下补充对3个GPIO引脚的复位;
This commit is contained in:
吴俊潮 2025-08-06 15:46:17 +08:00
parent 5c2f009625
commit 10737c6231
10 changed files with 23398 additions and 23326 deletions

View File

@ -80,6 +80,13 @@ extern const lv_img_dsc_t * screen_main_ani_out_sign_imgs[4];
#include "scr_setting_progam_out.h" #include "scr_setting_progam_out.h"
#include "modbus_register_process.h" #include "modbus_register_process.h"
typedef struct
{
HAL_StatusTypeDef ust_RS485;
HAL_StatusTypeDef ust_BLE;
HAL_StatusTypeDef ust_HART;
}UARTS_STATUS;
extern PHYSICAL_QUANTITY VOL[2]; //电压VOL[0]-V, VOL[1]-mV extern PHYSICAL_QUANTITY VOL[2]; //电压VOL[0]-V, VOL[1]-mV
extern PHYSICAL_QUANTITY CUR; //电流mA extern PHYSICAL_QUANTITY CUR; //电流mA
extern PHYSICAL_QUANTITY RES; //电阻,Ω extern PHYSICAL_QUANTITY RES; //电阻,Ω
@ -89,6 +96,7 @@ extern PHYSICAL_QUANTITY RTD; //热电阻
extern OPERATIONS current_operation; //当前操作 extern OPERATIONS current_operation; //当前操作
extern SYSTEM_STATUS_WATCH system_sts; //系统状态监控 extern SYSTEM_STATUS_WATCH system_sts; //系统状态监控
extern SIG_TRANSMISSION sig_trans; //通讯模式 extern SIG_TRANSMISSION sig_trans; //通讯模式
extern UARTS_STATUS uarts_status;
//绝对值计算 //绝对值计算
#define MY_ABS(pa) ( ( (pa) >= 0 )?( (pa) ):( 0 - (pa) ) ) #define MY_ABS(pa) ( ( (pa) >= 0 )?( (pa) ):( 0 - (pa) ) )

View File

@ -1017,7 +1017,14 @@ void set_communication_modify(uint8_t con, int8_t step)
case TEXT_HART: case TEXT_HART:
{ {
tabdata.hart_enable += step; tabdata.hart_enable += step;
if(tabdata.hart_enable > 3) tabdata.hart_enable = 0; if(tabdata.hart_enable > 200)
{
tabdata.hart_enable = 3;
}
else if(tabdata.hart_enable > 3)
{
tabdata.hart_enable = 0;
}
//通讯方式互斥 //通讯方式互斥
if(tabdata.hart_enable) if(tabdata.hart_enable)

View File

@ -10,6 +10,7 @@ PHYSICAL_QUANTITY TC[8]; //热电偶共8种
PHYSICAL_QUANTITY RTD; //热电阻 PHYSICAL_QUANTITY RTD; //热电阻
SYSTEM_STATUS_WATCH system_sts; //系统状态监控 SYSTEM_STATUS_WATCH system_sts; //系统状态监控
SIG_TRANSMISSION sig_trans = TRANS_NONE; //通讯模式 SIG_TRANSMISSION sig_trans = TRANS_NONE; //通讯模式
UARTS_STATUS uarts_status; //各个串口的状态
// 热电偶真值表电压mV // 热电偶真值表电压mV
// 行:[0,7]->[K, S, N, B, E, J, R, T],列:[0,10]->[mV_Tmin,...,mV_Tmax](均分成10个间隔11个端点) // 行:[0,7]->[K, S, N, B, E, J, R, T],列:[0,10]->[mV_Tmin,...,mV_Tmax](均分成10个间隔11个端点)

View File

@ -102,7 +102,7 @@ void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart)
scom1_hart.tx_len = 0; scom1_hart.tx_len = 0;
//PC--->SIG--->HART重新开启485的DMA //PC--->SIG--->HART重新开启485的DMA
HAL_UART_Receive_DMA(&huart2, scom2_rs485.rx_buff, BUFFER_SIZE); uarts_status.ust_RS485 = HAL_UART_Receive_DMA(&huart2, scom2_rs485.rx_buff, BUFFER_SIZE);
} }
else if(huart == &huart2) else if(huart == &huart2)
{ {
@ -114,26 +114,26 @@ void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart)
{ {
case TRANS_HART_TO_PC: case TRANS_HART_TO_PC:
{ {
HAL_UART_Receive_DMA(&huart1, scom1_hart.rx_buff, BUFFER_SIZE); uarts_status.ust_HART = HAL_UART_Receive_DMA(&huart1, scom1_hart.rx_buff, BUFFER_SIZE);
} }
break; break;
case TRANS_BLE_TO_PC: case TRANS_BLE_TO_PC:
{ {
HAL_UART_Receive_DMA(&huart6, scom6_ble.rx_buff, BUFFER_SIZE); uarts_status.ust_BLE = HAL_UART_Receive_DMA(&huart6, scom6_ble.rx_buff, BUFFER_SIZE);
} }
break; break;
case TRANS_MODBUS_PC_TO_SIG: case TRANS_MODBUS_PC_TO_SIG:
{ {
HAL_UART_Receive_DMA(&huart2, scom2_rs485.rx_buff, BUFFER_SIZE); uarts_status.ust_RS485 = HAL_UART_Receive_DMA(&huart2, scom2_rs485.rx_buff, BUFFER_SIZE);
} }
break; break;
case TRANS_MODBUS_SIG_TO_SLAVE: case TRANS_MODBUS_SIG_TO_SLAVE:
{ {
mod_master.tx_flag = TX_OK; mod_master.tx_flag = TX_OK;
HAL_UART_Receive_DMA(&huart2, scom2_rs485.rx_buff, BUFFER_SIZE); uarts_status.ust_RS485 = HAL_UART_Receive_DMA(&huart2, scom2_rs485.rx_buff, BUFFER_SIZE);
sig2slave_current_tick = 0; sig2slave_current_tick = 0;
} }
break; break;
@ -148,7 +148,7 @@ void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart)
scom6_ble.tx_len = 0; scom6_ble.tx_len = 0;
//PC--->SIG--->BLE重新开启485的DMA //PC--->SIG--->BLE重新开启485的DMA
HAL_UART_Receive_DMA(&huart2, scom2_rs485.rx_buff, BUFFER_SIZE); uarts_status.ust_RS485 = HAL_UART_Receive_DMA(&huart2, scom2_rs485.rx_buff, BUFFER_SIZE);
} }
//通讯模式清空,等待下一次接收 //通讯模式清空,等待下一次接收

View File

@ -236,7 +236,7 @@ void trans_modbus_sig2slave(void)
{ {
//修改剩余buff长度继续接收 //修改剩余buff长度继续接收
buffer_size_temp -= scom2_rs485.rx_len; buffer_size_temp -= scom2_rs485.rx_len;
HAL_UART_Receive_DMA(&huart2, scom2_rs485.rx_buff + sig2slave_data_length_total, buffer_size_temp); uarts_status.ust_RS485 = HAL_UART_Receive_DMA(&huart2, scom2_rs485.rx_buff + sig2slave_data_length_total, buffer_size_temp);
} }
sig2slave_step++; sig2slave_step++;
} }
@ -258,7 +258,7 @@ void trans_modbus_sig2slave(void)
{ {
//继续接收 //继续接收
buffer_size_temp -= sig2slave_data_length_temp; buffer_size_temp -= sig2slave_data_length_temp;
HAL_UART_Receive_DMA(&huart2, scom2_rs485.rx_buff + sig2slave_data_length_total, buffer_size_temp); uarts_status.ust_RS485 = HAL_UART_Receive_DMA(&huart2, scom2_rs485.rx_buff + sig2slave_data_length_total, buffer_size_temp);
} }
} }
break; break;
@ -289,7 +289,7 @@ void trans_modbus_sig2slave(void)
sig2slave_data_length_total = 0; sig2slave_data_length_total = 0;
buffer_size_temp = BUFFER_SIZE; buffer_size_temp = BUFFER_SIZE;
HAL_UART_Receive_DMA(&huart2, scom2_rs485.rx_buff, BUFFER_SIZE); uarts_status.ust_RS485 = HAL_UART_Receive_DMA(&huart2, scom2_rs485.rx_buff, BUFFER_SIZE);
} }
break; break;

View File

@ -232,6 +232,10 @@ void start_task_hart(void const * argument)
fre_set_hart = 0; fre_set_hart = 0;
frequence_output(fre_set_hart, 50, PWM_HART); frequence_output(fre_set_hart, 50, PWM_HART);
} }
HART_24V_DISABLE;
HART_VOUT_DISABLE;
HART_250OHM_DISABLE;
} }
break; break;
@ -331,9 +335,29 @@ void start_rs485(void const * argument)
for (;;) for (;;)
{ {
//当前通讯状态的更新 //当前通讯状态的更新
if( !(tabdata.bluetooth_enable||tabdata.hart_enable||tabdata.modbus_enable) ) if(sig_trans == TRANS_NONE)
{ {
sig_trans = TRANS_NONE; if(uarts_status.ust_RS485 != HAL_OK)
{
uarts_status.ust_RS485 = HAL_UART_Receive_DMA(&huart2, scom2_rs485.rx_buff, BUFFER_SIZE);
}
if(uarts_status.ust_HART != HAL_OK)
{
uarts_status.ust_HART = HAL_UART_Receive_DMA(&huart1, scom1_hart.rx_buff, BUFFER_SIZE);
}
if(uarts_status.ust_BLE != HAL_OK)
{
uarts_status.ust_BLE = HAL_UART_Receive_DMA(&huart6, scom6_ble.rx_buff, BUFFER_SIZE);
}
}
else
{
if( !(tabdata.bluetooth_enable||tabdata.hart_enable||tabdata.modbus_enable) )
{
sig_trans = TRANS_NONE;
}
} }
//更新modbus的寄存器值 //更新modbus的寄存器值

View File

@ -121,9 +121,9 @@ int main(void)
HAL_TIM_Base_Start_IT(&htim8); HAL_TIM_Base_Start_IT(&htim8);
#if RX_DMA_ENABLE #if RX_DMA_ENABLE
HAL_UART_Receive_DMA(&huart1, scom1_hart.rx_buff, BUFFER_SIZE); uarts_status.ust_HART = HAL_UART_Receive_DMA(&huart1, scom1_hart.rx_buff, BUFFER_SIZE);
HAL_UART_Receive_DMA(&huart2, scom2_rs485.rx_buff, BUFFER_SIZE); uarts_status.ust_RS485 = HAL_UART_Receive_DMA(&huart2, scom2_rs485.rx_buff, BUFFER_SIZE);
HAL_UART_Receive_DMA(&huart6, scom6_ble.rx_buff, BUFFER_SIZE); uarts_status.ust_BLE = HAL_UART_Receive_DMA(&huart6, scom6_ble.rx_buff, BUFFER_SIZE);
#endif #endif
/* USER CODE END 2 */ /* USER CODE END 2 */

View File

@ -540,8 +540,7 @@ void proc_huart_it(UART_HandleTypeDef *huart)
sig_trans = TRANS_NONE; sig_trans = TRANS_NONE;
__HAL_UART_CLEAR_IDLEFLAG(huart); __HAL_UART_CLEAR_IDLEFLAG(huart);
HAL_UART_DMAStop(huart); __HAL_UART_CLEAR_FLAG(huart, UART_FLAG_RXNE);
HAL_UART_Receive_DMA(huart, scom->rx_buff, BUFFER_SIZE);
return; return;
} }
@ -597,9 +596,22 @@ void proc_huart_it_dma(UART_HandleTypeDef *huart)
//端口选择 //端口选择
st_scom *scom; st_scom *scom;
if(huart == &huart1) scom = &scom1_hart; HAL_StatusTypeDef *scom_sts;
if(huart == &huart6) scom = &scom6_ble; if(huart == &huart1)
if(huart == &huart2) scom = &scom2_rs485; {
scom = &scom1_hart;
scom_sts = &uarts_status.ust_HART;
}
else if(huart == &huart6)
{
scom = &scom6_ble;
scom_sts = &uarts_status.ust_BLE;
}
else if(huart == &huart2)
{
scom = &scom2_rs485;
scom_sts = &uarts_status.ust_RS485;
}
if( !scom ) return; if( !scom ) return;
//对应功能是否使能 //对应功能是否使能
@ -611,7 +623,7 @@ void proc_huart_it_dma(UART_HandleTypeDef *huart)
sig_trans = TRANS_NONE; sig_trans = TRANS_NONE;
__HAL_UART_CLEAR_IDLEFLAG(huart); __HAL_UART_CLEAR_IDLEFLAG(huart);
HAL_UART_DMAStop(huart); HAL_UART_DMAStop(huart);
HAL_UART_Receive_DMA(huart, scom->rx_buff, BUFFER_SIZE); *scom_sts = HAL_UART_Receive_DMA(huart, scom->rx_buff, BUFFER_SIZE);
return; return;
} }

View File

@ -270,6 +270,11 @@
<WinNumber>1</WinNumber> <WinNumber>1</WinNumber>
<ItemText>cali_paras</ItemText> <ItemText>cali_paras</ItemText>
</Ww> </Ww>
<Ww>
<count>23</count>
<WinNumber>1</WinNumber>
<ItemText>uarts_status</ItemText>
</Ww>
</WatchWindow1> </WatchWindow1>
<WatchWindow2> <WatchWindow2>
<Ww> <Ww>

File diff suppressed because it is too large Load Diff