基础版本

This commit is contained in:
bathfire
2026-04-27 16:55:02 +08:00
commit 64b3e488da
269 changed files with 383851 additions and 0 deletions
+176
View File
@@ -0,0 +1,176 @@
#include "config.h" //全局声明
/*_____ D E C L A R A T I O N ________________________________________________*/
void Print_Num(u8 GunNum,u8 Lin,u64 Num,u8 Dec)
{
volatile u8 i,j,D;
for(i = 22;i < 32;i ++)
TXHData.PrintInfo.PrintBuff[Lin][i] = 0x20;
for(i = 0;i< 16;i++)
{
if((Num>>(i*4)) == 0)
break;
}
if(i <= Dec && Dec > 0)
{
if(i == 0 )
i+=Dec;
i ++;
TXHData.PrintInfo.PrintBuff[Lin][30-i] = '0';
}
if(Dec)
{
D = 1;
TXHData.PrintInfo.PrintBuff[Lin][30- Dec] = '.';
}
for(j = 0;j < Dec; j++)
TXHData.PrintInfo.PrintBuff[Lin][30- j] = 0x30 + (((Num>>j*4)) & 0x00000000000f);
for(j = Dec+D;j < i + D; j++)
TXHData.PrintInfo.PrintBuff[Lin][30- (j+1-D)] = 0x30 + (((Num>>(j-D)*4)) & 0x00000000000f);
}
//********************************************************************************************************
//** 函数名称:print_init()
//** 函数功能:硬件初始化。
//** 入口参数:
//** 出口参数:字节数量
//*********************************************************************************************************/
uint8_t print_init(uint8_t *pData)
{
*pData++ = ESC;
*pData = 0x40;
return 2;
}
//********************************************************************************************************
//** 函数名称:printSetChinese()
//** 函数功能:设置中文打印
//** 入口参数:
//** 出口参数:字节数量
//*********************************************************************************************************/
uint8_t printChinese(uint8_t *pData)
{
*pData++ = 0X1C;
*pData++ = '&';
return 2;
}
//********************************************************************************************************
//** 函数名称:printCR()
//** 函数功能:打印当前所有,并走一行
//** 入口参数:
//** 出口参数:字节数量
//*********************************************************************************************************/
uint8_t printCR(uint8_t *pData)
{
*pData = PCR;
return 1;
}
//********************************************************************************************************
//** 函数名称:printLF()
//** 函数功能:走纸。
//** 入口参数:
//** 出口参数:字节数量
//*********************************************************************************************************/
uint8_t printLF(uint8_t *pData)
{
*pData = LF;
return 1;
}
//********************************************************************************************************
//** 函数名称:LFnRow()
//** 函数功能:执行N点行走纸。
//** 入口参数:行数
//** 出口参数:字节数量
//*********************************************************************************************************/
uint8_t LFnRow(uint8_t *pData,uint8_t row)
{
*pData++ = ESC;
*pData++ = J;
*pData = row;
return 3;
}
//********************************************************************************************************
//** 函数名称:setPageLen()
//** 函数功能:设置页长。
//** 入口参数:页长 (0表示256页)
//** 出口参数:字节数量
//*********************************************************************************************************/
uint8_t setPageLen(uint8_t *pData,uint8_t pageLen)
{
*pData++ = ESC;
*pData++ = 0x43;
*pData = pageLen;
return 3;
}
//********************************************************************************************************
//** 函数名称:setLeftSpace(uint8 spaceNumber)
//** 函数功能:设置左间距。
//** 入口参数:间距数
//** 出口参数:字节数量
//*********************************************************************************************************/
uint8_t setLeftSpace(uint8_t *pData,uint8_t spaceNumber)
{
*pData++ = ESC;
*pData++ = 0x6c;
*pData = spaceNumber;
return 3;
}
//********************************************************************************************************
//** 函数名称:setRightSpace(uint8 spaceNumber)
//** 函数功能:设置右间距。
//** 入口参数:间距数
//** 出口参数:字节数量
//*********************************************************************************************************/
uint8_t setRightSpace(uint8_t *pData,uint8_t spaceNumber)
{
*pData++ = ESC;
*pData++ = 0x51;
*pData = spaceNumber;
return 3;
}
//********************************************************************************************************
//** 函数名称:setWordSpace(uint8 wordSpace)
//** 函数功能:设置字间距。
//** 入口参数:间距数
//** 出口参数:字节数量
//*********************************************************************************************************/
uint8_t setWordSpace(uint8_t *pData, uint8_t wordSpace)
{
*pData++ = ESC;
*pData++ = 0x70;
*pData = wordSpace;
return 3;
}
//********************************************************************************************************
//** 函数名称:setRowSpace(uint8 rowSpace)
//** 函数功能:设置字间距。
//** 入口参数:间距数
//** 出口参数:字节数量
//*********************************************************************************************************/
uint8_t setRowSpace(uint8_t *pData, uint8_t rowSpace)
{
*pData++ = ESC;
*pData++ = 0x31;
*pData = rowSpace;
return 3;
}
//F*****************************************************************************
//* NAME:
//* PURPOSE:
//* PARAMS:
//* return:
//******************************************************************************
+75
View File
@@ -0,0 +1,75 @@
#ifndef __Printf_H_
#define __Printf_H_
//硬件定义
#define PrintfUsart USART3
#define Printf_DMA DMA1
#define Printf_TX_DMAAddrSet(x) (DMA1_Channel2->CMAR = x) //设置发送缓存地址
#define Printf_TX_DMALenSet(x) (DMA1_Channel2->CNDTR = x) //设置发送DMA长度
#define Printf_TX_DMAStart() DMA_Cmd(DMA1_Channel2,ENABLE) //开启发送DMA
#define Printf_TX_DMAStop() DMA_Cmd(DMA1_Channel2,DISABLE) //开启发送DMA
#define Printf_TX_DMAy_Channelx DMA1_Channel2 //Printf发送使用的DMA通道
#define USART3_Print GPIO_ResetBits(GPIOA,GPIO_Pin_4);//485接收使能
//=============================================================================
//字符定义
#define LF 0x0a //打印换行命令
#define ESC 0X1B
#define J 0x4A
#define DLE 0X10
#define EOT 0X04
#define PCR 0X0D
#define C_PrintPageLen 10 //定义页长
#define C_multiple 2 //放大倍数
#define C_leftSpace 1 //右限
#define C_rightSpace 0 //右限
#define C_wordSpace 1 //字间距
#define C_rowSpace 4 //行间距
typedef enum
{
noSend,
sending,
}printProStae_TypeDef;
//******************************************************************************
//*-------------- 变量声名 -----------------------------------------------------
//******************************************************************************
//******************************************************************************
//*-------------- 函数声名 -----------------------------------------------------
//******************************************************************************
extern void printUsartIsr(void);
extern void printTxDmaInt(void);
extern void printSend(u8 *pData, u8 len);
extern void Print_Num(u8 GunNum,u8 Lin,u64 Num,u8 Dec);
extern uint8_t print_init(uint8_t *pdata);
extern uint8_t printChinese(uint8_t *pData);
extern uint8_t printLF(uint8_t *pdata);
extern uint8_t printCR(uint8_t *pData);
extern uint8_t LFnRow(uint8_t *pData,uint8_t row);
extern uint8_t setPageLen(uint8_t *pData,uint8_t pageLen);
extern uint8_t setLeftSpace(uint8_t *pData,uint8_t spaceNumber);
extern uint8_t setRightSpace(uint8_t *pData,uint8_t spaceNumber);
extern uint8_t setWordSpace(uint8_t *pData, uint8_t wordSpace);
extern uint8_t setRowSpace(uint8_t *pData, uint8_t rowSpace);
typedef enum
{
PT_Null,
PT_LastRecord,
PT_Record,
}PrintItem;
extern void Printf_DMATX_IRQHandler(void);
extern void Printf_Init(void);
extern void PrintfTask(void);
void Printf_UpData(u8 GunNum, PrintItem Type);
#endif //#ifndef
+219
View File
@@ -0,0 +1,219 @@
/*C*****************************************************************************
* NAME: print.c
*-------------------------------------------------------------------------------
* RELEASE:
* REVISION: 1.0
*-------------------------------------------------------------------------------
* PURPOSE:
*
*******************************************************************************/
/*_____ I N C L U D E S ______________________________________________________*/
#include "main_def.h" //全局声明
uint8_t printBuf[gunNumber][C_printBuf];
uint32_t printQueue[gunNumber][C_printQueue];
volatile printProStae_TypeDef printState = noSend;
//******************************************************************************
// printUsartIsr(void) 打印串口中断
//******************************************************************************
void printUsartIsr(void)
{
//TC中断
if((printUsart->SR & USART_FLAG_TC) != 0)
{
// printUsart->CR1 &= ~USART_Mode_Tx;
printUsart->CR1 &= ~USART_FLAG_TC; //禁止TC中断
printUsart->SR &= ~USART_FLAG_TC; //清除TC中断标志
printState = noSend;
}
//RX中断
else if((printUsart->SR & USART_FLAG_RXNE) != 0)
{
printUsart->CR1 &= ~USART_FLAG_RXNE; ///禁止接收中断
printUsart->SR &= ~USART_FLAG_RXNE; ///清接收中断
}
}
//******************************************************************************
// printTxDmaInt 打印DMA串口中断
//******************************************************************************
void printTxDmaInt(void)
{
printT_DMAy_Channelx->CCR &= ~0x01; //使用能DMA
printT_DMAy_Channelx->CCR &= ~DMA_IT_TC; //禁止DMA中断
print_DMA->IFCR |= 0X01 << ((printTxDmaChNb - 1)<< 2); ///清DMA中断
printUsart->CR1 |= USART_FLAG_TC; //使能TC中断
printUsart->CR3 &= ~(0X01 << 7); //禁用口发送触发
}
//******************************************************************************
//printSend
//******************************************************************************
void printSend(uint8_t *pData, uint8_t len)
{
printState = sending;
printUsart->CR1 &= ~USART_Mode_Rx;
printUsart->CR1 |= USART_Mode_Tx;
///初始化默认值
//启动DMA数据发送
printT_DMAy_Channelx->CMAR = (u32)pData; ///初始化源寄存器地址
printT_DMAy_Channelx->CPAR = (u32)(&(printUsart->DR)); ///初始化目的寄存器地址
printT_DMAy_Channelx->CNDTR = len; ///初始化数据个数
//使能串口DMA
print_DMA->IFCR |= 0X01 << ((printTxDmaChNb - 1) << 2);
printT_DMAy_Channelx->CCR |= DMA_IT_TC; ///使能DMATC中断
printT_DMAy_Channelx->CCR |= 0x01; ///使用能DMA
printUsart->SR &= ~USART_FLAG_TC ; ///清除TC中断标志
printUsart->CR1 &= ~USART_FLAG_TC ; ///禁止TC中断
printUsart->CR3 &= ~(0x01 << 6);
printUsart->CR3 |= 0X01 << 7; //启用串口触发DMA
}
//********************************************************************************************************
//** 函数名称:print_init()
//** 函数功能:硬件初始化。
//** 入口参数:
//** 出口参数:字节数量
//*********************************************************************************************************/
uint8_t print_init(uint8_t *pData)
{
*pData++ = ESC;
*pData = 0x40;
return 2;
}
//********************************************************************************************************
//** 函数名称:printSetChinese()
//** 函数功能:设置中文打印
//** 入口参数:
//** 出口参数:字节数量
//*********************************************************************************************************/
uint8_t printChinese(uint8_t *pData)
{
*pData++ = 0X1C;
*pData++ = '&';
return 2;
}
//********************************************************************************************************
//** 函数名称:printCR()
//** 函数功能:打印当前所有,并走一行
//** 入口参数:
//** 出口参数:字节数量
//*********************************************************************************************************/
uint8_t printCR(uint8_t *pData)
{
*pData = PCR;
return 1;
}
//********************************************************************************************************
//** 函数名称:printLF()
//** 函数功能:走纸。
//** 入口参数:
//** 出口参数:字节数量
//*********************************************************************************************************/
uint8_t printLF(uint8_t *pData)
{
*pData = LF;
return 1;
}
//********************************************************************************************************
//** 函数名称:LFnRow()
//** 函数功能:执行N点行走纸。
//** 入口参数:行数
//** 出口参数:字节数量
//*********************************************************************************************************/
uint8_t LFnRow(uint8_t *pData,uint8_t row)
{
*pData++ = ESC;
*pData++ = J;
*pData = row;
return 3;
}
//********************************************************************************************************
//** 函数名称:setPageLen()
//** 函数功能:设置页长。
//** 入口参数:页长 (0表示256页)
//** 出口参数:字节数量
//*********************************************************************************************************/
uint8_t setPageLen(uint8_t *pData,uint8_t pageLen)
{
*pData++ = ESC;
*pData++ = 0x43;
*pData = pageLen;
return 3;
}
//********************************************************************************************************
//** 函数名称:setLeftSpace(uint8 spaceNumber)
//** 函数功能:设置左间距。
//** 入口参数:间距数
//** 出口参数:字节数量
//*********************************************************************************************************/
uint8_t setLeftSpace(uint8_t *pData,uint8_t spaceNumber)
{
*pData++ = ESC;
*pData++ = 0x6c;
*pData = spaceNumber;
return 3;
}
//********************************************************************************************************
//** 函数名称:setRightSpace(uint8 spaceNumber)
//** 函数功能:设置右间距。
//** 入口参数:间距数
//** 出口参数:字节数量
//*********************************************************************************************************/
uint8_t setRightSpace(uint8_t *pData,uint8_t spaceNumber)
{
*pData++ = ESC;
*pData++ = 0x51;
*pData = spaceNumber;
return 3;
}
//********************************************************************************************************
//** 函数名称:setWordSpace(uint8 wordSpace)
//** 函数功能:设置字间距。
//** 入口参数:间距数
//** 出口参数:字节数量
//*********************************************************************************************************/
uint8_t setWordSpace(uint8_t *pData, uint8_t wordSpace)
{
*pData++ = ESC;
*pData++ = 0x70;
*pData = wordSpace;
return 3;
}
//********************************************************************************************************
//** 函数名称:setRowSpace(uint8 rowSpace)
//** 函数功能:设置字间距。
//** 入口参数:间距数
//** 出口参数:字节数量
//*********************************************************************************************************/
uint8_t setRowSpace(uint8_t *pData, uint8_t rowSpace)
{
*pData++ = ESC;
*pData++ = 0x31;
*pData = rowSpace;
return 3;
}
//F*****************************************************************************
//* NAME:
//* PURPOSE:
//* PARAMS:
//* return:
//******************************************************************************
+71
View File
@@ -0,0 +1,71 @@
#ifndef __PRINT_H_
#define __PRINT_H_
/*H******************************************************************************
* NAME: time_count.h
*********************************************************************************/
//硬件定义
#define printUsart USART3
#define print_DMA DMA1
#define printR_DMAy_Channelx DMA1_Channel3
#define printT_DMAy_Channelx DMA1_Channel2
#define printRxDmaChNb 3
#define printTxDmaChNb 2
//缓冲数定义
#define C_printBuf 100
#define C_printQueue 80 //打印机消息队列
//=============================================================================
//字符定义
#define LF 0x0a //打印换行命令
#define ESC 0X1B
#define J 0x4A
#define DLE 0X10
#define EOT 0X04
#define PCR 0X0D
typedef enum
{
noSend,
sending,
}printProStae_TypeDef;
//******************************************************************************
//*-------------- 变量声名 -----------------------------------------------------
//******************************************************************************
extern uint8_t printBuf[gunNumber][C_printBuf];
extern uint32_t printQueue[gunNumber][C_printQueue];
extern volatile printProStae_TypeDef printState;
//******************************************************************************
//*-------------- 函数声名 -----------------------------------------------------
//******************************************************************************
extern void printUsartIsr(void);
extern void printTxDmaInt(void);
extern void printSend(u8 *pData, u8 len);
extern uint8_t print_init(uint8_t *pdata);
extern uint8_t printChinese(uint8_t *pData);
extern uint8_t printLF(uint8_t *pdata);
extern uint8_t printCR(uint8_t *pData);
extern uint8_t LFnRow(uint8_t *pData,uint8_t row);
extern uint8_t setPageLen(uint8_t *pData,uint8_t pageLen);
extern uint8_t setLeftSpace(uint8_t *pData,uint8_t spaceNumber);
extern uint8_t setRightSpace(uint8_t *pData,uint8_t spaceNumber);
extern uint8_t setWordSpace(uint8_t *pData, uint8_t wordSpace);
extern uint8_t setRowSpace(uint8_t *pData, uint8_t rowSpace);
#endif //#ifndef