www
This commit is contained in:
parent
5d3d57d9e0
commit
8a63ec1d44
|
|
@ -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 */
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
// 任务主体
|
||||
|
|
|
|||
|
|
@ -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串口接收的消息通知
|
||||
|
|
|
|||
Loading…
Reference in New Issue