STM32CubeMX新建工程+基本IO配置过程

本文详细介绍如何使用STM32CubeMX配置STM32芯片的IO口以实现LED灯的点亮。从新建工程开始,逐步讲解选择MCU、配置引脚功能、时钟配置等关键步骤。

推荐

分享一个大神的人工智能教程。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到人工智能的队伍中来!http://www.captainbed.net/strongerhuang

 

我的网站:https://www.strongerhuang.com

我的知乎:https://www.zhihu.com/people/strongerHuang.com

 

 

Ⅰ、写在前面

学习本文之前可以查看我前面的文章:

STM32CubeMX介绍、下载与安装

STM32CubeMX使用方法及功能介绍

 

本文接着上一篇文章结合基本IO配置实例,讲述关于STM32CubeMX新建工程的过程。最终通过STM32CubeMX工具配置完成一个驱动IO(点亮LED)的软件工程,也就是通过STM32CubeMX配置完成之后,打开工程直接下载就能点亮LED的工程。

 

本文使用Keil(MDK-ARM) V5软件为编译环境,如果你没有安装最新版本的软件,请安装最新版本的软件,具体过程可以参考我的一篇文章:

MDK-ARM下载与安装

 

关于本文的更多详情请往下看。

 

Ⅱ、STM32CubeMX新建工程描述

在上一篇文章中简单讲述了新建一个工程的步骤,这里结合实例来讲述新建工程的每一个步骤的细节。

 

1.打开STM32CubeMX软件,点击“新建工程”

 

2.选择MCU 选择(ST官方)开发板

A.如果是我们网上购买的,或者自己画的开发板,点击“MCU Selector”进入MCU选择器。选择器在网页上常见,根据自己需求进行选择(我们以STM32F103E为例)。

1.根据“系列”选择;如:F0、F1、F2......F7、L0、L1、L4等;

2.根据“产品线”选择;

3.根据“封装”选择;

4.根据“其他特征”选择;如:FLASH大小、RAM大小、IO数量等。

层层筛选下来,最后就可以看到自己想要的芯片型号,双击“选中”芯片,如下图:

 

B.如果你的开发板是购买ST官方的开发板(或评估板),点击“Board Selector”进入开发板选择器。(我们以STM3210E-EVAL为例)。

1.根据“厂商”选择;目前只有ST厂商,估计以后会拓展其他厂商;

2.根据“板子类型”选择;

3.根据“芯片系列”选择;

层层筛选下来,最后就可以看到自己想要的芯片型号,双击“选中”芯片,如下图:

 

上面两种选中的方法类似,以及后面的的配置也很类似,我们下面以第一种选中MCUSTM32F103ZE)为例来讲述。

 

3.工程配置

在上一步“选中”芯片之后,就进入了芯片工程配置界面。

 

A.Project ->Settings弹出设置窗口;

 

B.在弹出的设置窗口有3个选项:

Project工程设置:这个选项是主要设置的选项,配置信息描述在下面;

Code Generator代码生成配置:这个选项是关于代码生成的配置。如:拷贝HAL库的配置、生成.c和.h的配置(一般不用修改,默认配置)。

AdvancedSettings高级设置:这个选项在配置芯片(引脚功能)之后才能设置。

 

C.Project工程设置,这个选项是配置工程重要的一个选项,其中配置的信息也比较重要,且容易理解。

 

4.Pinout配置

这接下的配置才是与我们最终运行代码密切相关的,我们这里以简单的配置IO(PF11引脚)驱动LED为例来讲述。

A.放大芯片图标,找到PF11(可以通过Find查找):

 

B.选中PF11-> 左键 -> 弹出列表 -> 选中“GPIO_Output”

 

C.配置“晶振”引脚(RCC配置)

如果使用“外部晶振”就还需要继续配置(我们配置HSE为例),包含三个配置:

HSE外部高速时钟、LSE外部低速时钟、MCO时钟输出。

 

5.Clock配置

