STM32使用外设热敏打印机进行打印
基础设备
- 基于芯片STM32103FC8T6,使用库函数编程
- 使用模拟串口发送数据至热敏打印机
- 选择TTL接口的串口打印机
注意事项
- 之前用串口发送后,打印机一直不工作,连续一天半没找到原因。用TTL-USB接到电脑串口发现有数据。后来发现,因为打印机是单独供电的,没有和芯片共地。那为什么TTL-USB接口只用一根线接收数据就可以呢,因为单片机和TTL-USB接口都是电脑供的电,它们在内部是共地的。
- 在使用打印前应该先自检,要确认是可以串口直接打印的嵌入式热敏打印机。
- STM32103FC8T6的串口一共有3个,串口1:PA10(RX)、PA9(TX),串口2:PA3(RX)、PA2(TX),串口3:PB11(RX)、PB10(TX)。因为单片机接着很多外设,串口比较紧张,所以选择使用一个闲置的口模拟串口,这里使用A1。
实现步骤
- 打印机管脚的初始化
/* 打印机管脚初始化 */
void Print_GPIO_Configuration(void)
{GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);GPIO_InitStructure.GPIO_Pin =GPIO_Pin_1; //打印机输出管脚设置为A1GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //输出模式:推挽输出 GPIO_Init(GPIOA, &GPIO_InitStructure);
}
- 可以先通过宏定义设置接口状态,方便我们控制引脚电平。
//设置打印机的管脚状态
#define Print_TX(a) if (a) \GPIO_SetBits(GPIOA,GPIO_Pin_1);\else \GPIO_ResetBits(GPIOA,GPIO_Pin_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);
}
- 字节发送函数
/* 发送单个字节 */
void PrintChar3(unsigned char temp)
{VirtualCOM_SendByte(temp);
}/* 发送字符串 */
void PrintString3(unsigned char *String)
{while(*String){PrintChar3(*String++);}
}
- 主函数中写一个打印函数并调用
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();
}
实现效果
STM32使用外设热敏打印机进行打印相关推荐
- STM32操控外设为什么要先使能时钟
STM32操控外设为什么要先使能时钟 STM32的新手,一般都会对一个问题很纠结.我也是,就是所谓的"时钟问题".我们在尽心STM32编程时,会痛苦地发现这样一个事实:不管你要干嘛 ...
- STM32的外设介绍
片上资源又叫做外设,英文是peripheral,下面这个表里就是STM32F1系列的外设资源. 我们主要学习的就是STM32的外设,通过程序配置外设来完成我们想要的功能.在这个表中,前两个深颜色的是位 ...
- 热敏打印机原理java_java - 使用TSC TTP-342E Pro热敏打印机Java打印 - 堆栈内存溢出...
我正在尝试使用打印机TSC TTP-342E Pro工业热敏打印机打印标签. 但无法打印. 我使用相同的程序在激光打印机HP LaserJet M1530中进行打印,并且工作正常. 在这两种情况下,打 ...
- java+lodop+vue+热敏打印机,打印图片
1.根据需求生成图片模板,详情见 https://www.cnblogs.com/xiaokangk/p/11151774.html 2.下载lodop并进行安装(安装步骤详情百度) 3.安装热敏打印 ...
- STM32传感器外设集--温湿度模块(DHT11)
目录 原理图 介绍 main.c bsp_dht11.h bsp_dht11.c core_delay.h core_delay.c 原理图 介绍 DHT11是我们最常见的一种温湿度传感器,但是精度不 ...
- java热敏打印机_用java在POS热敏打印机上打印PDF或PNG
我是每个人.我用java打印票证时遇到问题.我用jasper生成了票,然后我需要用POS热敏打印机打印出来.我试着打印PDF,结果得到了 Wrong Format 如何正确打印?是否有任何方法可以正确 ...
- STM32基本外设超详细44000字教程
GPIO GPIO(General Purpose Input Output)通用输入输出口 可配置为8种输入输出模式 引脚电平:0V~3.3V,部分引脚可容忍5V 输出模式下可控制端口输出高低电平, ...
- STM32——I2C外设总线
文章目录 一.I2C外设简介 二.I2C框图 三.I2C基本结构 四.主机发送 五.主机接收 六.I2C的中断请求 七.软件/硬件波形对比 八.硬件I2C读写MPU6050 电路设计 关键代码 状态监 ...
- STM32传感器外设集 -- 蓝牙(HC-05)+超声波(hc-sr04)
前言 前言:蓝牙外设还没有给大家安排上,今天我就给大家安排上使用蓝牙传输超声波距离的例程,会给大家附带蓝牙的上位机的测试APP 一.模块介绍 1.连接图 蓝牙模块 引脚 超声波传感器 引脚 GND G ...
最新文章
- python自学教材-python零基础自学教材
- nodejs返回下载文档,文档名称出现汉字出现乱码解决
- Hadoop详解(五):HDFS HA 和 Federation
- 【机器学习】27 个机器学习、数学、Python 速查表
- 列表查询,添加功能---JSP,servlet
- 浏览器同源策略及跨域的解决方法
- linux命令(56):环境变量:/etc/profile、/etc/bashrc 、~/.profile、~/.bashrc
- JDK获取所有的系统参数
- C# WPF 定时器
- Vue阿里云物流API
- 关系数据库——关系操作关系模型的完整性
- SVN SSL错误解决
- Fourier Neural Operator for Parametric Partial Differential Equations
- thinkgem 对前端的总结
- Masonry中的mas_makeConstraints方法
- OpenGL---GLUT教程(五) GLUT键盘控制
- CMDB开发之用户登录登出的cookie校验
- [刷题]leetcode\189_轮转数组
- oracle中raw是什么格式,oracle中RAW数据类型
- 检测到磁盘可能为uefi引导_如何用uefi引导安装win7