STM32学习心得:关于仿真软件

Keil MDK5是一款常用的STM32开发软件,它不仅可以帮助开发者进行裸机编程,也可以支持各种操作系统的开发。当然,Keil MDK5的一个重要功能是支持仿真器,这是一个广泛应用于STM32仿真和调试过程中的工具。在STM32开发中,仿真器起到了至关重要的作用,本文将从仿真原理和具体实践两个方面,分享我在利用Keil MDK5仿真器进行STM32开发中的心得。

Keil MDK5是一款非常强大的嵌入式系统开发工具,主要用于开发和调试ARM Cortex-M处理器架构的应用程序,支持包括仿真和调试、编译、链接、下载和Flash编程在内的众多功能。而在Keil MDK5的应用中,仿真软件也是一个非常重要的组成部分,对于开发人员来说,掌握仿真软件运用的技巧和经验是非常有必要的。

这是课堂上,老师让弄作业其中一个案例

修改了主要的文件:main、led、key;

这是main.c

#include "led.h"
#include "delay.h"
#include "sys.h"
#include "key.h"
 int main(void)
 {	
	u8 t=0;	  
	delay_init();	    	 //延时函数初始化	  
	LED_Init();		  	 	//初始化与LED连接的硬件接口
	KEY_Init();          	//初始化与按键连接的硬件接口
	LED0=0;
					//点亮LED
	while(1)
	{
		t=KEY_Scan(0);
		switch(t)
		{				 
			case KEY0_PRES: LED0=!LED0;break;
			case KEY1_PRES: LED1=!LED1;break;
			case WKUP_PRES:	LED0=!LED0;
											LED1=!LED1;break;
			default: delay_ms(5);	
		} 
	}		 
}

这是led.c

#include "led.h"


void LED_Init(void)
{
 
 GPIO_InitTypeDef  GPIO_InitStructure;
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOD, ENABLE);	 //使能PA,PD端口时钟
	
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;				 //LED0-->PA.8 端口配置
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 		 //推挽输出
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;		 //IO口速度为50MHz
 GPIO_Init(GPIOA, &GPIO_InitStructure);					 //根据设定参数初始化GPIOA.8
 GPIO_SetBits(GPIOA,GPIO_Pin_8);						 //PA.8 输出高

 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;	    		 //LED1-->PD.2 端口配置, 推挽输出
 GPIO_Init(GPIOD, &GPIO_InitStructure);	  				 //推挽输出 ,IO口速度为50MHz
 GPIO_SetBits(GPIOD,GPIO_Pin_2); 						 //PD.2 输出高 
}
 

这是key.c

#include "key.h"
#include "delay.h"

void KEY_Init(void)
{
	
	GPIO_InitTypeDef GPIO_InitStructure;

 	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOC,ENABLE);//使能PORTA,PORTC时钟

	GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);//关闭jtag,使能SWD,可以用SWD模式调试
	
	GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_15;//PA15
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //设置成上拉输入
 	GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOA15
	
	GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_5;//PC5
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //设置成上拉输入
 	GPIO_Init(GPIOC, &GPIO_InitStructure);//初始化GPIOC5
 
	GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_0;//PA0
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; //PA0设置成输入,默认下拉	  
	GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOA.0
	
} 
//按键处理函数
//返回按键值
//mode:0,不支持连续按;1,支持连续按;
//返回值:
//0,没有任何按键按下
//KEY0_PRES,KEY0按下
//KEY1_PRES,KEY1按下
//WKUP_PRES,WK_UP按下 
//注意此函数有响应优先级,KEY0>KEY1>WK_UP!!
u8 KEY_Scan(u8 mode)
{	 
	static u8 key_up=1;//按键按松开标志
	if(mode)key_up=1;  //支持连按		  
	if(key_up&&(KEY0==0||KEY1==0||WK_UP==1))
	{
		delay_ms(15);//去抖动 
		key_up=0;
		if(KEY0==0)return KEY0_PRES;
		else if(KEY1==0)return KEY1_PRES;
		else if(WK_UP==1)return WKUP_PRES; 
	}else if(KEY0==1&&KEY1==1&&WK_UP==0)key_up=1; 	     
	return 0;// 无按键按下
}

还要分别对main、led、key的头文件的引用。

我的心得体会:

        这种多文件的形式,确实让我很头大,觉得难学习。

        在学习的过程中,可能会遇到很多难点。其中,最大的难点可能是对硬件和软件的理解。

        首先,需要自身对STM32微控制器有一定的了解,包括它的引脚分布、时钟控制、中断机制等等。初学者可能需要通过查阅官方文档、参考书籍或者其他相关资料来对这些基础知识有一个全面的认识。

        其次,在学习仿真软件时,需要对仿真工具的使用进行掌握,例如如何配置仿真环境、如何加载程序、如何进行单步调试等等。此外,还需要对程序代码有一定的观察和理解能力,以便对程序逻辑进行调试和测试。

        最后,学习Keil MDK5时还需要掌握一些基于C语言的编程技巧,并具备一定的算法和数据结构知识。这些都是必要的前置条件,以便更好地理解和掌握Keil MDK5的使用方法和编程技巧。

        总的来说,学习Keil MDK5和STM32最小系统以及仿真软件,真的需要耐心,耐心,耐心!!!

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值