【STM32 .Net MF开发板学习-02】GPIO测试

简介: 示例很简单,主要是按钮和LED灯的测试,红牛和EM-STM3210E的按钮和LED有所不同,所以有针对性的对二者pin都做了定义(这些信息,你可以直接看开发板相对应的原理图,很容易就可以获得相关Pin脚的定义)。

前段时间我借用市面上现成的Corex-M3开发板,打造了最低价的.Net Micro Framework开发板(参见《免费发放firmwave,打造史上最低价.Net MF开发板》),在此期间也写了一个最简单的应用示例(参见《【STM32 .Net MF开发板学习-01】Hello world》),没有想到是,在硬件开发板上却出现了一些波折,耽搁了很长时间,所以第二个应用示例直到今天才开始写。

什么波折呢?

在淘宝网上搜索相关的开发板,光想搜索最便宜的了,忽视了LCD尺寸,选了一个2.8的,而我手头上的开发板却是3.2的,二者显示驱动芯片不同。问店老板说是Ili9325,其实却是4531,此外还少焊了一个贴片电阻,造成USB不能用。还有宣称的RAM 512k,其实只有256k,以上种种造成了一些用户直到昨天才能正常运行.Net Micro Framework(不过,有些用户的开发板截止到现在还不正常,不知道还有哪方面的硬件问题)。可见山寨的东东,其质量,其开发者的责任心都有待提高。所以这里建议用户如果不太在意开发板的成本,可以选择我推荐的第二种开发板。

详细内容请参见:http://space.cnblogs.com/group/topic/40303/

示例很简单,主要是按钮和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 };

           //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 };

#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());

        }

    }

}

超级终端显示的信息如下:
image.png

 

下一个示例就是介绍图形绘制方面的了(非官方WPF),敬请关注。


源码下载:http://www.sky-walker.com.cn/yefan/MFV40/SourceCode/GPIOTest.rar

文章参考: 《.Net Micro Framework 快速入门》

中文讨论组:http://space.cnblogs.com/group/MFSoft/

相关文章
|
4月前
|
架构师 测试技术 网络性能优化
dpdk课程学习之练习笔记七(vpp环境搭建及plugin demo测试)
dpdk课程学习之练习笔记七(vpp环境搭建及plugin demo测试)
161 0
|
2月前
|
存储
STM32F103标准外设库——GPIO 输入、输出 (五)
STM32F103标准外设库——GPIO 输入、输出 (五)
69 0
STM32F103标准外设库——GPIO 输入、输出 (五)
|
4月前
|
存储 缓存 网络协议
dpdk课程学习之练习笔记二(arp, udp协议api测试)
dpdk课程学习之练习笔记二(arp, udp协议api测试)
63 0
|
18天前
|
芯片
stm32f4外设学习篇(代码集合)(一)
stm32f4外设学习篇(代码集合)
|
25天前
|
监控 安全 Shell
深入探究App压力测试的关键要点:从零开始学习Monkey
Monkey是Google的自动化测试工具,用于模拟用户随机事件以测试应用的稳定性和压力。它可以在模拟器或设备上运行,通过随机点击发现潜在问题。
24 1
|
1月前
|
存储 C语言 芯片
C/C++ stm32基础知识超详细讲解(系统性学习day14)
C/C++ stm32基础知识超详细讲解(系统性学习day14)
|
1月前
|
IDE 编译器 开发工具
学习STM32,该用哪款开发工具?
学习STM32,该用哪款开发工具?
49 1
|
2月前
|
机器学习/深度学习 存储 编解码
多任务学习新篇章 | EMA-Net利用Cross-Task Affinity实现参数高效的高性能预测
多任务学习新篇章 | EMA-Net利用Cross-Task Affinity实现参数高效的高性能预测
42 0
|
3月前
|
芯片
STM32 GPIO工作原理详解
STM32 GPIO工作原理详解
|
3月前
|
NoSQL 关系型数据库 MongoDB
【DotNetGuide】C#/.NET/.NET Core学习、工作、面试指南
【DotNetGuide】C#/.NET/.NET Core学习、工作、面试指南
105 0