Пытаюсь запустить отладку по USART. Как ни считаю USART1->BRR а все никак не могу получить нормальную передачу. Принимается совсем не то, передается. Раньне как-то на stm32f207 такой проблемы небыло. Что не так? Спасибо.
Код
void USART1_Init (void)
{
unsigned int integerdivider, tmpreg, fractionaldivider;
RCC->APB2ENR |= (1u<<2);
/* Configure PA9 as alternate function push-pull */
GPIOA->CRH &= ~(1u<<6);
GPIOA->CRH |=(1u<<4)|(1u<<5)|(1u<<7);
/* Configure PA10 as input */
GPIOA->CRL &= ~((1u<<8)|(1u<<9)|(1u<<11));
GPIOA->CRL |=(1u<<10);
/* Determine the integer part */
integerdivider = ((0x19 * fclk) / (0x04 * (115200)));
tmpreg = (integerdivider / 0x64) << 0x04;
/* Determine the fractional part */
fractionaldivider = integerdivider - (0x64 * (tmpreg >> 0x04));
tmpreg |= ((((fractionaldivider * 0x10) + 0x32) / 0x64)) & ((uint8_t)0x0F);
/* Write to USART BRR */
// USARTx->BRR = (unsigned short)tmpreg;
RCC->APB2ENR |= (1u<<14);
USART1->BRR = (unsigned short)tmpreg;//313UL; //115200
USART1->CR1 |= (1UL<<2)|(1UL<<3)|(1UL<<13);
}
void BYTE_Transmit_USART1 (unsigned char data)
{
USART1->DR = data;
while (!(USART1->SR & (1UL << 6)));
USART1->SR &= ~(1UL << 6);
}
//это передача.
for(i=0; i<10; i++)
{
BYTE_Transmit_USART1(0xAA);
}
Живи днем так, чтобы ночью ты спал спокойно.