安装 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电路示例)

放置元件

  1. 打开Proteus软件——新建工程,一直点下一步,直到进入原理图编辑界面。

  2. 点击元件列表上方的"P"按钮(下图中红色框标注),弹出元件库搜索窗口,从搜索结果中双击目标元件将其添加到当前元件列表。

  3. 从左侧元件列表中选择已添加的元件,在原理图编辑区单击鼠标左键即可放置元件,右键单击结束放置。

  4. 放置元件后双击该元件,可修改元件属性参数。

  5. 使用左侧工具栏/元件位置右键中的工具可改变元件方向。

  6. 从一个元件的引脚端点单击鼠标左键开始连线,移动鼠标到目标引脚再次单击完成连接。

注意:电源在终端模式的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闪烁)

Logo

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

更多推荐