Files
stc32g128k/App/system.h

133 lines
3.7 KiB
C
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#ifndef __SYSTEM_H__
#define __SYSTEM_H__
#include "config.h"
/* ====== GPIO 与外设初始化接口 ====== */
/**
* @brief 系统 GPIO 端口模式初始化配置
* @details 将按键引脚 (KEY_UP, KEY_DOWN, KEY_CONFIRM, KEY_SOS) 配置为高阻输入模式,
* 并将输出控制引脚 (MOTOR, RGB_DIN, SGM_CTRL, SHUT, 以及 LCD 屏幕 SPI 管脚)
* 配置为推挽输出模式,建立系统初始电气环境。
*/
void GPIO_Init(void);
/**
* @brief 初始化 UART1 (串口 1)
* @details 设定波特率为 115200 bps (使用定时器 2 做波特率发生器1T 模式,系统时钟为 24.0 MHz)
* 主要用于输出系统调试日志、监控按键与射频接收状态。
*/
void Uart1_Init(void);
/* ====== 阻塞式精确延时工具函数 ====== */
/**
* @brief 阻塞毫秒级延时函数
* @param ms 延时时长 (单位: 毫秒)
*/
void Delay_ms(u16 ms);
/**
* @brief 阻塞 10 微秒延时函数 (汇编级精确延时)
*/
void Delay10us(void);
/**
* @brief 阻塞微秒级延时函数
* @param us 延时时长 (单位: 微秒)
*/
void Delay_us(u16 us);
/**
* @brief 获取安全的 Timer0 计数器值 (暂未使用)
*/
u16 GetTimer0_Safe(void);
/* ====== 串口数据打印与日志辅助函数 ====== */
/**
* @brief 串口 1 发送 1 个字节数据
* @param dat 待发送的字节数据
*/
void Uart_SendByte(u8 dat);
/**
* @brief 串口 1 发送以 '\0' 结尾的字符串
* @param s 目标字符串指针
*/
void Uart_SendString(char *s);
/**
* @brief 串口 1 非阻塞接收字符
* @return char 接收到的字符。若接收缓冲区为空,则立即返回 '\0'。
*/
char Uart_RxChar(void);
/**
* @brief 串口 1 打印输出 4 位十六进制数 (半字节0x0~0xF)
*/
void Uart_SendHex4(u8 val);
/**
* @brief 串口 1 打印输出 8 位十六进制数 (单字节0x00~0xFF)
*/
void Uart_SendHex8(u8 val);
/**
* @brief 串口 1 打印输出 16 位十六进制数 (双字节0x0000~0xFFFF)
*/
void Uart_SendHex16(u16 val);
/**
* @brief 串口 1 打印输出 20 位十六进制数 (主要用于射频解码输出5位十六进制格式)
*/
void Uart_SendHex20(u32 val);
/**
* @brief 串口 1 打印输出 32 位十六进制数 (双字8位十六进制格式)
*/
void Uart_SendHex32(u32 val);
/**
* @brief 格式化 32 位数为 8 位十六进制字符串
* @param val 要格式化的 32 位数值
* @param buf 输出目标字符数组指针 (至少保留 9 字节空间)
*/
void FormatHex(u32 val, char *buf);
/* ====== 电源管理与休眠/唤醒流程接口 ====== */
/**
* @brief 系统切入低功耗深度休眠 (Power-Down Sleep)
* @details 负责关闭马达与灯光,保存当前运行的 App 现场,关闭屏幕的供电与复位,
* 并将 GPIO 端口的按键外部中断唤醒源以及射频中断唤醒源进行配置,
* 最终拉低 SHUT置位单片机的 PCON 寄存器切入停机低功耗状态。
*/
void Enter_Low_Power_Sleep(void);
/**
* @brief 从低功耗休眠被中断唤醒后的系统恢复流程
* @details 当检测到外部中断触发硬件唤醒后首先将供电芯片使能拉高SHUT=1
* 阻塞延时 50ms 避开冲击电流浪涌,随后重新初始化屏幕 RM69310 的全部控制寄存器,
* 并重置闲置休眠计数器,启动时钟应用恢复主界面的正常显示与事件分发。
*/
void Wakeup_Restore(void);
/**
* @brief 系统开机上电硬件自检函数
* @details 检测 PWR_HOLD 锁存状态、ADC 采样基准与串口通讯,输出完整自检 report
*/
void Self_Test(void);
/**
* @brief 执行关机断电流程
* @details 关断外设、震动提示并拉低 PWR_HOLD 引脚切断总电源
*/
void Power_Off(void);
#endif // __SYSTEM_H__