<acronym id="xonnx"></acronym>
      <td id="xonnx"></td>
    1. <pre id="xonnx"></pre>

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

        關閉窗口

        相關文章

        欧美性色欧美精品视频,99热这里只有精品mp4,日韩高清亚洲日韩精品一区二区,2020国自产拍精品高潮