Proteus 仿真 STM32 之按键点灯

近来由于工作需要重拾proteus仿真功能,遇到诸多问题,下面从点灯开始说起。

本文使用的是 keil 软件 和 proteus 软件,搭建内容不再详述。

  • 仿真放置图形
  • 配置引脚
  • 代码编写

仿真放置图形

这里直接选择左方的器件选择模式

 搜索stm32f103c8, res(电阻),button(按键) ,led-red(红色led)添加进入元件库

按图示摆放即可

 配置引脚

这里有小伙伴放置连线后找不到如何配置引脚,说明一下,在终端模式中有VCC,GROUND,还有BIDIR(双端口),INPUT(输入端口)和OUTPUT(输出端口)就是上图的引脚添加连线即可。

批量添加标注:光有引脚还得加标注proteus才知道谁和谁是一对儿。在这个原理图设计界面空按键盘A,出现如下所示

字符串一栏输入NET=PA# 点击确定再依次点击之前布置好的引脚即可。 

 代码编写

打开keil,打开一个工程。这里stm32相较于51单片机的内容更加复杂更多的使用内置的函数,推荐大家网上直接下载配置好的工程模板。

这里有其他博客的下载链接:工程模板

先清空自带的led.c 和 led.h 文件,输入下面的内容

#include "led.h"
#include "stm32f10x.h"
void LED_Init(void)
{
	//声明一个结构体,名字是GPIO_InitStructure
	GPIO_InitTypeDef GPIO_InitStructure;
	//使能GPIOC的时钟,ENABLE代表使能
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//GPIOC

	GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;//上拉输入

	GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3; // 选中端口 0 1 2 3

	GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;  // 最大反转速度

	GPIO_Init(GPIOA,&GPIO_InitStructure);	// 初始化
	
}

 

#ifndef __LED_H
#define __LED_H


void LED_Init(void);


#endif

这个具体知识点学点c语言结构体和函数就行了。 

再向HAREWARE文件夹添加相应的key.c和key.h文件,像下面这样写

#ifndef __KEY_H
#define __KEY_H

void Key_Init(void);
uint8_t Key_GetNum(void);
#endif
#include "stm32f10x.h"                  // Device header
#include "key.h"
#include "delay.h"
void Key_Init(void)
{
	GPIO_InitTypeDef GPIO_InitStructure;
	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);//GPIOC

	GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP; // 推挽输出
	
	GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3; 
	
	GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; 
	
	GPIO_Init(GPIOB,&GPIO_InitStructure);
	
}

uint8_t Key_GetNum(void)
{
	uint8_t Key_Num = 0;		// 相当于一个unsigned char类型
	
	// S1
	if (GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0) == 0)
	{
		delay_ms(20);
		Key_Num = 1;
	}
	
	// S2
	if (GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_1) == 0)
	{
		delay_ms(20);    // 简易消抖
		Key_Num = 2;
	}
	
	// S3
	if (GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_2) == 0)
	{
		delay_ms(20);
		Key_Num = 3;
	}
	
	// S4
	if (GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_3) == 0)
	{
		delay_ms(20);
		Key_Num = 4;
	}
	
	
	return Key_Num;
}

 引用的头文件delay.h是该工程模板自带的,直接使用即可。

上述代码我们将GPIOA口的0 1 2 3口配置成上拉输入的方式,GPIOB口的0 1 2 3口配置成推挽输出的方式。

最后在main.c文件中就很简单了,我们判断按键扫描函数的返回值即可。

#include "stm32f10x.h"
#include  "led.h"  // led
#include "delay.h"	// 延时
#include "key.h"	// 按键

int main(void)
{ 
	delay_init();
	LED_Init();
	Key_Init();
	
	while(1){  //主循环
		
		switch(Key_GetNum())
		{
			case 1: GPIO_SetBits(GPIOB,GPIO_Pin_0); break;
			case 2: GPIO_SetBits(GPIOB,GPIO_Pin_1); break;
			case 3: GPIO_SetBits(GPIOB,GPIO_Pin_2); break;
			case 4: GPIO_SetBits(GPIOB,GPIO_Pin_3); break;
			default: GPIO_ResetBits(GPIOB,GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3); break;
		}
	}
}


