Je suis débutant en systèmes embarqués. J'essaie d'écrire des données sur le UART2 du STM32F103C8 (c'est-à-dire le Pilule bleue ) et je veux voir les données dans l'un des ports de mon ordinateur à l'aide d'une carte à puce. FTDI qui est connecté à UART2 de la carte STM32F103C8. Mais sur ma console, je recevoir un bloc carré aléatoire au lieu du caractère que je veux transmettre.
Voici mon code écrit en 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++)
{
}
}
}
J'ai joint ci-dessous la capture d'écran pendant le débogage.
Cliquez ici pour voir la capture d'écran .
Vous pouvez voir le bloc carré indésirable au lieu d'un caractère au lieu des caractères que je veux transmettre. Dans l'image, vous pouvez également voir les registres UART et leurs valeurs. J'utilise ST-LINK2 pour télécharger le micrologiciel.
Est-ce qu'il me manque des informations ou est-ce que je fais une erreur en traitant avec FTDI et Terme Tera ? Voici ma configuration Tera Term :
- Taux de bauds = 9600
- Données = 8 bits
- Parité = aucune
- Bit d'arrêt = 1
- Flux de contrôle = aucun
Comment puis-je réparer cela ?