基础设备

  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;             //打印机输出管脚设置为A1GPIO_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();
}

实现效果

STM32使用外设热敏打印机进行打印相关推荐

  1. STM32操控外设为什么要先使能时钟

    STM32操控外设为什么要先使能时钟 STM32的新手,一般都会对一个问题很纠结.我也是,就是所谓的"时钟问题".我们在尽心STM32编程时,会痛苦地发现这样一个事实:不管你要干嘛 ...

  2. STM32的外设介绍

    片上资源又叫做外设,英文是peripheral,下面这个表里就是STM32F1系列的外设资源. 我们主要学习的就是STM32的外设,通过程序配置外设来完成我们想要的功能.在这个表中,前两个深颜色的是位 ...

  3. 热敏打印机原理java_java - 使用TSC TTP-342E Pro热敏打印机Java打印 - 堆栈内存溢出...

    我正在尝试使用打印机TSC TTP-342E Pro工业热敏打印机打印标签. 但无法打印. 我使用相同的程序在激光打印机HP LaserJet M1530中进行打印,并且工作正常. 在这两种情况下,打 ...

  4. java+lodop+vue+热敏打印机,打印图片

    1.根据需求生成图片模板,详情见 https://www.cnblogs.com/xiaokangk/p/11151774.html 2.下载lodop并进行安装(安装步骤详情百度) 3.安装热敏打印 ...

  5. STM32传感器外设集--温湿度模块(DHT11)

    目录 原理图 介绍 main.c bsp_dht11.h bsp_dht11.c core_delay.h core_delay.c 原理图 介绍 DHT11是我们最常见的一种温湿度传感器,但是精度不 ...

  6. java热敏打印机_用java在POS热敏打印机上打印PDF或PNG

    我是每个人.我用java打印票证时遇到问题.我用jasper生成了票,然后我需要用POS热敏打印机打印出来.我试着打印PDF,结果得到了 Wrong Format 如何正确打印?是否有任何方法可以正确 ...

  7. STM32基本外设超详细44000字教程

    GPIO GPIO(General Purpose Input Output)通用输入输出口 可配置为8种输入输出模式 引脚电平:0V~3.3V,部分引脚可容忍5V 输出模式下可控制端口输出高低电平, ...

  8. STM32——I2C外设总线

    文章目录 一.I2C外设简介 二.I2C框图 三.I2C基本结构 四.主机发送 五.主机接收 六.I2C的中断请求 七.软件/硬件波形对比 八.硬件I2C读写MPU6050 电路设计 关键代码 状态监 ...

  9. STM32传感器外设集 -- 蓝牙(HC-05)+超声波(hc-sr04)

    前言 前言:蓝牙外设还没有给大家安排上,今天我就给大家安排上使用蓝牙传输超声波距离的例程,会给大家附带蓝牙的上位机的测试APP 一.模块介绍 1.连接图 蓝牙模块 引脚 超声波传感器 引脚 GND G ...

最新文章

  1. python自学教材-python零基础自学教材
  2. nodejs返回下载文档,文档名称出现汉字出现乱码解决
  3. Hadoop详解(五):HDFS HA 和 Federation
  4. 【机器学习】27 个机器学习、数学、Python 速查表
  5. 列表查询,添加功能---JSP,servlet
  6. 浏览器同源策略及跨域的解决方法
  7. linux命令(56):环境变量:/etc/profile、/etc/bashrc 、~/.profile、~/.bashrc
  8. JDK获取所有的系统参数
  9. C# WPF 定时器
  10. Vue阿里云物流API
  11. 关系数据库——关系操作关系模型的完整性
  12. SVN SSL错误解决
  13. Fourier Neural Operator for Parametric Partial Differential Equations
  14. thinkgem 对前端的总结
  15. Masonry中的mas_makeConstraints方法
  16. OpenGL---GLUT教程(五) GLUT键盘控制
  17. CMDB开发之用户登录登出的cookie校验
  18. [刷题]leetcode\189_轮转数组
  19. oracle中raw是什么格式,oracle中RAW数据类型
  20. 检测到磁盘可能为uefi引导_如何用uefi引导安装win7

热门文章

  1. 3D打印机T3升级corexy  制作过程(一)
  2. 步进电机的细分驱动中1-2相, W1-2相, 2W1-2相, 4W1-2相 表示什么意思?
  3. css 剪辑图片_css如何截取图片?
  4. 数据结构:通过hash表建立一个宝可梦图鉴管理系统
  5. 人工智能照进三百六十行:百度大脑与劳动者们
  6. 设计模式——做软件的必学课程
  7. 思科模拟器:交换机的vlan的创建以及配置
  8. C语言超出类型数值范围的表示方法
  9. 图神经网络(一):综述
  10. 我是个28岁的IT,我现在慌得一比