天天看點

【STM32 .Net MF開發闆學習-02】GPIO測試

什麼波折呢?

在淘寶網上搜尋相關的開發闆,光想搜尋最便宜的了,忽視了LCD尺寸,選了一個2.8的,而我手頭上的開發闆卻是3.2的,二者顯示驅動晶片不同。問店老闆說是Ili9325,其實卻是4531,此外還少焊了一個貼片電阻,造成USB不能用。還有宣稱的RAM 512k,其實隻有256k,以上種種造成了一些使用者直到昨天才能正常運作.Net Micro Framework(不過,有些使用者的開發闆截止到現在還不正常,不知道還有哪方面的硬體問題)。可見山寨的東東,其品質,其開發者的責任心都有待提高。是以這裡建議使用者如果不太在意開發闆的成本,可以選擇我推薦的第二種開發闆。

示例很簡單,主要是按鈕和LED燈的測試,紅牛和EM-STM3210E的按鈕和LED有所不同,是以有針對性的對二者pin都做了定義(這些資訊,你可以直接看開發闆相對應的原理圖,很容易就可以獲得相關Pin腳的定義)。

功能就是 LED每隔1s就亮滅一次,按相關按鍵,則從調試口輸出按鍵資訊。

核心代碼如下:

#define Redox   //紅牛開發闆

using System;

using Microsoft.SPOT;

using Microsoft.SPOT.Hardware;

using System.Threading;

namespace GPIOTest

{

    public class Program

    {

        enum GPIO_NAMES

        {

            PA0, PA1, PA2, PA3, PA4, PA5, PA6, PA7, PA8, PA9, PA10, PA11, PA12, PA13, PA14, PA15,

            PB0, PB1, PB2, PB3, PB4, PB5, PB6, PB7, PB8, PB9, PB10, PB11, PB12, PB13, PB14, PB15,

            PC0, PC1, PC2, PC3, PC4, PC5, PC6, PC7, PC8, PC9, PC10, PC11, PC12, PC13, PC14, PC15,

            PD0, PD1, PD2, PD3, PD4, PD5, PD6, PD7, PD8, PD9, PD10, PD11, PD12, PD13, PD14, PD15,

            PE0, PE1, PE2, PE3, PE4, PE5, PE6, PE7, PE8, PE9, PE10, PE11, PE12, PE13, PE14, PE15,

            PF0, PF1, PF2, PF3, PF4, PF5, PF6, PF7, PF8, PF9, PF10, PF11, PF12, PF13, PF14, PF15,

            PG0, PG1, PG2, PG3, PG4, PG5, PG6, PG7, PG8, PG9, PG10, PG11, PG12, PG13, PG14, PG15

        };

        public static void Main()

#if Redox

           //wakeup - PA0  tamper- PC13  user1-PA8 user2- PD3  

            Cpu.Pin[] Button_Pins = new Cpu.Pin[] { (Cpu.Pin)GPIO_NAMES.PA0, (Cpu.Pin)GPIO_NAMES.PC13, (Cpu.Pin)GPIO_NAMES.PA8, (Cpu.Pin)GPIO_NAMES.PD3};

           //LED

           Cpu.Pin[] LED_Pins = new Cpu.Pin[] { (Cpu.Pin)GPIO_NAMES.PF6, (Cpu.Pin)GPIO_NAMES.PF7, (Cpu.Pin)GPIO_NAMES.PF8, (Cpu.Pin)GPIO_NAMES.PF9, (Cpu.Pin)GPIO_NAMES.PF10 };

#else

           //user - PG8 up - PG13 left - PG14 right - PG15 down - PD3 sel - PG7 

           Cpu.Pin[] Button_Pins = new Cpu.Pin[] { (Cpu.Pin)GPIO_NAMES.PG8, (Cpu.Pin)GPIO_NAMES.PG13, (Cpu.Pin)GPIO_NAMES.PG14, (Cpu.Pin)GPIO_NAMES.PG15, (Cpu.Pin)GPIO_NAMES.PD3, (Cpu.Pin)GPIO_NAMES.PG7 };

           Cpu.Pin[] LED_Pins = new Cpu.Pin[] { (Cpu.Pin)GPIO_NAMES.PF6, (Cpu.Pin)GPIO_NAMES.PF7, (Cpu.Pin)GPIO_NAMES.PF8, (Cpu.Pin)GPIO_NAMES.PF9 };

#endif

            InterruptPort[] button = new InterruptPort[Button_Pins.Length];

            for (int i = 0; i < button.Length; i++)

            {

                button[i] = new InterruptPort(Button_Pins[i], false, Port.ResistorMode.PullDown, Port.InterruptMode.InterruptEdgeBoth);

                button[i].OnInterrupt += new NativeEventHandler(Program_OnInterrupt);

            }

            OutputPort[] led = new OutputPort[LED_Pins.Length];

            for (int i = 0; i < led.Length; i++)

                led[i] = new OutputPort(LED_Pins[i], false);

            while (true)

                for (int i = 0; i < led.Length; i++)

                {

                    led[i].Write(!led[i].Read());

                }

                Thread.Sleep(1000);

        }

        static void Program_OnInterrupt(uint data1, uint data2, DateTime time)

            Debug.Print(data1.ToString() + ":" + data2.ToString());

    }

}

超級終端顯示的資訊如下:

【STM32 .Net MF開發闆學習-02】GPIO測試

下一個示例就是介紹圖形繪制方面的了(非官方WPF),敬請關注。

-----------------------------------------------------------------------------------------

繼續閱讀