私は組み込みシステムの初心者です。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
- 制御フロー = なし
どうすればこれを修正できますか?