专注电子技术学习与研究
当前位置:单片机教程网 >> STM32 >> 浏览文章

STM32点亮第一个LED使用keil for ARM MDK 软件仿真

作者:忙碌的小姚   来源:忙碌的小姚   点击数:  更新时间:2014年06月10日   【字体:

按照上一章建立的第一个工程模板,我们只需要在main函数里加入相关的点亮led灯的代码,并使用keil的软件仿真功能。

 

  软件仿真在一定程度上可以在设计的初期发现程序的错误,减少我们下载到开发板的麻烦。但是纯软件的仿真的正确,也不能保证程序就正确。有时候仿真正确,实物却没这个效果。有时软件仿真结果是错误,你分析你的程序却没错误。

遇到多了,经验也就出来,前几天我仿真一个STM32Systick ,仿真结果就不对,程序就是对的,我估计也许是软件本身的问题。 

  我建议用STM32+JLINK 进行仿真,有个硬件平台结果的正确性就有保证。

Main.c 函数代码:

   #include "stm32f10x.h"

void delay(void)  

{

  int i,j;

for(i=1000;i>0;i--)

  for(j=1000;j>0;j--);

}

 void GPIO_Config(void)

{

    GPIO_InitTypeDef  GPIO_InitStructure;   

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);

    GPIO_InitStructure.GPIO_Pin GPIO_Pin_5 GPIO_Pin_6;   

    GPIO_InitStructure.GPIO_Speed GPIO_Speed_50MHz;  

    GPIO_InitStructure.GPIO_Mode GPIO_Mode_Out_PP; 

    GPIO_Init(GPIOB &GPIO_InitStructure); 

}

int main(void)

{  

 

GPIO_Config();

 SystemInit();

  

while(1)

GPIO_SetBits(GPIOB,GPIO_Pin_5 ); //点亮PB.5

     delay();

GPIO_ResetBits(GPIOB,GPIO_Pin_5 );//熄灭PB.5

   delay();

GPIO_SetBits(GPIOB,GPIO_Pin_6 );//点亮PB.6

     delay();

GPIO_ResetBits(GPIOB,GPIO_Pin_6 );//熄灭PB.6

    delay(); 

  }

}

 

代码分析:

 

GPIO_InitTypeDef  GPIO_InitStructure; 

    定义一个结构变量GPIO_InitStructure  ,结构体类型为GPIO_InitTypeDef ,相当于int      

    GPIO_InitTypeDef =int     GPIO_InitStructure=A一样。    

 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);

    开启GPIOB的时钟,要使用某个管脚都需要开启该管脚的时钟 

 GPIO_InitStructure.GPIO_Pin GPIO_Pin_5 GPIO_Pin_6;

     管脚号设置为第五脚和第六脚 

 

 GPIO_InitStructure.GPIO_Speed GPIO_Speed_50MHz; 

   GPIO_Speed_10MHz

   GPIO_Speed_2MHz, 

   GPIO_Speed_50MH

   设置管脚电平翻转的速率,比如不要求快速变化一般10M,做串口的时候设置较高波特率的话就使用50MHZ的。

 

GPIO_InitStructure.GPIO_Mode GPIO_Mode_Out_PP; 

   设置输出为推挽输出。 它有8中工作模式,输出只有两种推挽和开漏输出。其它可以参  

   考相关手册

GPIO_Init(GPIOB &GPIO_InitStructure); 

   这一句就是将前面四句的设置初始化到GPIOB中;

 

 SystemInit();   将系统时钟设置为72M,不写这句,默认为8M

      GPIO_SetBits(GPIOB,GPIO_Pin_5 ); //点亮PB.5

     delay();// 延时

GPIO_ResetBits(GPIOB,GPIO_Pin_5 );//熄灭PB.5

   delay();

GPIO_SetBits(GPIOB,GPIO_Pin_6 );//点亮PB.6

     delay();

GPIO_ResetBits(GPIOB,GPIO_Pin_6 );//熄灭PB.6

    delay(); 

编译链接,然后开始软件仿真

软件仿真介绍:

1、编译连接好后,点击debug 进入调试界面

 


2、调试窗口如下


3

图片上加文字不好弄,大概就是复位、运行、停止、单步运行等我也不太熟悉,反正用到的时候试一试就知道了。



 

4、选择菜单栏上的 peripherals 按钮,选择general purpose I/O GPIOB


5、点击左上角的运行按钮 或者按F5键 就可以看到GPIOB5,6 在一闪一闪的


6、顺便在看看波形仿真功能

   点击下图的波形分析按钮


 

7、、点击setup 按钮 会弹出一个窗口,在窗口的右上边,有个new的按钮,点击后

  分别输入 PORTB.5  PORTB.6



 8、点击运行,将窗口调到合适的位置,最终波形图如下;

  

 


 

      写得有些地方可能有错误,明天就要回四川了,有些急。

      我想把keil工程传上来,没有看见上传文件的地方,以后把每个工程都上传上去。

  

                                                                  2014112

题外篇:

    快半个月没发表,我断断续续学到串口,滴答定时器那里了。我感觉这样不好,以后我学习一课我就发表一篇学习笔记,不要老是等学了几课后再发表前面的。

    明天就回四川了,上个月六号离开四川去深圳,这个月13号又离开深圳回四川。深圳我不想多谈的城市,细数了一下,到现在为止一共去了五趟深。今年最多,三入深圳,两进手术台,倒把人生的大多事看明白了看得淡了。好多事情我都不愿去管了,越来越漠不关心了。 

   估计再也不会来深圳,它的繁华亦不会再与我有交集。   

 

PS:  理论够硬,才能走得更远。有问题,私信我。

关闭窗口

相关文章