/** * @file app_cfg.h * @brief 应用任务、Modbus 通信和状态寄存器配置。 * @version 2.0 * @author zengbingjie * @date 2026-07-29 * @copyright 版权所有信捷科技股份有限公司 * @note 修改记录:2.0 增加 Modbus RTU 从站任务配置。 */ #ifndef APP_CFG_H #define APP_CFG_H #define CPU_CFG_KA_IPL_BOUNDARY (4U) #define CPU_CFG_NVIC_PRIO_BITS (4U) #define APP_TASK_MODBUS_PRIO (4U) #define APP_TASK_START_PRIO (5U) #define APP_TASK_T35_PRIO (6U) /* uC/OS-II 定时器管理任务使用低优先级保留任务槽。 */ #define OS_TASK_TMR_PRIO (OS_LOWEST_PRIO - 2U) #define APP_TASK_START_STK_SIZE (128U) #define APP_TASK_MODBUS_STK_SIZE (384U) #define APP_TASK_T35_STK_SIZE (128U) /* USART1 使用 115200 bit/s、8E1:1 个起始位、8 个数据位、偶校验和 1 个停止位。 */ #define APP_MODBUS_BAUD_RATE (115200U) #define APP_MODBUS_BITS_PER_CHARACTER (10U) /* 向上取整的单字符时间,确保计时不会短于实际串行字符。 */ #define APP_MODBUS_RTU_CHARACTER_TIME_US \ (((APP_MODBUS_BITS_PER_CHARACTER * 1000000U) \ + APP_MODBUS_BAUD_RATE - 1U) / APP_MODBUS_BAUD_RATE) /* 高于 19200 bit/s 时遵循 Modbus RTU 的固定 750 us / 1750 us 时序。 */ #define APP_MODBUS_RTU_T15_US \ ((APP_MODBUS_BAUD_RATE > 19200U) ? 750U : \ ((3U * APP_MODBUS_RTU_CHARACTER_TIME_US + 1U) / 2U)) #define APP_MODBUS_RTU_T35_US \ ((APP_MODBUS_BAUD_RATE > 19200U) ? 1750U : \ ((7U * APP_MODBUS_RTU_CHARACTER_TIME_US + 1U) / 2U)) #define APP_MODBUS_RTU_T15_RX_TIMEOUT_US \ (APP_MODBUS_RTU_T15_US + APP_MODBUS_RTU_CHARACTER_TIME_US) #define APP_MODBUS_RTU_T35_AFTER_T15_US \ (APP_MODBUS_RTU_T35_US - APP_MODBUS_RTU_T15_RX_TIMEOUT_US) /* TIM5 使用 1 MHz 计数基准,将 RTU 静默时间直接表示为微秒。 */ #define APP_MODBUS_RTU_TIMER_CLOCK_HZ (84000000U) #define APP_MODBUS_RTU_TIMER_TICK_HZ (1000000U) #define APP_MODBUS_STATUS_CHECK_TICKS (1U) #define APP_MODBUS_STATUS_UPDATE_TICKS (100U) #define APP_MODBUS_LINK_TIMEOUT_TICKS (3000U) #define APP_MODBUS_TX_TIMEOUT_TICKS (100U) /* 线圈 0 是链路状态;线圈 1 至 7 映射为实际 Q1 至 Q7 输出。 */ #define APP_MODBUS_OUTPUT_COIL_COUNT (8U) #define APP_MODBUS_FIRST_USER_OUTPUT_COIL (1U) #define APP_MODBUS_USER_OUTPUT_COIL_COUNT \ (APP_MODBUS_OUTPUT_COIL_COUNT - APP_MODBUS_FIRST_USER_OUTPUT_COIL) #define APP_MODBUS_LINK_STATE_COIL (100U) /* 链路状态由最近一次已寻址的有效 Modbus 请求决定。 */ #define APP_MODBUS_LINK_DISCONNECTED (0U) #define APP_MODBUS_LINK_CONNECTED (1U) #endif