数码管功能
说明:在哔哩哔哩跟随UP主铁头山羊学习,所有代码均来自铁头山羊B站课堂或者根据铁头山羊代码修改。
利用TM1640芯片,串行通信方式,STM3两个GPIO进行通信。
功能说明
1、 两个GPIO进行通信,GPIOA_PIN–DIN;GPIOA_PIN1—CLK。
2、 通信方式主要是串行通信方式,通信方式软件编写:
读懂时序图,包括起始位、数据位、结束位。
在输入数据时当CLK是高电平时,DIN上的信号必须保持不变;只有CLK上的时钟信号为低电平时,DIN上的信号才能改变。数据的输入总是低位在前,高位在后传输。
数据输入的开始条件是CLK为高电平时,DIN由高变低。
结束条件是CLK为高时,DIN由低电平变为高电平。
波形时长根据时序特性来延时,本次编程使用1us。
3、 显示数据包括三个命令,其中command2中的data最多有16个,即可以同时显示16个数码管,如图
4、 command1:主要设置数据命令,本次设置为地址自动加1模式。
5、 command2:主要设置地址,以及导入显示数据。
6、 command3:主要设置显示亮度。
7、 数码管原理图连接。
数码管初始化函数
TM1640通信电平位5V,单片机IO电平为3.3V,所以需要外接上拉到5V,采用开漏模式。
//TM1640初始化
void TM1640_Init()
{
//GPIOA_PIN_0--Data; GPIOA_PIN_1--Clk 开漏模式
GPIO_InitTypeDef gpioinit;
gpioinit.Pin = GPIO_PIN_0 | GPIO_PIN_1;
gpioinit.Mode = GPIO_MODE_OUTPUT_OD;
gpioinit.Speed = GPIO_SPEED_FREQ_HIGH;
__HAL_RCC_GPIOA_CLK_ENABLE();
HAL_GPIO_Init(GPIOA,&gpioinit);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0 | GPIO_PIN_1, GPIO_PIN_SET);
}
延时函数
精确到1us。
//延时函数,最小1us
void Delayus(uint32_t us)
{
uint32_t n = SystemCoreClock / 1000000 / 8 * us;
do