專注電子技術學習與研究
當前位置:單片機教程網 >> 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:  理論夠硬,才能走得更遠。有問題,私信我。

關閉窗口

相關文章

街机奔驰宝马电玩城 重庆时时彩包胆 pc28最快开奖结果参考 股票融资融券怎么开通 江西十一选5分布走势图 天津时时彩几点开奖 中国福利彩票快乐双彩官网 166bet166bet百家乐包赢 ddx查股网 pk10五码二期必中技巧 pk10赛车技巧都有哪些 黑龙江36选7走势图幸运之门 双色球彩票手机下载 2012杭州文商配资 幸运快3是全国统一的吗 北京pk10走势图北京pk10历史开奖记录 360山东十一选五遗漏