这里的配置是比较人性化的配置,结合时钟树,一看就明白(也可以根据参考手册时钟树配置),配置方法一样。

 

6.“综合”配置

由于我们只配置了PF11引脚,其他功能(如DMA、USB等)没有配置,如果前面配置的有,这里配置的信息就比较多,所以叫“综合配置”。

点击GPIO,弹出配置对话框,按步骤依次填写完信息,点击“OK”就好了:

 

7.低功耗配置

一般在学习阶段,低功耗配置比较少,在实际项目中配置低功耗需要考虑的东西比较多(包括硬件)。

 

8.生成代码

在完成上面所有配置之后,最后的工作就是点击“生成代码”按钮:

 

如果前面配置的生成软件工程,就会拷贝HAL库文件在你的工程:

 

最后提示打开软件工程(前提是你已经安装了IDE:MDK-ARM)

 

9.编译下载

打开工程,编译没有错误,没有警告,下载,程序运行;

 

至此,整个过程就完成了。如果你的开发板LED灯引脚(PF11)和上面配置一样,则下载到开发板,从新复位则可见LED灯亮(低电平点亮LED)。

STM32CubeMX基本IO配置过程(原始版),提供给大家下载地址(360云盘):

https://yunpan.cn/cMm9rBQZNX3H4  访问密码 6735

 

10.添加代码

上面的工程是简单的工程(配置初始化代码),可以在提示处(如 USER CODE BEGIN)添加自己代码。

我在“USER CODE BEGIN 0”下添加了一个“测试延时”函数; 在“USER CODE BEGIN WHILE”处添加了一个LED亮灭语句。

添加以上两处代码就能实现LED间隔(延时)一段时间亮灭变化。

STM32CubeMX基本IO配置过程(修改版),提供给大家下载地址(360云盘):

https://yunpan.cn/cMmUMDSY8KSgi  访问密码 8304

 

Ⅲ、说明

以上就是一个“基本IO配置过程”的详细步骤,后续会定期更新使用STM32CubeMX新建各种外设资源工程的文章,敬请等待。

以上总结仅供参考,若有不对之处,敬请谅解。

 

Ⅳ、最后

我的网站:https://www.strongerhuang.com

我的微信公众号(ID:strongerHuang)还在分享STM8、STM32、Keil、IAR、FreeRTOS、UCOS、RT-Thread、CANOpen、Modbus…等更多精彩内容,如果想查看更多内容,可以关注我的微信公众号。

 

微信公众号

 

