增加了屏幕显示的封装驱动,日志输出,电机挡位控制

This commit is contained in:
2026-02-05 13:06:01 +08:00
parent 22380b09a1
commit f275a5aad9
194 changed files with 65750 additions and 45 deletions

189
Core/Src/screen.c Normal file
View File

@@ -0,0 +1,189 @@
/* USER CODE BEGIN Header */
/**
******************************************************************************
* @file screen.c
* @brief 串口屏驱动实现JC系列使用 USART1
******************************************************************************
*/
/* USER CODE END Header */
#include "screen.h"
#include "main.h"
#include "usart.h"
#include "cmsis_os.h"
#include <string.h>
#include <stdio.h>
/* 模块初始化:不要使用 MP3 的二进制初始化指令,改为屏幕清屏作为默认初始化 */
/* 发送缓冲 */
static char txbuf[256];
/**
* @brief 发送字符串到串口屏(阻塞直到发送完成)
* @param cmd: 要发送的C字符串不强制包含结尾CR/LF
* @retval 0=OK, <0=错误
*/
int Screen_SendCmd(const char *cmd) {
if (cmd == NULL) return -1;
size_t len = strlen(cmd);
if (len == 0) return -1;
HAL_StatusTypeDef st = HAL_UART_Transmit(&huart1, (uint8_t *)cmd, (uint16_t)len, HAL_MAX_DELAY);
return (st == HAL_OK) ? 0 : -2;
}
/**
* @brief 发送命令并等待模块返回 "OK\r\n"超时返回非0
*/
int Screen_SendCmdWaitOK(const char *cmd, uint32_t timeout_ms) {
(void)timeout_ms;
/* 保留接口:当前不等待屏幕回包,直接发送后返回发送状态 */
return Screen_SendCmd(cmd);
}
void Screen_Init(void) {
/*
* 屏幕初始化:简单实现为上电等待并清除屏幕
* 若需要按照厂商例程发送更多配置指令,可在此扩展
*/
osDelay(1000);
Screen_Clear(0);
osDelay(200);
}
/* 简单封装接口示例 */
void Screen_Clear(uint8_t layer) {
sprintf(txbuf, "DIR(1);CLR(%u);\r\n", (unsigned)layer);
Screen_SendCmd(txbuf);
}
void Screen_DisplayImage(uint32_t addr) {
sprintf(txbuf, "DIR(1);FSIMG(%lu,0,0,128,128,0);\r\n", (unsigned long)addr);
Screen_SendCmd(txbuf);
}
void Screen_SetBrightness(uint8_t val) {
sprintf(txbuf, "BL(%u);\r\n", (unsigned)val);
Screen_SendCmd(txbuf);
}
void Screen_DrawText16(uint16_t x, uint16_t y, const char *text, uint8_t color) {
sprintf(txbuf, "SBC(%u);DC16(%u,%u,'%s',%u);\r\n", (unsigned)color, (unsigned)x, (unsigned)y, text, (unsigned)color);
Screen_SendCmd(txbuf);
}
/* 额外封装实现 */
/* 以下为屏幕命令封装函数实现,均以字符串形式发送到串口屏 */
/* 函数内部不等待屏幕回包,调用者若需确认执行结果请自行实现回包处理 */
void Screen_SetRotation(uint8_t dir) {
sprintf(txbuf, "DIR(%u);\r\n", dir);
Screen_SendCmd(txbuf);
}
void Screen_SetBaud(uint32_t baud) {
sprintf(txbuf, "BPS(%lu);\r\n", (unsigned long)baud);
Screen_SendCmd(txbuf);
}
void Screen_DisplayImageAtAddr(uint32_t addr, uint16_t x, uint16_t y, uint16_t w, uint16_t h, uint8_t mode) {
sprintf(txbuf, "FSIMG(%lu,%u,%u,%u,%u,%u);\r\n", (unsigned long)addr, (unsigned)x, (unsigned)y, (unsigned)w, (unsigned)h, (unsigned)mode);
Screen_SendCmd(txbuf);
}
void Screen_DisplayImageByIndex(uint32_t index, uint16_t x, uint16_t y, uint16_t w, uint16_t h, uint8_t mode) {
sprintf(txbuf, "FSIMG(%u,%u,%u,%u,%u,%u);\r\n", (unsigned)index, (unsigned)x, (unsigned)y, (unsigned)w, (unsigned)h, (unsigned)mode);
Screen_SendCmd(txbuf);
}
void Screen_Pixel(uint16_t x, uint16_t y, uint8_t color) {
sprintf(txbuf, "PS(%u,%u,%u);\r\n", (unsigned)x, (unsigned)y, (unsigned)color);
Screen_SendCmd(txbuf);
}
void Screen_Line(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, uint8_t color) {
sprintf(txbuf, "PL(%u,%u,%u,%u,%u);\r\n", (unsigned)x1, (unsigned)y1, (unsigned)x2, (unsigned)y2, (unsigned)color);
Screen_SendCmd(txbuf);
}
void Screen_Box(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, uint8_t color) {
sprintf(txbuf, "BOX(%u,%u,%u,%u,%u);\r\n", (unsigned)x1, (unsigned)y1, (unsigned)x2, (unsigned)y2, (unsigned)color);
Screen_SendCmd(txbuf);
}
void Screen_BoxFill(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, uint8_t color) {
sprintf(txbuf, "BOXF(%u,%u,%u,%u,%u);\r\n", (unsigned)x1, (unsigned)y1, (unsigned)x2, (unsigned)y2, (unsigned)color);
Screen_SendCmd(txbuf);
}
void Screen_Circle(uint16_t x, uint16_t y, uint16_t r, uint8_t color) {
sprintf(txbuf, "CIR(%u,%u,%u,%u);\r\n", (unsigned)x, (unsigned)y, (unsigned)r, (unsigned)color);
Screen_SendCmd(txbuf);
}
void Screen_CircleFill(uint16_t x, uint16_t y, uint16_t r, uint8_t color) {
sprintf(txbuf, "CIRF(%u,%u,%u,%u);\r\n", (unsigned)x, (unsigned)y, (unsigned)r, (unsigned)color);
Screen_SendCmd(txbuf);
}
void Screen_SetBGColor(uint8_t color) {
sprintf(txbuf, "SBC(%u);\r\n", (unsigned)color);
Screen_SendCmd(txbuf);
}
void Screen_DrawText16V(uint16_t x, uint16_t y, const char *text, uint8_t color) {
sprintf(txbuf, "DCV16(%u,%u,'%s',%u);\r\n", (unsigned)x, (unsigned)y, text, (unsigned)color);
Screen_SendCmd(txbuf);
}
void Screen_DrawText24(uint16_t x, uint16_t y, const char *text, uint8_t color) {
sprintf(txbuf, "DC24(%u,%u,'%s',%u);\r\n", (unsigned)x, (unsigned)y, text, (unsigned)color);
Screen_SendCmd(txbuf);
}
void Screen_DrawText24V(uint16_t x, uint16_t y, const char *text, uint8_t color) {
sprintf(txbuf, "DCV24(%u,%u,'%s',%u);\r\n", (unsigned)x, (unsigned)y, text, (unsigned)color);
Screen_SendCmd(txbuf);
}
void Screen_DrawText32(uint16_t x, uint16_t y, const char *text, uint8_t color) {
sprintf(txbuf, "DC32(%u,%u,'%s',%u);\r\n", (unsigned)x, (unsigned)y, text, (unsigned)color);
Screen_SendCmd(txbuf);
}
void Screen_DrawText32V(uint16_t x, uint16_t y, const char *text, uint8_t color) {
sprintf(txbuf, "DCV32(%u,%u,'%s',%u);\r\n", (unsigned)x, (unsigned)y, text, (unsigned)color);
Screen_SendCmd(txbuf);
}
void Screen_DrawText48(uint16_t x, uint16_t y, const char *text, uint8_t color, uint8_t transparent) {
sprintf(txbuf, "DC48(%u,%u,'%s',%u,%u);\r\n", (unsigned)x, (unsigned)y, text, (unsigned)color, (unsigned)transparent);
Screen_SendCmd(txbuf);
}
void Screen_Button(uint16_t x, uint16_t y, uint16_t w, uint16_t h, const char *label, uint8_t fontColor, uint8_t bgColor, uint8_t pressFlag, uint8_t style) {
sprintf(txbuf, "BTN(%u,%u,%u,%u,'%s',%u,%u,%u,%u);\r\n", (unsigned)x, (unsigned)y, (unsigned)w, (unsigned)h, label, (unsigned)fontColor, (unsigned)bgColor, (unsigned)pressFlag, (unsigned)style);
Screen_SendCmd(txbuf);
}
void Screen_QRCode(uint16_t x, uint16_t y, const char *url) {
sprintf(txbuf, "QRCODE(%u,%u,%s);\r\n", (unsigned)x, (unsigned)y, url);
Screen_SendCmd(txbuf);
}
void Screen_QRCodeEx(uint16_t x, uint16_t y, const char *url, uint16_t size, uint8_t color) {
sprintf(txbuf, "QRCODE(%u,%u,%s,%u,%u);\r\n", (unsigned)x, (unsigned)y, url, (unsigned)size, (unsigned)color);
Screen_SendCmd(txbuf);
}
void Screen_Ver(void) {
sprintf(txbuf, "VER();\r\n");
Screen_SendCmd(txbuf);
}
/* USER CODE BEGIN AdditionalFunctions */
/* 可以在这里扩展更多绘图/控件函数供应用层调用 */
/* USER CODE END AdditionalFunctions */
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/