STM32使用外设热敏打印机进行打印

基础设备

  1. 基于芯片STM32103FC8T6,使用库函数编程
  2. 使用模拟串口发送数据至热敏打印机
  3. 选择TTL接口的串口打印机

注意事项

  1. 之前用串口发送后,打印机一直不工作,连续一天半没找到原因。用TTL-USB接到电脑串口发现有数据。后来发现,因为打印机是单独供电的,没有和芯片共地。那为什么TTL-USB接口只用一根线接收数据就可以呢,因为单片机和TTL-USB接口都是电脑供的电,它们在内部是共地的。
  2. 在使用打印前应该先自检,要确认是可以串口直接打印的嵌入式热敏打印机。
  3. STM32103FC8T6的串口一共有3个,串口1:PA10(RX)、PA9(TX),串口2:PA3(RX)、PA2(TX),串口3:PB11(RX)、PB10(TX)。因为单片机接着很多外设,串口比较紧张,所以选择使用一个闲置的口模拟串口,这里使用A1。

实现步骤

  1. 打印机管脚的初始化
/*	打印机管脚初始化		*/
void Print_GPIO_Configuration(void)
{
	GPIO_InitTypeDef GPIO_InitStructure;
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
	
	GPIO_InitStructure.GPIO_Pin =GPIO_Pin_1;	 		   	//打印机输出管脚设置为A1
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;   		//输出模式:推挽输出	
	GPIO_Init(GPIOA, &GPIO_InitStructure);
}
  1. 可以先通过宏定义设置接口状态,方便我们控制引脚电平。
//设置打印机的管脚状态
#define Print_TX(a)	if (a)	\
					GPIO_SetBits(GPIOA,GPIO_Pin_1);\
					else		\
					GPIO_ResetBits(GPIOA,GPIO_Pin_1)
  1. 模拟串口发送数据,模拟IO的实现需要的就是延时的精准度,以9600bps波特率为例,一秒能发送9600bit,那么发送1bit的时间间隔就是大概1/9600≈104us,
/*	
	模拟串口发送数据
*/
void VirtualCOM_SendByte(uint8_t c)
{
    int i = 0;
    Print_TX(0);                     // 拉低IO引脚启动发送
    Delay_us(104);
    for(i = 0; i < 8; i++)             // 开始发送8bit数据
    {
        if(c & 0X01)	//利用电平发送数据,低位在前
        {
            Print_TX(1);
        }
        else
        {
            Print_TX(0);
        }
        c >>= 1;
        Delay_us(104);
    }
    Print_TX(1);                    // 拉高IO引脚停止发送
    Delay_us(104);
}
  1. 字节发送函数
/*	发送单个字节		*/
void PrintChar3(unsigned char temp)
{
	VirtualCOM_SendByte(temp);          
}

/*	发送字符串		*/
void PrintString3(unsigned char *String) 	
{
	while(*String)
	{
		  PrintChar3(*String++);
	}
}
  1. 主函数中写一个打印函数并调用
    0x20表示空格,0x0d 0x0a相当于\r\n表示换行并定位到下一行行首,还要注意打印是反着来的。
void Print_Gushi(void)
{
	PrintChar3(0x20);PrintChar3(0x20);PrintChar3(0x20);PrintChar3(0x20); 
	PrintString3((uint8_t *)"不敢高声语,恐惊天上人。"); PrintChar3(0x0d);PrintChar3(0x0a);
	PrintChar3(0x20);PrintChar3(0x20);PrintChar3(0x20);PrintChar3(0x20); 
	PrintString3((uint8_t *)"危楼高百尺,手可摘星辰。"); PrintChar3(0x0d);PrintChar3(0x0a);
	
	PrintChar3(0x20);PrintChar3(0x20);PrintChar3(0x20);PrintChar3(0x20);
	PrintChar3(0x20);PrintChar3(0x20);PrintChar3(0x20);PrintChar3(0x20);
	PrintChar3(0x20);PrintChar3(0x20);PrintChar3(0x20);PrintChar3(0x20);
	PrintString3((uint8_t *)"唐-李白"); PrintChar3(0x0d);PrintChar3(0x0a);
	
	PrintChar3(0x20);PrintChar3(0x20);PrintChar3(0x20);PrintChar3(0x20);
	PrintChar3(0x20);PrintChar3(0x20);PrintChar3(0x20);PrintChar3(0x20);
	PrintChar3(0x20);PrintChar3(0x20);
	PrintString3((uint8_t *)"《夜宿山寺》"); PrintChar3(0x0d);PrintChar3(0x0a);
	
	PrintChar3(0x0d);PrintChar3(0x0a);PrintChar3(0x0d);PrintChar3(0x0a);
	PrintChar3(0x0d);PrintChar3(0x0a);PrintChar3(0x0d);PrintChar3(0x0a);
	PrintChar3(0x0d);PrintChar3(0x0a);	

}

int main(void)
{	
	Print_GPIO_Configuration();	//打印机管脚初始化
	Print_Gushi();
	Print_Gushi();
}

实现效果

在这里插入图片描述

  • 6
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
STM32是一款常用的微控制器,可以用于连接和控制各种外部设备,包括热敏打印机。要实现STM32热敏打印机的数据打印,首先需要配置STM32的I/O引脚和串口通信。 首先,需要将STM32的I/O引脚与热敏打印机的数据引脚连接。根据热敏打印机的规格手册,确定数据引脚的连接方式和电气特性。然后,在STM32的开发环境中,通过设置GPIO功能和配置引脚的输入输出模式,将对应的I/O引脚设置为输出模式,并将其与热敏打印机的数据引脚连接。 其次,需要配置STM32的串口通信功能。通过STM32提供的串口通信模块,可以与热敏打印机之间建立可靠的数据通信通道。在STM32的开发环境中,通过设置串口通信的波特率、数据位、停止位和校验位等参数,来配置串口通信模块。然后,将STM32的串口引脚通过连接线与热敏打印机的串口接口连接起来。 最后,编写STM32的控制程序,实现与热敏打印机的数据交互和打印操作。通过STM32提供的串口通信函数,可以向热敏打印机发送数据命令和要打印的数据。同时,可以监测热敏打印机返回的状态和打印结果,以确保打印操作的可靠性和准确性。 需要注意的是,具体的STM32控制程序的编写需要根据热敏打印机的通信协议和指令集来实现。可以参考热敏打印机的规格手册和STM32的相关文档和示例代码来进行开发。另外,为了保证数据的传输和打印的质量,可以加入一些错误检测和纠正机制,以及适当的延时和缓冲处理。 综上所述,通过配置STM32的I/O引脚和串口通信,并编写适当的控制程序,就可以实现STM32热敏打印机的数据打印功能。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值