OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4443|回复: 2

Microsoft .NET Micro Framework移植开发笔记2之点灯神话

[复制链接]

58

主题

499

帖子

4

精华

金牌会员

Rank: 6Rank: 6

积分
1920
金钱
1920
注册时间
2013-11-18
在线时间
268 小时
发表于 2014-10-15 16:56:48 | 显示全部楼层 |阅读模式
      写完HelloWorld后,开始进入GPIO的操作,无论是拿到任何的嵌入式的板子,第一件事情就是点亮LED。MF也是这里开始,废话不多说,直接新建VS2010的MF工程。要想点亮LED,就是要操作GPIO,要操作GPIO口就要初始,MF也是一样。在Program.cs的Main函数加入初始化 OutputPort led0 = new OutputPort((Cpu.Pin)21, false);  OutputPort说明是把IO初始化成通用输出口,"(Cpu.Pin)21”说是初始化第21个IO(MF的IO是从PA0作0开始算,战舰板上的LED0是PB5,也就是16+5=21),后面的false是指初始化的电平,这里要点亮LED0,就要把电平拉低,所以是false(0)。点生成,会发现有错误,那是新建的工程里没增加定义Output的动态链接库。右键点右边的引用

找到Microsoft.SPOT.Hardware,然后点确定加进去。然后在代码开头用using看它加进去,即是using Microsoft.SPOT.Hardware; 这跟我们有#include是一样的。然后可以看到错误就没有了,点调试,把代码部署到板子就,就可以看到LED0被点亮了(这也太简单了吧,用MDK写的话要点亮LED,还要一大堆的工作,大家都知道,就不说了)。
     点亮了LED后,都会想怎么把它闪烁起来。要闪烁自然要用到延时,先上代码
while (true)
            {
                led0.Write(!led0.Read());
                Thread.Sleep(500);
            }
led0.Write就是直接写PB5的电平,led0.Read()是读现在PB5电平状态,连接起来就是翻转PB5的电平,达成led0的闪烁。  Thread.Sleep(500)自然就是延时函数,这里MF只提供了以ms为单位的延时(很多人就会想,如果操作GPIO需要us级的延时话,怎么办,这里MF是无能为力,目前的解决方法是在底层来操作,然后给上面接口来直接使用,其实这里也是移植最大的难度,我也还没有开始折腾,能力还有限啊)。VS也会指示 Thread.Sleep有错误,跟前面一样,在代码开头加using System.Threading;。然后调试,就可以看到led0按1HZ的频率闪烁起来了,So easy!
    再看初始化,PB5为(Cpu.Pin)21,这也太难记,有什么方法把它改成PB5这种,C#这么高级语言,自然是没什么问题,像用C的宏定义一样来做就要可以了。这里我也写了一个类文件 :
amespace MFPins
{
    public class CPU
    {
        public static class Pins
        {
            public const Cpu.Pin PA0 = (Cpu.Pin)0;
            public const Cpu.Pin PA1 = (Cpu.Pin)1;
            public const Cpu.Pin PA2 = (Cpu.Pin)2;
            public const Cpu.Pin PA3 = (Cpu.Pin)3;
            public const Cpu.Pin PA4 = (Cpu.Pin)4;
            public const Cpu.Pin PA5 = (Cpu.Pin)5;
            public const Cpu.Pin PA6 = (Cpu.Pin)6;
            public const Cpu.Pin PA7 = (Cpu.Pin)7;
            public const Cpu.Pin PA8 = (Cpu.Pin)8;
            public const Cpu.Pin PA9 = (Cpu.Pin)9;
            public const Cpu.Pin PA10 = (Cpu.Pin)10;
            public const Cpu.Pin PA11 = (Cpu.Pin)11;
            public const Cpu.Pin PA12 = (Cpu.Pin)12;
            public const Cpu.Pin PA13 = (Cpu.Pin)13;
            public const Cpu.Pin PA14 = (Cpu.Pin)14;
            public const Cpu.Pin PA15 = (Cpu.Pin)15;
            public const Cpu.Pin PB0 = (Cpu.Pin)16;
            public const Cpu.Pin PB1 = (Cpu.Pin)17;
            public const Cpu.Pin PB2 = (Cpu.Pin)18;
            public const Cpu.Pin PB3 = (Cpu.Pin)19;
            public const Cpu.Pin PB4 = (Cpu.Pin)20;
            public const Cpu.Pin PB5 = (Cpu.Pin)21;
            public const Cpu.Pin PB6 = (Cpu.Pin)22;
            public const Cpu.Pin PB7 = (Cpu.Pin)23;
只贴这么多,剩下的自行补齐就可以了。那么初始化就变 OutputPort led0 = new OutputPort(MFPins.CPU.Pins.PB5, false);这样就明朗多了。然后把led1也加进去,就可以做流水灯了,这里直接贴代码整个代码:

using System;
using Microsoft.SPOT;
using Microsoft.SPOT.Hardware;
using System.Threading;
using MFPins;
namespace LED
{
    public class Program
    {
        public static void Main()
        {
            OutputPort led0 = new OutputPort(MFPins.CPU.Pins.PB5, true);
            OutputPort led1 = new OutputPort(MFPins.CPU.Pins.PE5, true);
            while (true)
            {
                led0.Write(!led0.Read());
                Thread.Sleep(500);
                led1.Write(!led1.Read());
            }
        }

    }
}
按F5调试,看到led0跟led1红绿交替闪烁,心情真是太愉悦了。哈哈!后面附上整个工程,还有固件也有更新,我在写led1的时候,发现led1没闪烁,最后是找到固件那边GPIOE没有初始化(led1用到PE5,固件只初始化了A、B、C三个端口)。

TinyCLR.bin

243.79 KB, 下载次数: 84

LED.zip

42.96 KB, 下载次数: 93

已经放下多年的FPGA,要重新再拾起来,却是如此的陌生
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14980
金钱
14980
注册时间
2013-11-13
在线时间
1823 小时
发表于 2014-10-15 18:22:45 | 显示全部楼层
开往春天的手扶拖拉机
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-10-15 22:59:30 | 显示全部楼层
不错,谢谢分享。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-30 06:32

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表