调试key LCD rs485都正常运行,修复了bug,但是DMA接收的问题没有解决
This commit is contained in:
@@ -36,9 +36,9 @@
|
||||
/* ============================================================================
|
||||
* 轮询与超时常量
|
||||
* ============================================================================ */
|
||||
#define RS485_RT_COUNT_MAX (55) /**< 实时轮询计数上限,约 275ms(55×5ms) */
|
||||
#define RS485_ACK_COUNT_MAX (40) /**< 应答超时计数上限,约 200ms(40×5ms) */
|
||||
#define RS485_ACK_OVERTIME_MAX (5) /**< 连续应答超时次数上限,超过则重初始化 RS485 */
|
||||
#define RS485_RT_COUNT_MAX (55) /**< 实时轮询计数上限,约 275ms(55×5ms) */
|
||||
#define RS485_ACK_COUNT_MAX (40) /**< 应答超时计数上限,约 200ms(40×5ms) */
|
||||
#define RS485_ACK_OVERTIME_MAX (5) /**< 连续应答超时次数上限,超过则重初始化 RS485 */
|
||||
|
||||
/* ============================================================================
|
||||
* 数据结构定义
|
||||
@@ -256,40 +256,34 @@ void NL_LOGO_Printf(void)
|
||||
* 2. 其他图片
|
||||
* @retval 无
|
||||
*/
|
||||
uint8_t RS485_Process(KEY_TYPE key, uint8_t flag)
|
||||
void RS485_Process(KEY_TYPE key)
|
||||
{
|
||||
static KEY_TYPE key_bk = KEY_NONE; /* 按键备份(静态变量,保持状态) */
|
||||
static uint8_t LED_BUFF[4]; /* LED状态缓冲区(静态变量) */
|
||||
static uint8_t info[8]; /* 命令信息缓冲区(静态变量) */
|
||||
static uint32_t CRC_ERR_COUNT = 0; /* CRC错误计数(静态变量) */
|
||||
uint8_t ConnectFlg = flag;
|
||||
|
||||
/* 按键处理:保存按键值 */
|
||||
if(key != KEY_NONE)
|
||||
{
|
||||
if(key_bk != key) /* 按键值变化时更新备份 */
|
||||
{
|
||||
key_bk = key;
|
||||
}
|
||||
key_bk = key;
|
||||
}
|
||||
|
||||
if(RS485REG.NewMessageFlag) /* 接收到新消息 */
|
||||
{
|
||||
RS485REG.NewMessageFlag = RESET; /* 清除控制字 */
|
||||
|
||||
ConnectFlg = 1; /* 设置连接标志 */
|
||||
if(Check_CRC((uint8_t*)&RS485REG.DR[0], UART_RX_LEN) == TRUE) /* CRC校验通过 */
|
||||
{
|
||||
CRC_ERR_COUNT = 0; /* 重置CRC错误计数 */
|
||||
memcpy(Picture, (uint8_t*)RS485REG.DR, 3200); /* 提取图片数据(前3200字节) */
|
||||
memcpy(Picture, (uint8_t*)RS485REG.DR, 3200); /* 提取图片数据(前3200字节) */
|
||||
memcpy(info, (uint8_t*)RS485REG.DR + 3200, 8); /* 提取命令信息(后8字节) */
|
||||
|
||||
if(info[4] == 0x89 && info[5] == 0x45) /* LOGO图片命令(特殊标识) */
|
||||
if(info[4] == 0x89 && info[5] == 0x45) /* LOGO图片命令(特殊标识) */
|
||||
{
|
||||
memcpy(logo.bmpdata, Picture, 3200); /* 复制图片到LOGO结构体 */
|
||||
memcpy(logo.bmpdata, Picture, 3200); /* 复制图片到LOGO结构体 */
|
||||
logo.biWidth = info[0] << 8 | info[1]; /* 解析图片宽度(高字节左移8位 + 低字节) */
|
||||
logo.biHeight = info[2] << 8 | info[3]; /* 解析图片高度(高字节左移8位 + 低字节) */
|
||||
BMP_SAVE2False(); /* 保存 BMP 图片到 Flash */
|
||||
BMP_SAVE2False(); /* 保存 BMP 图片到 Flash */
|
||||
|
||||
/* 显示LOGO */
|
||||
BackLight_ON(); /* 开启背光 */
|
||||
@@ -309,11 +303,14 @@ uint8_t RS485_Process(KEY_TYPE key, uint8_t flag)
|
||||
}
|
||||
else /* CRC校验失败 */
|
||||
{
|
||||
CRC_ERR_COUNT++; /* CRC错误计数递增 */
|
||||
CRC_ERR_COUNT++; /* CRC错误计数递增 */
|
||||
if(CRC_ERR_COUNT >= 3) /* 连续3次CRC错误 */
|
||||
{
|
||||
/* 接收错位,重新初始化接收 */
|
||||
RS485_DMA_init(); /* 重新初始化*/
|
||||
// RS485_DMA_DeInit();
|
||||
// delay_ms(500);
|
||||
// delay_ms(500);
|
||||
// RS485_DMA_init(); /* 重新初始化*/
|
||||
CRC_ERR_COUNT = 0; /* 重置CRC错误计数 */
|
||||
}
|
||||
}
|
||||
@@ -337,7 +334,6 @@ uint8_t RS485_Process(KEY_TYPE key, uint8_t flag)
|
||||
if(RS485POLL.RT_count > RS485_RT_COUNT_MAX) /* 定时到*/
|
||||
{
|
||||
RefreshScreen(RT_CMD, key_bk); /* 发送实时刷新命令 */
|
||||
key_bk = KEY_NONE; /* 清除按键备份 */
|
||||
}
|
||||
}
|
||||
|
||||
@@ -352,12 +348,9 @@ uint8_t RS485_Process(KEY_TYPE key, uint8_t flag)
|
||||
/* 连续超时处理:应答超时次数达到上限 */
|
||||
if((RS485POLL.ACK_OverTimeCnt >= RS485_ACK_OVERTIME_MAX)) /* 连续超时次数达到上限 */
|
||||
{
|
||||
ConnectFlg = 0;
|
||||
RS485POLL.ACK_OverTimeCnt = RS485_ACK_OVERTIME_MAX; /* 限制最大计数(防止溢出) */
|
||||
RS485_DMA_init(); /* 重新初始化RS485 */
|
||||
RS485POLL.ACK_OverTimeCnt = RS485_ACK_OVERTIME_MAX; /* 限制最大计数(防止溢出) */
|
||||
RS485POLL.CMD_ACK = SET; /* 设置命令应答标志(允许重新发送) */
|
||||
}
|
||||
return ConnectFlg;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -25,12 +25,11 @@
|
||||
/**
|
||||
* @brief Modbus 通信主处理函数(远程图片处理)
|
||||
* @param key 按键值(KEY_TYPE),用于上报按键事件
|
||||
* @param flag 连接标志(传入当前连接状态,用于更新)
|
||||
* @note 处理接收帧、按键上报、定时刷新、应答超时等;采用 138 端处理图片、
|
||||
* 整体上传显示的方式刷图。需在周期任务中调用。
|
||||
* @retval 更新后的连接标志(1=已连接,0=未连接/超时)
|
||||
* @retval
|
||||
*/
|
||||
uint8_t RS485_Process(KEY_TYPE key, uint8_t flag);
|
||||
void RS485_Process(KEY_TYPE key);
|
||||
|
||||
/**
|
||||
* @brief 从 Flash 读取 LOGO 并显示
|
||||
|
||||
Reference in New Issue
Block a user