<think>好的,我需要帮助用户解决在Proteus中使用STM32CubeMX、Keil进行定时器中断控制四位数码管的仿真问题。首先,用户的问题涉及多个工具和硬件组件,我需要分步骤梳理流程,确保每个环节都正确。 首先,用户提到了STM32CubeMX,这是配置STM32微控制器的重要工具。我需要考虑如何配置定时器中断,选择合适的定时器,比如TIM2,设置预分频器和重载值,计算时间间隔。例如,如果系统时钟是72MHz,要实现1秒中断,可能需要分频和自动重载值的组合,但要注意定时器的位数限制,可能需要多次中断累积。这里可能需要用户理解定时器的配置步骤,包括NVIC设置启用中断。 接下来是Keil部分,需要生成代码后,在IDE中编写中断服务例程。用户需要知道如何添加代码,更新计数器,并在达到预定时间后刷新数码管。动态扫描是关键,每个中断周期切换一位数码管,同时设置对应的段选和位选。这部分代码需要正确放置在定时器回调函数中,比如HAL_TIM_PeriodElapsedCallback。 然后是Proteus的电路设计。用户需要添加STM32芯片、四位数码管(共阴或共阳)、电阻等元件。数码管的连接方式影响代码的段选和位选逻辑,共阴和共阳的驱动方式不同,需要确认电路连接正确,比如使用PNP还是NPN三极管驱动,或者直接连接IO口但注意电流限制。可能需要上拉或下拉电阻,确保信号稳定。 调试部分,用户可能会遇到仿真结果不符合预期的情况。常见问题包括定时器配置错误、中断未正确触发、数码管引脚连接错误或段码表错误。需要指导用户检查时钟配置、中断优先级、GPIO初始化状态,以及Proteus中的元件参数是否匹配代码设置。 参考之前的引用,用户提供的资料提到了定时器中断实验和数码管显示,但需要具体整合到四位数码管的控制。动态扫描需要定时器中断定期切换显示位,同时更新段码数据。可能需要用到多个GPIO端口来控制段选和位选,比如使用Port A的某些引脚作为段选,Port B的某些引脚作为位选。 另外,用户可能需要了解如何将生成的代码从Keil编译成hex文件,并在Proteus中加载,设置正确的时钟频率。仿真运行时,观察定时器是否按预期触发中断,数码管是否显示正确数字,有无闪烁或亮度不均,这可能是因为刷新频率不够,需要调整定时器中断的间隔时间,比如每5ms刷新一次,四位数码管则整体刷新率为50Hz,避免闪烁。 最后,生成相关问题需要考虑用户可能的后续疑问,比如如何扩展更多位数、实现更复杂的显示效果,或者如何处理多个定时器任务,以及如何优化代码减少资源占用等。这些问题有助于用户深入学习定时器和外设的应用。</think>### STM32定时器中断控制四位数码管仿真教程 #### 一、环境配置 1. **STM32CubeMX设置** - 新建工程选择对应STM32型号(如STM32F103C8) - 配置系统时钟树为72MHz(需启用外部晶振) - 开启定时器(如TIM2): ``` Prescaler = 7200-1 // 10KHz时钟 Counter Period = 2000-1 // 0.2秒间隔 ``` $$ f_{interrupt} = \frac{72MHz}{(7200 \times 2000)} = 0.5Hz $$ 实际采用动态扫描方式时建议设置为5ms中断周期[^2] - 启用NVIC中断 2. **GPIO配置** - 数码管段选(a-g+dp):配置为推挽输出模式 - 位选(DIG1-DIG4):配置为推挽输出模式 #### 二、代码开发(Keil) ```c // 在main.c中添加 uint8_t seg_code[16] = {0x3F,0x06,0x5B,...,0x71}; // 共阴数码管编码 uint8_t display_buf[4] = {0,1,2,3}; void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) { static uint8_t pos=0; HAL_GPIO_WritePin(GPIOB, DIG_ALL, GPIO_PIN_SET); // 关闭所有位选 // 设置段选数据 GPIOA->ODR = seg_code[display_buf[pos]]; // 开启当前位选 HAL_GPIO_WritePin(GPIOB, DIG_PINS[pos], GPIO_PIN_RESET); pos = (pos+1)%4; } ``` #### 三、Proteus电路设计 1. 元件清单: - STM32F103C8 - 4位共阴数码管(7SEG-MPX4-CC) - 4个PNP三极管(驱动位选) - 8个220Ω电阻(限流) 2. 连接方式: - PA0-PA7 连接数码管段选(a-g) - PB0-PB3 通过三极管控制位选 - 数码管公共端接VCC #### 四、联合调试步骤 1. STM32CubeMX生成代码后,在Keil中: - 添加中断回调函数 - 编译生成HEX文件 2. Proteus中: - 设置MCU时钟频率为72MHz - 加载生成的HEX文件 - 运行仿真观察数码管显示 #### 五、常见问题排查 1. 数码管不亮: - 检查共阴/共阳配置是否与代码一致 - 测量GPIO输出电平是否符合驱动要求 2. 显示错位: - 确认段选位选引脚映射关系 - 检查动态扫描频率是否过低(推荐>60Hz) 3. 中断不触发: - 验证NVIC中断使能状态 - 检查定时器时钟使能情况 [^1]: 定时器配置需注意APB1总线时钟分频系数 [^2]: 动态扫描频率计算公式:$$ f_{scan} = \frac{1}{N \times t_{int}} $$ 其中N为数码管位数
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

strongerHuang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值