2012年4月8日日曜日

STBeeでUSART

やっと!STBeeで1バイト送信ができるようになった
なんで動かなかったかというと
USART_Cmd(USART1, ENABLE);を忘れていた
というか知らなかった という…
ってことで GPIOを初期設定後にASCII'A'を送信しつつLチカするコード↓
開発環境はストリナに書いてある方法です
アレ楽でいいね!!

#include "stm32f10x_conf.h"
#include <stdio.h>

#define GPDON(PIN) { GPIOD -> BSRR = _BV(PIN); }
#define GPDOF(PIN) { GPIOD -> BRR  = _BV(PIN); }
#define GPDSET(PIN, bit) { if(bit){ GPDON(PIN); }else{ GPDOF(PIN); } }


void Delay(volatile unsigned long delay)
{ while(delay) delay--; }

int main(void) {
    int flag;
    GPIO_InitTypeDef GPIO_InitStructure;
    USART_InitTypeDef USART_InitStructure;
                  
    // システムを初期化します(外部水晶をONにし72MHz動作に切り替えます)
    SystemInit();
                  
    // GPIO Dポートのクロックを有効にします
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE);
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);

    // PD.4ポートを出力にします。PD.4=LED Lowで点灯
    GPIO_InitStructure.GPIO_Pin = _BV(4);
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOD, &GPIO_InitStructure); // 初期化関数を読み出します。

    // PA.9 Output
    GPIO_InitStructure.GPIO_Pin = _BV(9);
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
    GPIO_Init(GPIOA, &GPIO_InitStructure);
                  
    // PA.0ポートを入力に
    GPIO_InitStructure.GPIO_Pin = _BV(0);
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
    GPIO_Init(GPIOA, &GPIO_InitStructure);
   
    // USART init
    USART_InitStructure.USART_BaudRate = 9600;
    USART_InitStructure.USART_WordLength = USART_WordLength_8b;
    USART_InitStructure.USART_StopBits = USART_StopBits_1;
    USART_InitStructure.USART_Parity = USART_Parity_No;
    USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
    USART_InitStructure.USART_Mode = USART_Mode_Tx; /* | USART_Mode_Rx */ // ←受信機能を有効にするにはコメントアウトを解除

    USART_Init(USART1, &USART_InitStructure);
    USART_Cmd(USART1, ENABLE);
   
    for ( ; ; ) {
        USART_SendData(USART1, 'A');
        flag = !flag;
        GPDSET(4, flag);
        Delay(GPIO_ReadInputDataBit(GPIOA, 1) ? 2000000 : 1000000);
    }
}

なんか
Visual Studio→Word→Bloggerオンラインエディタ
で張り付けると
文字の色が保持されるかわりに タブが恐ろしいことになるんだよね
なんでだろう?
'\t'の扱いがVCでは半角スペース4文字だけどBloggerエディタだと違う とかかな?
追々直しますヾ(゚Д゚ )ォィォィ
↑修正しました 一部アレだけど まぁ 我慢してください

で、なぜprintfが使えないか
個人的に 正解率1割以下の勘を信じると
おそらくstdoutが無いんじゃないかと
だって シリアル出力だけで5系統あるわけじゃないですか(多分
んで それ以外にも ユーザーが作った出力があるかもしれない
となると stdoutを決めておくより
あとで定義したほうが自由度が高い
ってことじゃないかと

まぁエラーメッセージ的にはまったく違う理由っぽいですが

とりあえず そんな感じです

うー めんどくさいなぁ OS使いたいなぁ(((

1 件のコメント:

  1. すごい!!
    参考にさせていただきました!!
    ありがとうございますm(_ _)m

    返信削除