/*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: //******************************************************************************