目录

1. 项目简介

1.1 STM32开发板简介

1.2 本项目目标

2. 开发环境搭建

2.1 安装Keil uVision5

2.2 配置STM32开发环境

2.3 Proteus 8的搭建

3. 硬件连接与接线图

3.1 STM32开发板与74LS245连接

3.2 七段数码管的接线与控制

3.3 Proteus 8仿真连接示意图(附图)

硬件连接与接线图解释:

1. STM32F103R8开发板

2. 74LS245芯片

3. 七段数码管

4. 连接关系总结

4. 代码实现

4.1 Keil uVision5代码编写

4.1.1 GPIO初始化

4.1.2 74LS245驱动配置

4.1.3 数码管显示逻辑实现

4.2 代码详细分析

4.2.1 数码管的控制原理

4.3 完整代码展示(附代码)

5. 仿真与调试

5.1 在Proteus中进行仿真

5.2 调试常见问题与解决方法

5.3 仿真结果展示


1. 项目简介

1.1 STM32开发板简介

STM32是意法半导体(STMicroelectronics)推出的32位单片机系列,基于ARM Cortex-M内核,具有强大的性能、丰富的外设以及广泛的应用。本文将使用STM32开发板进行跑马灯的实现,利用STM32的GPIO(通用输入输出)接口控制LED灯的点亮顺序,达到跑马灯的效果。

1.2 本项目目标

本项目的目标是通过STM32开发板控制一个LED阵列实现跑马灯效果。我们将通过GPIO口控制LED的状态,并编写相应的代码来实现灯光的循环点亮。

2. 开发环境搭建

2.1 安装Keil uVision5

在开始开发之前,我们首先需要安装Keil uVision5,这是一个非常适合开发STM32等ARM Cortex-M系列微控制器的集成开发环境(IDE)。下面是详细的安装步骤:

  1. 下载Keil uVision5
    前往Keil官方网站(Keil官网)下载Keil uVision5开发环境的安装包。你可以选择注册一个Keil账户并下载最新版本的安装包,或者直接通过Google搜索“Keil uVision5 下载”找到安装链接。

  2. 安装Keil uVision5
    下载完成后,双击安装包并按照提示进行安装。安装过程中,建议选择默认选项进行安装。安装完成后,启动Keil uVision5开发环境。

  3. 安装STM32支持包
    在Keil中使用STM32开发时,需要安装STM32的支持包,支持包包含了相关的库和驱动文件,方便开发人员进行开发。

    • 打开Keil uVision5后,点击菜单栏中的“Project” -> “Manage” -> “Pack Installer”。

    • 在弹出的Pack Installer窗口中,选择"STMicroelectronics"目录,然后找到"STM32"相关的包,点击安装。根据提示,安装所有必需的包,确保STM32的标准库和驱动库都被正确安装。

2.2 配置STM32开发环境

完成Keil安装后,我们需要为STM32配置开发环境,确保开发板与Keil能够正常配合工作。

  1. 创建一个新的工程
    打开Keil uVision5,点击菜单栏的“Project” -> “New Project”,在弹出的窗口中选择一个合适的位置来保存你的工程。给项目命名,并选择一个适合的文件夹路径。

  2. 选择合适的STM32型号
    在“Select Device for Target”窗口中,选择你所使用的STM32型号。例如,如果你使用的是STM32F103系列的开发板,可以选择“STM32F103C8”作为目标芯片。点击“OK”完成选择。

  3. 配置目标设备的时钟设置
    STM32的时钟系统可能需要配置,尤其是在使用定时器或外设时。可以在Keil中使用相关的库函数来配置系统时钟,以确保外设的正常工作。

  4. 添加标准库文件
    在Keil中使用STM32时,最好添加STM32的标准外设库(HAL库)。在“Project”-> “Options for Target”,然后进入“C” tab,在“Include Paths”中添加HAL库的路径。这样可以方便我们直接使用STM32提供的外设库函数。

2.3 Proteus 8的搭建

Proteus 8是一款非常流行的电子电路仿真软件,可以帮助开发者验证硬件电路与软件代码的正确性。我们可以使用Proteus 8来模拟STM32开发板的运行,并验证跑马灯效果。

  1. 安装Proteus 8
    首先,前往Proteus的官方网站(Proteus官网)下载并安装Proteus 8仿真软件。你可以选择试用版本或购买正版

3. 硬件连接与接线图

3.1 STM32开发板与74LS245连接

在这个项目中,STM32通过GPIO控制74LS245芯片,进而控制七段数码管的显示。74LS245芯片作为数据总线收发器,将STM32的GPIO信号传输到数码管。

3.2 七段数码管的接线与控制

每个七段数码管有7个LED段(A-L),每个段用一个GPIO端口来控制。74LS245的输出端与七段数码管的各个段连接,通过发送不同的控制信号,数码管可以显示数字。

3.3 Proteus 8仿真连接示意图(附图)

以下是Proteus 8仿真连接图:

硬件连接与接线图解释:

这张图展示了STM32F103R6开发板与74LS245驱动芯片及七段数码管的连接。下面是每个部分的详细解释:

