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

      1. 專注電子技術學習與研究
        當前位置:單片機教程網 >> STM32 >> 瀏覽文章

        第二個應用:LED流水燈

        作者:huqin   來源:本站原創   點擊數:  更新時間:2014年04月19日   【字體:

          流水燈也叫跑馬燈,就是一排燈光交替點亮,從視覺上來說就像燈光在運動,下面我們將使用Rainbow板載的LED資源來實現一個簡單的LED流水燈。

            目的:
                1、熟悉Rainbow中如何設置GPIO模式、通過GPIO輸出高低電平
                2、了解Rainbow的延時函數

            所需硬件:
                1、Rainbow開發板
                2、USB-TTL模塊
                3、杜邦線 若干
                4、J-LINK或者ST-LINK

            所需軟件:
                1、MDK5.0(Keil5)
                2、串口及網絡調試工具
                3、Rainbow開發包

            ST提供的固件庫對STM32系列MCU的標準外設已經做了封裝,相對于直接操作寄存器來說已經方便很多了,使用GPIO的一般步驟是:初始化系統時鐘、初始化GPIO時鐘、設置GPIO模式、設置GPIO的輸出電平,整個初始化設置好幾十行代碼,實際上達到的目的卻非常簡單。Rainbow借鑒了Arduino開源硬件的思想,對GPIO進行了進一步的封裝,簡化了GPIO的表示方式,對于GPIOA-GPIOC管腳,直接使用PA0-PA15、PB0-PB15、PC0-PC15來表示。要使用一個GPIO,僅僅兩個步驟即可:
            1、設置GPIO管腳模式:調用pinMode函數
                 函數原型:void pinMode(GPIOPinName pinName, GPIOMode_TypeDef pinMode)
                 功能:設置指定GPIO的管腳模式
                 參數:pinName 管腳的名稱,如PA0、PB15等
                       pinMode 管腳的輸入輸出模式,參見ST固件庫GPIOMode_TypeDef類型。GPIO_Mode_Out_PP表示
                               推挽輸出模式

            2、使用digitalWrite()在指定管腳輸出高低電平
                 函數原型:void digitalWrite(GPIOPinName pinName, uint8_t val)
                 功能:向指定的管腳寫入HIGH或LOW
                 參數:pinName 管腳的名稱,如PA0、PB15等
                       val 管腳輸出的值:HIGH或者LOW

            軟件延時在嵌入式開發中必不可少,Rainbow通過利用STM32單片機中的SysTick進行了相對精確的延時,可以支持毫秒級延時和微秒級延時,其中毫秒級比較準確,微秒級有一定誤差,但是比起使用指令延時來說已經精確很多了。毫秒級延時使用delay()函數,其參數指定延時的毫秒數;delayMicroseconds()進行微秒級延時,其參數指定延時的微妙數。

            我們建立一個工程Led,并將Rainbow開發包導入到工程中,為了快速上手,在軟件包的“QuickStart”文件夾中的Led工程是一個我們預先建立好的工程,可以直接進行編譯、燒寫和調試。

            創建main.cpp,并輸入下列代碼:
        #include "WProgram.h"

        int main(void)
        {
            //流水燈對應的管腳
            GPIOPinName ledPins[] = {LED1_PIN, LED2_PIN, LED3_PIN, LED4_PIN};
            uint8_t i;

            //初始化開發板
            boardInit();
            //設置led輸出口的模式為推挽輸出模式,并關閉所有LED
            for(i=0; i<4; i++)
            {
                pinMode(ledPins[i], GPIO_Mode_Out_PP);
                digitalWrite(ledPins[i], HIGH);
            }

            while(1)
            {
                for(i=0; i<4; i++)
                {
                    //點亮LED
                    digitalWrite(ledPins[i], LOW);
                    //延時500ms
                    delay(500);
                    //滅掉LED
                    digitalWrite(ledPins[i], HIGH);
                }
            }
        }

            在編譯器中編譯無誤,通過ST-LINK燒寫到Rainbow后,就會看到LED交替點亮和熄滅,實現了流水燈的效果。

        關閉窗口

        相關文章

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