大家写的时候,如果对某些函数有疑问,选中函数右键选择go to definition即可。通用函数学习方法。

 

这些参数怎么用,有什么限制写得很清楚。

点击build按钮,无报错后,进入proteus双击stm32f103c8芯片,选择keil工程夹下的OBJ文件夹,里面有后缀为hex的十六进制文件,载入到芯片即可。

 

  • 18
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 好的,下面是proteus仿真stm32按键实验的回复: 首先,我们需要在proteus中添加stm32的模型和按键模型。然后,将按键连接到stm32的GPIO引脚上。接下来,我们需要编写stm32的程序,使其能够检测按键的状态,并根据按键的状态控制LED的亮灭。最后,我们可以在proteus中运行仿真,测试按键实验的效果。 具体的步骤和代码实现可以参考以下链接: https://www.jianshu.com/p/9b1f3d3a3d3c 希望对您有帮助! ### 回答2: Proteus是一款十分强大的电子仿真软件,可以进行各种模拟电路的设计、分析和验证。在STM32按键实验中,我们可以使用Proteus来模拟按键的输入和输出。 首先,我们需要将STM32的开发板和按键模块添加到Proteus中。在Proteus的库中,可以找到STM32F407VG开发板和按键模块。将它们拖入工作区,并进行连接。 接下来,我们需要进行编程,定义按键的输入和输出。通过STM32的GPIO口,我们可以将按键的输入连接到相应的输入引脚上,将LED的输出连接到输出引脚上。在编程时,需要定义输入引脚和输出引脚的状态,根据按键的状态来控制LED的亮灭。 在编程完成后,进行仿真测试。在Proteus中,可以使用虚拟示波器来观测输入引脚和输出引脚的状态变化。同时,也可以通过LED的亮灭来验证按键操作是否正确。 总的来说,Proteus仿真STM32按键实验可以帮助我们更好地了解STM32的工作原理和使用方法,同时也可以避免实验过程中出现的电路短路等意外情况,确保实验的安全性和准确性。 ### 回答3: Proteus是一款功能强大的电路仿真软件,能够模拟各种电路元件的工作情况。其中,STM32是一款高性能的微控制器,有着广泛的应用领域。本文将介绍如何在Proteus仿真STM32按键实验。 首先,我们需要在Proteus中添加STM32F4系列微控制器模块。在Proteus主界面中,点击右上角的“P”图标,打开元件库管理器窗口。在搜索框中输入“STM32F4”,选择合适的型号,将其拖入电路图中。接着,需要添加按键元件。同样,在元件库管理器中搜索“按键”或其他相关关键词,选择适合的元件,拖入电路图中。 接下来,需要将按键STM32进行连接。在Proteus中,我们可以使用虚拟接口来模拟实际的硬件接口。选择STM32微控制器,进入属性窗口,找到相应的引脚,并分别连接到按键的两个接口上,如图所示。 完成连接之后,可以编写相应的程序代码,并将其烧录到STM32芯片中。在Proteus中,可以使用Keil软件对程序进行编译和烧录。启动Keil,选择STM32F4系列的芯片型号,创建新工程,编写程序代码,编译生成HEX文件,再将其烧录到Proteus中的STM32芯片中。 最后,点击Proteus界面中的“运行”按钮,即可开始仿真。此时,可以手动按下连接到STM32按键,观察程序是否正常运行、LED是否点亮等情况。如果存在问题,可以对程序代码进行调试和修改,反复测试,直到程序正常运行为止。 总之,使用Proteus进行STM32按键实验,可以使我们更方便地学习和掌握STM32的工作原理和应用方法,提高自己的电路设计和调试能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值