1. STM32F103R8开发板
  • STM32的GPIO引脚(PA0-PA15,PB0-PB15)用于连接外部设备。在这张图中,STM32的GPIO引脚与74LS245芯片的输入端(A端口)相连接,用于发送数字信号到74LS245。

2. 74LS245芯片
  • 74LS245是一个八位双向数据总线收发器,用于从STM32开发板传输数据到七段数码管的显示控制端。STM32通过74LS245的A端口将信号送到其B端口,从而控制显示器的各个段。

  • 74LS245的CE端(芯片使能端)控制数据是否传输。通常,CE端保持激活状态,以便数据能传输到显示器。

3. 七段数码管
  • 每个七段数码管由七个LED段(A-L)组成,用于显示数字或字母。在这张图中,74LS245芯片的输出(B端口)直接连接到七段数码管的各个段(A-L)。

  • 通过控制这些段的开关,数码管可以显示不同的数字。例如,当某些段亮起时,显示数字“1”;其他段亮起时,显示数字“8”等。

4. 连接关系总结
  • STM32通过GPIO引脚控制74LS245芯片的输入端(A端),将数字信号发送到74LS245

  • 74LS245的输出端(B端)连接到数码管的七个段,每个段控制数码管的显示。

  • 通过改变STM32发送到74LS245的数据,进而控制数码管的显示内容,从而在数码管上显示不同的数字。

4. 代码实现

4.1 Keil uVision5代码编写

4.1.1 GPIO初始化

STM32的GPIO端口控制七段数码管的显示,需要初始化相关的GPIO口。

GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);  // 启用GPIOC时钟
GPIO_InitStructure.GPIO_Pin = 0xffff;  // 配置PC0-PC15引脚
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;    // 配置为推挽输出模式
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;   // 设置GPIO速度为50MHz
GPIO_Init(GPIOC, &GPIO_InitStructure);  // 初始化GPIOC端口
4.1.2 74LS245驱动配置

74LS245芯片的控制信号需要配置,以便传输数据到数码管。通过控制输入端A,将数字编码传送到B端,然后通过B端控制数码管。

// 设置74LS245为输出模式,控制数码管的段
GPIO_Write(GPIOC, temp);  
4.1.3 数码管显示逻辑实现

根据输入的数字,生成相应的七段显示编码,并通过GPIO输出到74LS245,控制显示器的显示。

uint16_t table[] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f};  // 数字0-9的七段编码
uint16_t disp[2];
uint16_t temp, i;

while(1)
{
    for(i = 0; i <= 9; i++)
    {
        disp[1] = table[i / 10];  // 高位显示
        disp[0] = table[i % 10];  // 低位显示
        temp = (disp[1] << 8) | (disp[0] & 0x0ff);  // 拼接显示的数值
        GPIO_Write(GPIOC, temp);  // 输出到GPIOC
        Delay(100);  // 延时
    }
}

4.2 代码详细分析

4.2.1 数码管的控制原理

通过控制GPIO引脚的电平,我们可以打开或关闭七段数码管的每个LED段。每个段对应一个数字的显示,例如“8”需要所有段都亮起,而“1”只需要显示“B”和“C”两段。

4.3 完整代码展示(附代码)

#include "stm32f10x.h"

uint16_t  table[] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f};  // Table for displaying digits 0 to 9 in 7-segment encoding
uint16_t disp[2];
uint16_t temp, i;

void Delay(unsigned int count)  // Delay function
{
    unsigned int i;
    for(; count != 0; count--)
    {
        i = 500;
        while(i--);
    }    
}

int main(void)
{
    GPIO_InitTypeDef GPIO_InitStructure;
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);  // Enable GPIOC clock
    GPIO_InitStructure.GPIO_Pin = 0xffff;  // Configure PC0-PC15 pins
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  // Set pins to push-pull output mode
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  // Set GPIO speed to 50MHz
    GPIO_Init(GPIOC, &GPIO_InitStructure);  // Initialize GPIOC
    
    while(1)
    {
        // Loop through digits to display on 7-segment display
        for(i = 0; i <= 20; i++)
        {
            disp[1] = table[i / 10];  // Display the high digit
            disp[0] = table[i % 10];  // Display the low digit
            temp = (disp[1] << 8) | (disp[0] & 0x0ff);  // Combine the high and low digits
            GPIO_Write(GPIOC, temp);  // Output to GPIOC
            Delay(100);  // Wait for a while before displaying the next number
        }
    }
}

5. 仿真与调试

5.1 在Proteus中进行仿真

Proteus仿真环境能够帮助我们在不需要实际硬件的情况下测试代码。通过仿真,可以查看数码管显示的数字是否与预期一致。

5.2 调试常见问题与解决方法

  • 问题:数码管不显示任何数字。

    • 解决方案:检查74LS245的连接是否正确,确保数据从STM32正确传输到显示器。

  • 问题:显示的数字不正确。

    • 解决方案:检查数字编码表(table)中的值,确保每个数字对应正确的七段编码。

5.3 仿真结果展示

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