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

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

时间: 2024-12-23 18:18:43

【STM32 .Net MF开发板学习-02】GPIO测试的相关文章

【STM32 .Net MF开发板学习-20】蓝牙遥控智能小车(手机模式)

无论是用WIfi还是用GPRS遥控小车,目前都离不了PC这个中转站,并且PC还得借助Zigbee通道和小车通信,这就大大地增加了此遥控平台的构建代价.以前在研究iRobot机器人的时候,用过其配套的蓝牙模块,可以通过PC上的蓝牙连接,远程控制iRobot(相关文章<用MF控制机器人>).目前大部分手机也都支持蓝牙接口,所以基于此,我们借用iRobot的蓝牙模块,就可以用手机直接遥控智能小车了. 不过问题来了,原蓝牙模块是和iRobot配套的,其模块供电.串口连接等问题不用考虑,直接插入25针的

【STM32 .Net MF开发板学习-18】GPRS遥控智能小车

有了Wifi间接控制智能小车的经验,很自然的想到,也可以通过GPRS远程遥控智能小车,因为从通信原理上看,二者其实没有什么本质的不同,都是基于Socket的TCP通信,其控制环节如下: 手机 ===> GPRS(TCP/IP) ===> PC ===> Zigbee(串口232/TTL) ===> 智能小车 与Wifi通信不同,要使手机连接GPRS,还得需要进行一定的编程才能完成,相关内容,我这里也不用介绍了,我以前写的博文<让智能手机和居家电脑互联互通(WM6 GPRS)&

【STM32 .Net MF开发板学习-17】Wifi遥控智能小车

恰好以前购买的一个PDA含Wifi功能,所以与其用PC通过Zigbee控制智能小车,不如用PDA来控制,这样更为方便,不过由于目前.NET MF开发板不直接支持Wifi功能,所以我们也只好间接控制了,也就是PDA控制PC,PC通过Zigbee控制智能小车. 对我们开发者来说,Wifi和普通的网线接口一样,都是Socket编程.我们只需用在PDA上构建一个简单的TCP Client端,在PC构建一个TCP Server端即可,PDA发送相关指令,PC接收后通过Zigbee转发给智能小车. PDA

【STM32 .Net MF开发板学习-16】Zigbee遥控智能小车

Zigbee技术目前在物联网领域和RFID一样,受关注度非常高.日前中科院上海微系统与信息技术研究所.无锡物联网产业研究院等传感器网络标准工作组成员单位联合发布了名为VW628.WSNS1_SCBR的两款中国自主知识产权的无线传感网SoC芯片,其中WSNS1_SCBR为中国首款符合IEEE802.15.4g标准的验证型全集成传感网节点SoC芯片. 其实封装好的Zigbee模块,使用起来和操作串口一样,特别是我们把其通信模式设置为透明传输模式,这时候我们已经感觉不到是在用Zigbee模块,而觉得是

【STM32 .Net MF开发板学习-15】红外遥控智能小车

我前段时间写了<用PWM驱动智能小车>和<红外遥控器编码识别>两篇博文,分别介绍了如何用PWM驱动直流电机及红外遥控器编码识别,这一次我们把二者结合起来,用红外遥控器遥控智能小车. 在<红外遥控器编码识别>中,我们用面包板搭建简单的电路,来验证红外接收信号,但是放在小车上是不行的,相关器件我们需要进行焊接,最终完成图如下. 开发板学习-15]红外遥控智能小车-">我们把智能小车和红外板拼装在一起,最终完成图如下:

【STM32 .Net MF开发板学习-11】步进电机控制(非PWM模式)

选用的步进电机的型号为28BYJ-48(或MP28GA,5V,转速比1/64),驱动电路选用uln2003芯片的驱动板,其控制时序图如下: 开发板学习-11]步进电机控制(非PWM模式)-">四相八拍:A->AB->B ->BC ->C ->CD ->D ->DA 其A.B.C.D指的是uln2003芯片驱动板的1N1.1N2.1N3.1N4,波形在上表示有输入信号,波形在下表示无输入信号. 我们采用红牛开发板进行步进电机控制,为了便于接线,我们需

【STM32 .Net MF开发板学习-05】PC通过Modbus协议远程操控开发板

从2002年就开始接触Modbus协议,以后陆续在PLC.DOS.Windows..Net Micro Framework等系统中使用了该协议,在我以前写的一篇博文中详细记载了这一段经历,有兴趣的朋友可以看一看<我的Modbus Slave/Client开发历程(Rtu/AscII/Tcp)>.该协议公开,精简,并且可靠,目前大部分智能仪表,智能模块和一些PLC都采用了该协议,前一段时间有位网友询问相关Modbus的问题,所以这里就以Modbus的实现来来作为.Net MF开发板的串口示例.

【STM32 .Net MF开发板学习-10】SPI测试之触摸屏坐标获取

STM32F103xx Cortex-M3系列的芯片含三路SPI通道,红牛开发板用了两路,SPI1连接AT45DB161B型号的SPI Flash,SPI2连接ADS7843触摸屏信号处理芯片,SPI3最好不要用,因为和JTAG的管脚有冲突,调试时会有问题.EM-STM3210E开发板由于不含触摸屏,所以只用了一路来连接SPI Flash.本篇博文介绍触摸屏坐标获取,所以只有拥有红牛开发板的用户可以测试. 先简单介绍一下SPI相关的知识,SPI是英语Serial Peripheral inter

【STM32 .Net MF开发板学习-01】Hello world

开发前准备: 1.下载并安装VS2008 SP1 .Net Micro Framework支持VS 2008 Express版本,这是一款免费的开发工具,不过我没有使过,有条件的朋友可以优先考虑安装专业版或企业版. VS2008 Express sp1的下载地址如下: http://www.microsoft.com/express/download/ 2.下载.NET Micro Framework 4.0 SDK 要开发应用程序,还必须下载.NET Micro Framework 4.0 S