28.07.2012

Prawda oczywista: CPU.Pin to nie nóżka procesora

Lamer to lamer. Pierwsza skucha. Chciałem wypróbować na szybko STM32F4Discovery, więc napisałem najprostszy program: mruganie zielonej led. Popatrzyłem do dokumentacji płytki: zielony led na porcie PD12 - nóżka 59 i wyszedł taki kot:

using System.Threading;
using Microsoft.SPOT.Hardware;

namespace Led1
{
    public class Program
    {
        public static void Main()
        {
            const Cpu.Pin ledPin = (Cpu.Pin) 59;
            const int delay = 1000;

            using (var ledPort = new OutputPort(ledPin, false))
            {
                while (true)
                {
                    ledPort.Write(true);
                    Thread.Sleep(delay);
                    ledPort.Write(false);
                    Thread.Sleep(delay);
                }
            }
        }
    }
}

Kompiluję, we właściwościach projektu ustawiam odpowiednią konfigurację.


Uruchamiam przez F5, w oknie wynikowym poleciały informacje o wysłaniu kodu do płytki, przeleciały informacje od debuggera, czekam, czekam, czekam i nic. Nie mruga! Nie działa! Dlaczego?

CPU.Pin to nie nóżka procesora. Pisząc programy na mikro-kontrolery trzeba operować na pinach GPIO. Piny GPIO są zgrupowane w porty. Akurat STM32F4 ma 5 portów (od 0 do 5) oznaczonych: A, B, C, D i E. Każdy port ma 16 pinów (od 0 do 15): PA0..PA15, PB0..PB15, PC0...PC15 itd. (dlatego tak oznaczone są szpilki złączy goldpin na płytce). Na tej podstawie możemy określić numery pinów:
  • PA0 =   0*16 + 0   = 0
  • PA1 =   0*16 + 1   = 1
  • PA2 =   0*16 + 2   = 2
  • ...
  • PA15 = 0*16 + 15 = 15
  • PB0 =   1*16 + 0   = 16
  • ...
  • PB15 = 1*16 + 15 = 31
  • PC0 =   2*16 + 0   = 32
  • ...
  • PC15 = 2*16 + 15 = 47
  • ...
  • ...
  • i ostatni
  • PE15 = 4*16 + 15 = 79
Dla zielonej diody (PD12) CPU.Pin będzie równy: 3*16 + 12 = 60. Po podstawieniu do kodu wszystko działa tak jak należy.
const Cpu.Pin ledPin = (Cpu.Pin) 60;

Kot dostępny na: https://kodfilemon.googlecode.com/svn/trunk/STM32F4Discovery_Demo/DemoLed1/ ( Checkout )

2 komentarze:

  1. Great post. I was checking constantly this blog and I
    am impressed! Very helpful info specially the
    last part :) I care for such info a lot. I was looking for this particular information for a very long time.
    Thank you and best of luck.

    OdpowiedzUsuń
  2. Magnificent web site. Lots of useful info here. I'm sending it
    to a few pals ans additionally sharing in delicious.
    And obviously, thank you on your effort!

    OdpowiedzUsuń