基于STM32CUBE的UART串口驱动TM1652程序

最近用到了TM1652这个芯片,它是天微的一款LED(发光二极管、数码管、点阵屏)驱动控制专用芯片。之前用过天微的TM1638,除了能驱动LED,还支持按键状态检测,简直是节省IO的利器。TM1638的通信接口是一个类似SPI的接口,需要三个IO。

而这次的TM1652因为功能相对少一些(只能驱动LED,不能检测按键),所以用到的IO也少了,只需要一个IO。功能特点如下:

这里关注几个地方:

  1. 典型工作电压,手册里写的是5V,但是3.3V我试了,没问题。
  2. 只支持共阴极数码管,不支持共阳极数码管。
  3. 显示模式,支持7段X6位,或者8段X5位
  4. 使用类似UART串口的协议进行通信,波特率固定19200。

别的就没什么了。我这里的电路如下,使用了一个3位的共阴极数码管,同时需要小数点,所以显示模式我需要8段的模式:

PCB布局的时候,那两个电容尽量离芯片近一些。

接下来是程序方面,我使用的单片机是STM32G030F6P6,串口2,使用软件STM32CUBE进行了UART2的基本配置,手册中对串口工作模式要求如下:

简单来说,STM32的串口配置时,波特率19200,数据长度9bits(其中包含校验位),校验位需要偶校验,以及一个停止位。STM32CUBE软件中USART2的配置如下:

除了上面说的那些配置,数据方向那里,我选择了只发送。

然后是程序,程序基于串口进行数据发送。TM1652的一帧数据包含以下内容:

  1. 显示地址命令+显示数据;
  2. 示控制命令+显示控制调节命令。

简单来说:1、告诉芯片你要让哪一位显示什么数据;2、告诉芯片工作模式,例如亮度、占空比、7段还是8段的工作模式。

这里我使用了地址自动加1的模式,即写入一个地址(要显示的那一位)后,连续写入三个数据。因为地址会自动加1,所以不用频繁写入地址。具体代码如下:

//0~9 最后一个是:空 

  const uint8_t seg_no_dot[11] = {0x3f,0x06,0x5b,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x00}; 

  const uint8_t seg_with_dot[11] = {0xbf,0x86,0xdb,0xcF,0xe6,0xeD,0xfD,0x87,0xfF,0xeF,0x80};

  void address_auto_add1(uint8_t addr,uint8_t dat1,uint8_t dat2,uint8_t dat3)
  {
  	uint8_t dat_buf[4] = {0};
  	dat_buf[0] = addr;
  	dat_buf[1] = dat1;
  	dat_buf[2] = dat2;
  	dat_buf[3] = dat3;
  	HAL_UART_Transmit(&huart2,dat_buf,4,0xfff);
  	HAL_Delay(5);

  	dat_buf[0] = 0x18;
  	dat_buf[1] = 0x1c;
  	HAL_UART_Transmit(&huart2,dat_buf,2,0xfff);
  	HAL_Delay(5);
}

这是一帧完整的数据操作,首先定义了一个数组,然后把第一个数据地址写入,然后依次写入三个数据。然后使用STM32的串口函数发送这四个数据。

第二步,首先写入显示控制命令(0x18),然后写入显示调节控制命令(0x1c)。参照手册中的表格:

可以知道,0x1c的功能是:设置占空比为8/16,设置段驱动电流为4/8,设置8段5位输出。每一步操作完成后,手册建议加3毫秒的延时,我这里加了5毫秒。

在主函数中调用该函数:

address_auto_add1(0x08, seg_no_dot[i], seg_no_dot[i], seg_no_dot[i]);

显示正常:

有需要TM1652程序的,关注公众号(单片机爱好者),回复关键词:025,即可获取下载链接。我是单片机爱好者-MCU起航,打完收工!

本文首发:基于STM32CUBE的UART串口驱动TM1652程序 | MCU起航

