feat(DLD154Pro): RS485 700BS 从机协议实现

新增 rs485_700bs.c/h:
  - UART0 9600 8N1 中断接收, PA13 方向控制
  - 命令处理: 0xFA(状态)/0x1B(频率)/0x2C(复位)/0x3D(拨码)
  - 心跳上报: 0xAA 空闲5s/故障1s/事件立即
  - XOR 校验, 地址匹配 (g_rs485_id)
  - 0x2C 复位: loop1_LC_Reset + INI_LOOP 完整初始化

集成 peripheral_main.c:
  - rs485_init() 替换 GPIO placeholder
  - rs485_poll() 加入主循环 (cjq_srv 之后)
This commit is contained in:
wangfq
2026-07-23 18:51:30 +08:00
parent 08df2ea6d7
commit ab469315bf
3 changed files with 352 additions and 10 deletions
@@ -29,6 +29,7 @@
#include "cmcng.h"
#include "dbn_ble_srv.h"
#include "CH59x_pwm.h"
#include "rs485_700bs.h"
uint8_t g_flag_bt_state = 0; // 0 蓝牙没有连接,1 有蓝牙连接
@@ -51,9 +52,9 @@ uint8_t g_rs485_id = 0;
* PB22 : LEDA 绿色指示灯 (有车亮/无车灭, 低电平有效)
* PB23 : LEDB 红色指示灯 (呼吸灯, 低电平有效)
* PA12 : FLEVEL 线圈调频 (一级, 0=33nF, 1=0nF)
* PA14 : UART0_Tx RS485发送 (协议待定)
* PA15 : UART0_Rx RS485接收 (协议待定)
* PA13 : UART0_RE RS485方向控制 (协议待定)
* PA14 : UART0_Tx RS485发送 (700BS 协议)
* PA15 : UART0_Rx RS485接收 (700BS 协议)
* PA13 : UART0_RE RS485方向控制 (700BS 协议)
* PB10 : IN_1 光耦输入 (逻辑待定)
*===========================================================================*/
#define RLY1_ON (R32_PA_OUT |= BV(8))
@@ -69,7 +70,7 @@ uint8_t g_rs485_id = 0;
#define FLEVEL_LOW (R32_PA_OUT &= ~BV(12))
#define FLEVEL_HIGH (R32_PA_OUT |= BV(12))
/* RS485 预留 (协议待定) */
/* RS485 700BS 协议 (2026-07-23) */
#define RS485_TX_PIN GPIO_Pin_14
#define RS485_RX_PIN GPIO_Pin_15
#define RS485_RE_PIN GPIO_Pin_13
@@ -391,12 +392,7 @@ void tm_init(void){
void gpio_uart_init(void)
{
/*--- RS485 通信 (PA14=TX, PA15=RX, PA13=RE) ---*/
/* 协议待定, 仅初始化引脚, 暂不配置 UART0 */
GPIOA_SetBits(GPIO_Pin_14);
GPIOA_ModeCfg(GPIO_Pin_14, GPIO_ModeOut_PP_5mA); // RS485 TX
GPIOA_ModeCfg(GPIO_Pin_15, GPIO_ModeIN_PU); // RS485 RX
GPIOA_SetBits(GPIO_Pin_13);
GPIOA_ModeCfg(GPIO_Pin_13, GPIO_ModeOut_PP_5mA); // RS485 RE (默认接收模式)
/* 由 rs485_init() 统一初始化 UART0 + GPIO + 中断 */
/*--- 光耦输入 (PB10=IN_1) ---*/
/* 逻辑待定, 仅初始化引脚为输入上拉 */
@@ -873,6 +869,8 @@ void Main_Circulation()
cjq_srv();
rs485_poll(); // RS485 700BS 协议: 命令处理 + 心跳上报
if(g_flag_bt_state == 0){
// 如果蓝牙断开,主动上报需要禁用
if(g_dbn_ble_state_acs_enable.enable){