This commit is contained in:
haifeng.wang 2025-05-07 10:50:40 +08:00
parent 5d3d57d9e0
commit 8a63ec1d44
4 changed files with 49 additions and 75 deletions

View File

@ -564,11 +564,11 @@ static void MX_UART4_Init(void)
LL_GPIO_Init(GPIOA, &GPIO_InitStruct);
/* UART4 interrupt Init */
// NVIC_SetPriority(UART4_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(),5, 0));
// NVIC_EnableIRQ(UART4_IRQn);
NVIC_SetPriority(UART4_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(),5, 0));
NVIC_EnableIRQ(UART4_IRQn);
/* USER CODE BEGIN UART4_Init 1 */
huart4.RxISR = Slave_IRQHandler;
/* USER CODE END UART4_Init 1 */
USART_InitStruct.BaudRate = 9600;
USART_InitStruct.DataWidth = LL_USART_DATAWIDTH_8B;
@ -579,9 +579,21 @@ static void MX_UART4_Init(void)
USART_InitStruct.OverSampling = LL_USART_OVERSAMPLING_16;
LL_USART_Init(UART4, &USART_InitStruct);
LL_USART_ConfigAsyncMode(UART4);
// LL_USART_EnableDEMode(USART3);
// LL_USART_SetDESignalPolarity(USART3, LL_USART_DE_POLARITY_HIGH);
// LL_USART_SetDEAssertionTime(USART3, 0);
// LL_USART_SetDEDeassertionTime(USART3, 0);
// LL_USART_ConfigAsyncMode(USART3);
SET_BIT(UART4->CR1, USART_CR1_PEIE | USART_CR1_RXNEIE);
LL_USART_Enable(UART4);
/* USER CODE BEGIN UART4_Init 2 */
// LL_USART_Init(USART3, &USART_InitStruct);
// LL_USART_Enable(USART3);
/* USER CODE END UART4_Init 2 */
}

View File

@ -671,8 +671,8 @@ void Form_Task(void *p_arg)
data.oper = DWIN_OPER_WRITE;
data.Addr = gridBox.hdrAddr;
sprintf(data.str, " %11s %13s %11s %13s %11s %13s ",
" BOX ", " PSN "," BOX ", " PSN "," BOX ", " PSN ");
sprintf(data.str, " %11s %13s %11s %13s %11s %13s ",
"BOX ", "PSN "," BOX ", "PSN "," BOX ", "PSN ");
data.count = strlen(data.str);
DWIN_Refresh(&data);

View File

@ -153,24 +153,24 @@ void Modbus_Task(void *p_arg)
// 处理modbus rtu命令已经验证过长度和CRC的包
void MODBUS_RTU_CMD(modbus_request_t *req)
{
// static uint8_t BUFF[(MODBUS_LAST_REG - MODBUS_1ST_REG + 1) * 2 + 6]; // 响应包
// uint8_t err = 0; // 错误代码
// uint8_t len = 0; // 发送数据长度
static uint8_t BUFF[100]; // 响应包
uint8_t err = 0; // 错误代码
uint8_t len = 0; // 发送数据长度
// uint16_t id; // 通信地址
// uint16_t reg; // 数据地址
// uint16_t cnt; // 数据个数
// uint16_t crc;
uint16_t id; // 通信地址
uint16_t reg; // 数据地址
uint16_t cnt; // 数据个数
uint16_t crc;
// // 检查通信地址
// if(req->id != dcBuff.configBottle.addr && req->id != 0)
// return;
//
// // 清空发送帧
// memset(BUFF, 0, sizeof(BUFF));
// 检查通信地址
if(req->id != dcBuff.configBottle.addr && req->id != 0)
return;
// 清空发送帧
memset(BUFF, 0, sizeof(BUFF));
// BUFF[len++] = dcBuff.configBottle.addr; // 从机地址
// BUFF[len++] = req->cmd; // 命令代码
BUFF[len++] = dcBuff.configBottle.addr; // 从机地址
BUFF[len++] = req->cmd; // 命令代码
// reg = ntohs(req->reg); // 数据寄存器
// if(req->cmd == 0x03 || req->cmd == 0x06)
@ -180,10 +180,10 @@ void MODBUS_RTU_CMD(modbus_request_t *req)
// else
// err = MODBUS_ERR_ILF; // 无效功能码
//
// if(err == 0)
// {
// if(req->cmd == 0x03) // 读保持数据
// {
if(err == 0)
{
if(req->cmd == 0x03) // 读保持数据
{
// cnt = ntohs(req->cnt); // 参数个数
// if(reg != MODBUS_ADR_REG || cnt != 1)
// err = MODBUS_ERR_NAK; // 命令无法执行
@ -195,46 +195,8 @@ void MODBUS_RTU_CMD(modbus_request_t *req)
// memmove(BUFF + len, (uint8_t *) &id, 2);
// len += 2;
// }
// }
// else if(req->cmd == 0x06) // 设置数据
// {
// if(reg != MODBUS_ADR_REG)
// err = MODBUS_ERR_NAK; // 命令无法执行
// else
// {
// id = ntohs(req->data);
// if(id < 1 || id > 247)
// err = MODBUS_ERR_ILD; // 无效数据值
// else
// {
// // 设置地址并保存
// dcBuff.configBottle.addr = id;
// Config_SaveConfig();
//
// BUFF[0] = id; // 新地址
// memmove(BUFF + len, &req->reg, 4); // 数据地址和通讯地址
// len += 4;
// }
// }
// }
// else if(req->cmd == 0x04) // 读输入数据
// {
// cnt = ntohs(req->cnt); // 参数个数
// if(reg < MODBUS_1ST_REG || reg > MODBUS_LAST_REG || cnt < 1 || reg + (cnt - 1) > MODBUS_LAST_REG)
// err = MODBUS_ERR_NAK; // 命令无法执行
// else
// {
// // 用最新的采集数据刷新缓冲
// if(!Fill_MODBUS_RTU_Buf())
// return;
//
// BUFF[len++] = cnt * 2; // 数据长度
// memmove(BUFF + len, MODBUS_RTU_Buf + (reg - MODBUS_1ST_REG) * 2, cnt * 2);
// len += cnt * 2;
// }
// }
// }
}
}
//
// if(err != 0)
// {
@ -242,18 +204,18 @@ void MODBUS_RTU_CMD(modbus_request_t *req)
// BUFF[len++] = err; // 错误代码
// }
// // 计算CRC
// crc = MODBUS_RTU_CRC16(BUFF, len);
// crc = htons(crc);
// 计算CRC
crc = MODBUS_RTU_CRC16(BUFF, len);
crc = htons(crc);
// memmove(BUFF + len, &crc, 2);
// len += 2;
memmove(BUFF + len, &crc, 2);
len += 2;
// if(req->id != 0)
// {
// // 发送应答
// RS485_SendDataByte(BUFF, len);
// }
if(req->id != 0)
{
// 发送应答
RS485_SendDataByte(BUFF, len);
}
}
// 任务主体

View File

@ -10,7 +10,7 @@ void Modbus_Open();
void Modbus_Task(void *p_arg);
// Modbus(RS485接口工作模式单向发送向上位机发送数据, 每30秒向上位机发送一个心跳。
void Slave_IRQHandler(USART_Handle *huart);
// RF串口发送帧的循环缓冲
extern loopbuff_t Modbus_SendM;
// RF串口接收的消息通知