### 回答1: TM1652是一种常用的数字管驱动芯片,它主要用于控制7段数码管和8×8点阵的显示。TM1652芯片具有以下特点和功能。 首先,TM1652芯片采用SPI总线接口,通过4个信号线进行通信,包括时钟线、数据线、片选线和使能线。这种通信方式简单高效,适合于多个芯片的级联使用。 其次,TM1652芯片内部集成了128段共阴或共阳数码管的驱动电路,能够直接驱动这些数码管,无需额外的驱动电路。这极大地简化了电路设计,并节省了PCB板空间。 再次,TM1652芯片具备灵活的显示控制功能。它支持数码管的单个和多个段的亮灭控制,可以通过编程实现自定义的显示效果。此外,它还可以设置显示亮度,通过PWM调节,以适应不同环境下的亮度要求。 此外,TM1652芯片还提供了键盘扫描功能。它可以同时控制数码管和扫描按键输入,实现数码管和按键的复合应用。这对于需要在数码管上显示某些参数,并通过按键进行操作的应用非常有用。 最后,TM1652芯片具备低功耗的特点。它在待机模式下功耗极低,而在工作模式下,功耗也相对较低。这对于需要长时间工作的应用来说,非常重要,可以有效延长电池寿命。 总的来说,TM1652芯片是一种功能强大、灵活性高、节省空间、低功耗的驱动芯片。在各种数码管和点阵显示应用中,都可以发挥重要作用。 ### 回答2: TM1652是一款数字管驱动器集成电路。它由TMicroelectronics公司推出,主要用于驱动7段数字管,支持最多8位数码管的显示。TM1652具有广泛的应用领域,比如计数器、温度计、计时器、仪表等。 TM1652驱动器有16个输出端口,每个端口都可以控制一个数码管的显示。TM1652通过I2C总线与主控器相连接,通过I2C协议进行通信。主控器向TM1652发送指令,TM1652根据指令控制LED数码管的亮灭。TM1652内部集成了译码器,可以将相应的数字对应到7段数码管的不同段上,从而实现数字的显示。 TM1652驱动器具有低功耗特点,工作电压范围广,可在2.5V至5.5V的电压下正常工作。它还具备多种显示模式,包括常亮、闪烁和逐个数字显示等模式。TM1652还支持亮度调节功能,可以根据需求调节数码管的亮度。 TM1652驱动程序详解主要包括以下几个方面的内容: 1. 初始化:初始化I2C总线,设置相应的寄存器,配置TM1652的工作模式和功能。 2. 数字显示:通过向TM1652发送指令和数据,控制数码管显示特定的数字和符号。 3. 显示模式:根据需求设置相应的显示模式,如常亮、闪烁和逐个数字显示模式。 4. 亮度调节:通过调节相应的寄存器,实现数码管亮度的调节。 5. 时序控制:根据I2C总线的时序,向TM1652发送相应的指令和数据。 总之,TM1652是一款功能强大的数字管驱动器,它通过控制LED数码管的亮灭,实现数字的显示。根据应用需求,可以通过相应的驱动程序实现不同的显示模式和亮度调节。在嵌入式系统和电子设备中,TM1652驱动程序的详解对于正确使用和驱动TM1652至关重要。 ### 回答3: TM1652是一种数字管驱动集成电路,常用于驱动LED数码管显示器。该驱动程序采用4线串行通信方式,能够高效地控制数字管的显示。 TM1652驱动程序分为初始化和数据发送两个主要步骤。 首先是初始化部分。通过特定的通信协议将TM1652与主控芯片连接起来,配置其工作模式和参数。初始化过程一般包括发送一系列特定的命令码给TM1652,以完成对其的配置。 接下来是数据发送部分。主控芯片通过串行通信将要显示的数据发送给TM1652。数据格式包括地址码和数据码,地址码用于选择要显示的数码管,数据码则是要显示的数值。通过循环遍历所有的数码管,主控芯片逐个发送数据。同时,TM1652还支持亮度控制和显示模式切换功能,可以发送相应的命令码来控制亮度和显示模式。 在发送数据的过程中,主控芯片需要按照一定的时序来进行数据传输。具体来说,主控芯片先发送起始位,然后根据通信协议逐位逐个发送数据码,最后发送停止位。TM1652在接收到数据后,会根据起始位和停止位进行数据的解码和显示。 总结起来,TM1652驱动程序通过初始化配置和数据发送两个步骤,能够高效地控制LED数码管的显示。主控芯片通过串行通信将要显示的数据发送给TM1652,并通过特定的通信协议完成数据传输和显示控制。该驱动程序具有灵活性、稳定性和易用性,广泛应用于各种数码管显示器中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值