Tengo el siguiente código:
#include "stm32l1xx.h"
#include "..\Library_SDM.h"
#include "..\Utiles_SDM.h"
int main(void){
unsigned char value = 'A';
Init_SDM();
Init_LCD();
// User button as Digital Input
GPIOA->MODER &= ~(1 << (0*2 +1));
GPIOA->MODER &= ~(1 << (0*2));
// No pull up-pull down (default)
GPIOA->PUPDR &= ~(11 << (0*2));
// Blue LED digital output
GPIOB->MODER |= (0x01 << (2*6+1));
GPIOB->MODER &= ~(0x01 << (2*6));
// Blue LED as USART
GPIOB->AFR[0] &= 0xF0FFFFFF;
GPIOB->AFR[0] |= 0x07000000;
// USART configuration
USART1->CR1 = 0x00000008; // Oversampling by 16, 8-bit word, Parity control disabled, Transmission enabled
USART1->CR2 = 0x00000000; // 1 stop bit
USART1->BRR = 0x00000D05; // BRR= fck/(16*USARTDIV)=(32*10^6)/(9600)=0xD05
USART1->CR1 |= 0x01 << 13; // USART enable
LCD_Texto((unsigned char*)"PRESS");
while(1){
if ((GPIOA->IDR&0x00000001)!=0) {
while ((GPIOA->IDR&0x00000001)!=0){
wait(70000);
}
while ((USART1->SR & 0x0080)== 0); // While with no body (to wait
// for the transmission buffer to be ready)
USART1->DR = value;
value++;
}
} //End of infinite while
}
Cuando presiona el botón provisto en el tablero de descubrimiento, la letra A se muestra en el terminal de la computadora (usando Tera Term) y si se presiona nuevamente se muestra la letra B y así sucesivamente. El dispositivo se programa utilizando una configuración de 9600 bps con una frecuencia de 32MHz.
Si cambio el valor BRR
para que sea 8AE
en lugar de D05
, la comunicación será 14400 bps, que es lo que quiero, pero el programa no funciona como se esperaba (el programa tiene que hacer exactamente lo que se dice más arriba, pero en lugar de tener una tasa de 9600 bps, a 14400 bps). No sé por qué no funciona a 14400 bps, ya que supongo que es la rapidez con la que viaja la información, ¿o me sale algo mal?