1

同様の投稿があることは知っていました: C/C++ プログラムから LED を点滅させる手順は?

しかし今、私はアームベースの開発ボードに取り組んでおり、LED をオンまたはオフにするために使用できる 2 つのシリアル ポートがあるようです。

基本的な流れとしては、シリアルの1ピンを「1」またはONにするとLEDが点灯し、「0」で消灯するという流れだと思います。

私が参照できるC言語の参照コードはありますか?

4

5 に答える 5

4

一般的に、ボードには、組み込みのI / Oを制御できるボードサポートパッケージ(BSP)が付属している必要があります。ハードウェアフロー制御信号を本当に使用したい場合は、シリアルライブラリを探してください。

ボード上でGPIO(汎用I / O、またはデジタルI / O)を探すことをお勧めします。これにより、通常、入力または出力として構成できます。デジタルI/Oラインとアースピンの間の電流制限抵抗を介してLEDを接続できるはずです。LEDを逆向きに接続すると、照明の代わりに電流が遮断されるため、LEDの向きが正しいことを確認してください。そしていつものように、接続する前に必ずデジタル電圧計でチェックしてください。

デジタルI/O用のBSPがない場合でも、構成は通常非常に簡単です。レジスタにビットを設定して有効にし、別のレジスタにビットを設定して入力または出力を選択します。これらは通常、8ビットの「ポート」に配置されます。一部のシステムでは個別のI/Oピンを構成できますが、他のシステムでは入力または出力用にポート全体を構成することしかできません。次に、書き込み/出力レジスタの制御するビットに1または0を書き込むだけです。

ARMチップには通常、かなりの量の周辺機器が組み込まれているため、ほとんどのボードはI / Oをボード上の物理コネクタに接続するだけであり、レジスタメモリマップを見つけるためにチップベンダーのドキュメントを読む必要がある場合があります。より優れたボードベンダーは、ドキュメント、ライブラリ(BSP)、および例を提供します。Luminary Microは、イーサネットMACとPHYが組み込まれたチップを提供し、コネクタとマグネティックスを追加するだけで、1チップのWebサーバーを利用できます。

于 2009-07-19T04:36:07.490 に答える
2

これは、使用している特定のアームベースの開発ボードの仕様に大きく依存します。

そのボードに固有のドキュメントを見つける必要があります。

于 2009-07-19T03:21:00.403 に答える
0

私は以前、この種のプログラミングを行っていました。

シリアル ポート接続を調べる必要があり ます http://www.lammertbies.nl/comm/cable/RS-232.html http://www.beyondlogic.org/serial/serial.htm

出力に +5v、-5v がありますが、今ははっきりとは思い出せません。すべてのピンが必要なわけではありません。

以前は ARM を使用したことがありませんが、プログラムには 8 ビットの PIC コントローラーを使用しています。オンラインで多くの例を見つけることができると思います。

于 2009-08-13T02:37:48.437 に答える
0

GPIO を制御するための推奨される代替手段は、BSP を使用することです。この BSP (ボード サポート パッケージ) は、すべての周辺機器を適切なデフォルトに設定し、関数を呼び出せるようにするためのすべての作業を行います。選択した BSP には、1 バイトを 8 ビット GPIO ポートに書き込む機能がある可能性があります。あなたのLEDには1ビットしかありません。この場合、C コードは次のようになります (少なくとも、Luminary Micro キットではこのように動作します)。(コード例。特にキットでコンパイルするには、少し余分な作業が必要です)。

/* each LED is addressed by an address (byte) and a bit-within-this-byte */
struct {
   address,  // address of IO register for LED port
   bit       // bit of LED
} LEDConfigPair;

struct LEDConfigPair LEDConfig[NUMBER_OF_LEDS] = {
    {GPIO_PORTB_BASE,0},    // LED_0 is at port B0 
    {GPIO_PORTB_BASE,1}     // LED_1 is at port B1
} ;



 /* function LED_init configures the GPIOs where LEDs are connected as output */
 led_init(void)
 {  
     U32 i;
     for(i=0;i<NUMBER_OF_LEDS;i++)
     {
        GPIODirModeSet( LEDConfig[i][0], LEDConfig[i][1], GPIO_DIR_MODE_OUT );
     }
 }


/* my LED function 
     set_led_state makes use of the BSP of Luminary Micro to access a GPIO function

   Implementation: this BSP requires setting 8 port wide IO, so the function will calculate a mask (

*/
set_led_state(U8 led,bool state)
{
    U8 andmask;
    U8 setmask;

    andmask = ~(1 << LEDConfig[led].bit);// a bitmask with all 1's except bit of LED

    if (true == state)
    {
       setmask = (1 << LEDConfig[led].bit); // set bit for LED
    } else
    {
       setmask = 0;
    }
    GPIOPinWrite(LEDConfig[led].address, andmask, setmask);
 }

もちろん、これはすべて綴られています。次のように 1 行で実行できます。

#DEFINE SETLEDSTATE(led,state) GPIOPinWrite(LEDConfig[led].address, ~(1<<LEDConfig[led].bit),(state<<LEDConfig[led].bit))

これは同じことを行いますが、ビットマスクを夢見ることができ、実際のプログラムをデバッグするためにいくつかの LED のみを切り替えたい場合にのみ意味があります...

代替案: ベアメタル。この場合、すべてを自分で設定する必要があります。組み込みシステムの場合、ピンの多重化と電源管理に注意する必要があります (メモリ コントローラーと CPU クロックが既にセットアップされていると仮定します)。

  • 初期化: 制御したい機能が実際にパッケージにマップされるように、ピンの多重化を設定します。
  • ペリフェラルの初期化 (この場合、同じピンの UART または GPIO 機能のいずれか)
于 2009-08-13T03:27:44.840 に答える
0

シリアル ポートの Rx または Tx ピンを使用して行うことはできません。そのためには、シリアル ポートの RTS または CTS ピンを制御するだけです。「VC++コードでCOMポートにアクセスする」をグーグルで検索し、RTSおよびCTSステータスピンを制御して、外部デバイスのオンとオフを切り替えます。

于 2012-11-05T13:26:04.470 に答える