Files
TXH1.0/User/Printf/print.c
T

220 lines
7.2 KiB
C
Raw Normal View History

2026-04-27 16:55:02 +08:00
/*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:
//******************************************************************************