(一)STM32光速入门实战项目-在Proteus中点亮LED
本文介绍了Keil5和Proteus的安装配置流程以及LED闪烁实验的实现方法。主要内容包括:Keil5-MDK的安装、器件支持包选择和软件注册;Proteus8.17版本的安装和元件放置方法;Keil5新建STM32工程四步骤(新建工程、添加主函数、导入启动文件、代码测试);最后通过编写LED控制代码实现Proteus仿真中的LED闪烁效果。文章提供了详细的操作步骤和注意事项,包括硬件连接、寄存
安装 Keil5
- 安装 Keil5-MDK
- 安装器件支持包(像32的嵌入式设备有很多,选择对应的器件进行下载)
- 软件注册
- 修改设置与安装驱动(用于将程序写入真实硬件,仿真可不下,如果使用真实硬件的话要选择对应的驱动,位置在Project-Options for Target-Debug-Use下拉框)
注意这里:设置我只改了【菜单】-Project-Options for Target-Output。因为要给仿真软件跑代码

安装 Proteus
- 尝试了 8.10 和 8.6 版本都不行,最终tb 8.17 版本
硬件部分-Proteus入门(以LED电路示例)
放置元件
-
打开Proteus软件——新建工程,一直点下一步,直到进入原理图编辑界面。
-
点击元件列表上方的"P"按钮(下图中红色框标注),弹出元件库搜索窗口,从搜索结果中双击目标元件将其添加到当前元件列表。
-
从左侧元件列表中选择已添加的元件,在原理图编辑区单击鼠标左键即可放置元件,右键单击结束放置。
-
放置元件后双击该元件,可修改元件属性参数。
-
使用左侧工具栏/元件位置右键中的工具可改变元件方向。
-
从一个元件的引脚端点单击鼠标左键开始连线,移动鼠标到目标引脚再次单击完成连接。
注意:电源在终端模式的POWER这里,而stm32仿真可以不画外部电路,但要修改电源设置,在菜单栏——设计——配置供电网。


仿真图(初学者可直接对着画)

软件部分-四步新建点灯工程
(1)新建工程
打开Keil5点击Project---New uVision Project---选择存放的文件夹并取名---选择32芯片(如果这一步找不到就要去安装对应的器件支持包,我这里选择STM32F103C8)---连续点ok直到工程建立

结果(点击左边+号有一个默认文件夹):

(2)新建主函数文件
添加新的C文件,命名为【main.c】


(3)必要的启动文件
STM32需要启动文件,在工程所在的文件夹中里,直接把这些文件丢进去。(或者新建一个文件夹如Start,把启动文件都放在一个文件夹里,不会显得太乱,我这里直接放在工程根目录了) 。
建议下载下面这个,解压后直接全选复制。

单独放文件夹的效果

在软件中添加启动文件
(为什么要在软件里再添加一次:因为我们只是把文件放到电脑里了,而软件并不知道你的意图)


如果启动文件放在主目录,全选添加跳过3个文件,也可以全选,再取消无法识别的,如图

添加完后关闭,左边结构如图

(4)测试
主函数main.c中输入代码,注意最后加一空行,否则编译器可能会报出警报。
//注意我这里没有头文件,这个仿真可以不需要
int main(void){
while(1){
}
}
代码编辑完成后,点击左上角的"Build",进行编译并建立工程。

若下方提示信息是"0 Error(s), 0 Warning(s)",说明步骤没问题,则可以进行点灯实验了。

如果出现这个错误,提示你添加了多个startup文件,这里使用的是startup_stm32f10x_md.s。
.\Objects\project.sct(7): error: L6235E: More than one section matches selector - cannot all be FIRST/LAST.
Proteus+Keil5 实现LED闪烁
主函数代码
在上一步的main.c文件中输入代码,代码编辑完成后,点击左上角的"Build",进行编译并建立工程。
typedef unsigned char uint8_t;
typedef unsigned short uint16_t;
typedef unsigned int uint32_t;
// 以操作GPIOC的PC13引脚为例,定义所需寄存器地址
#define RCC_APB2ENR ((volatile uint32_t*)0x40021018) // RCC APB2时钟使能寄存器
#define GPIOC_CRH ((volatile uint32_t*)0x40011004) // GPIOC端口配置高寄存器
#define GPIOC_ODR ((volatile uint32_t*)0x4001100C) // GPIOC输出数据寄存器
// 简单延时函数
void delay_s(uint32_t s) {
uint32_t i, j;
for (i = 0; i < s; i++)
for (j = 0; j < 16e3; j++);
}
int main(void) {
// 1. 使能GPIOC时钟
*RCC_APB2ENR |= (1 << 4); // 将RCC_APB2ENR的第4位(GPIOC时钟位)置1
// 2. 配置PC13为推挽输出(50MHz速率)
*GPIOC_CRH |= (0x3 << 20); // 写入0011,配置为通用推挽输出
// 3. 循环点亮/熄灭LED
while (1) {
*GPIOC_ODR &= ~(1 << 13); // 置PC13为低电平,点亮LED
delay_s(1); //仿真proteus中OSC Frequency=8M,Clock Scale=8s时,差不多1s
*GPIOC_ODR |= (1 << 13); // 置PC13为高电平,熄灭LED
delay_s(1);
}
}
Proteus加载程序
双击stm32芯片打开元件属性窗口,点击右边的文件选择器

选择刚刚编译生成的工程hex文件(在工程文件夹里),确定后运行



运行效果(LED闪烁)


更多推荐




所有评论(0)