3

私は組み込みシステムの初心者です。STM32F103C8 (つまり、Blue Pillボード) の UART2 にデータを書き込もうとしていますが、STM32F103C8 ボードのUART2に接続されているFTDIアダプターを使用して、コンピューターのポートの 1 つでデータを表示したいと考えています。しかし、私のコンソールでは、送信したいキャラクターの代わりにランダムな四角いブロックを受け取ります。

これがKeil IDEで書かれた私のコードです。

#include "stm32f10x.h"                  // Device header

void usart2_init(void);
void USART_write(int data);
void delayMs(int delay);

int main(void)
{
    usart2_init();
    while(1)
    {
       USART_write('A');
       delayMs(5000);
    }
}

void usart2_init(void)
{
       // Enable clock source for USART2
       RCC->APB1ENR |= 0x20000;           // 0b 0000 0000 0000 0010 0000 0000 0000 0000
       RCC->APB2ENR |= 0x4;
       GPIOA->CRL |= 0x900;               // Set PA2 as TX pin (AF)
       USART2->BRR  = 0x341;              // Setting Baudrate to 9600 @8 MHz.
       USART2->CR1 |= 0x00008;            // Enable TX only
       USART2->CR1 |= 0x02000;            // Enable USART module by setting bit 13 to 1 i
       USART->CR1 register
}

void USART_write(int data)
{
    // We need to wait until Tx buffer is empty for sending data.
    while(!(USART2->SR & 0x0080));        // 0x0080
    USART2->DR = (data & 0xFF);
}

void delayMs(int delay)
{
    int i;
    for( ; delay>0 ; delay--)
    {
        for(i=0; i<3195; i++)
        {
        }
    }
}

以下に、デバッグ中のスクリーンショットを添付しました。

スクリーンショットを見るにはここをクリックしてください

送信したい文字の代わりに、文字の代わりに不要な正方形のブロックが表示されます。この画像では、UART レジスタとその値も確認できます。ST-LINK2を使用してファームウェアをアップロードしています。

FTDI とTera Termを扱っているときに、情報が不足していたり​​、間違いを犯したりしていませんか? これは私の Tera Term 設定です:

  • ボーレート = 9600
  • データ = 8 ビット
  • パリティ = なし
  • ストップ ビット = 1
  • 制御フロー = なし

どうすればこれを修正できますか?

4

2 に答える 2