вот моя настройка УСАРТ:
CODE
uint32_t config_usart3(void)
{
//=============================================================================
// USART3 Related configuration
//=============================================================================
// enable clock
RCC->APB1ENR |= RCC_APB1ENR_USART3EN;
// 1) Setting UE, amd M bits
USART3-> CR1 |= 0x2000; // UE = 1
// 2) Programming number of stop bits if needed
// 3) Enable DMA if needed
// 4) set the Baud Rate
// BAUD = fck / ( 8 * (2 - OVER8) * USARTDIV )
// fck = 42MHz,
// OVER8 = 0
// Choose BAUD = 115200
// then: USARTDIV = fck / ( 8 * (2 -OVER8) * BAUD = 22.75
// BRR = (22 << 4) | ( 0.75 * 16) = 364,
// or: BRR = fck / BAUD = 42MHz / 115200 = 364
USART3->BRR = 364;
// enable transmitter
USART3->CR1 |= USART_CR1_TE;
// enable receiver
USART3->CR1 |= USART_CR1_RE;
return 0;
}
а вот собственно код отсылки:
CODE
uint8_t mem_read_gyro(USART_TypeDef *USART_ID )
{
int i=0; // loop var
//send read buffer to USART
for(i=0;i<=17281024;i++)
{
// check if TXE bit is set
while((!(USART_ID->SR & USART_SR_TXE)) );
USART_ID->DR = 0x5d;//mem_gyro_buf[i]; // sending a byte
// check if TC bit is set
while((!(USART_ID->SR & USART_SR_TC)) );
}
return 0;
}
как видите проверяю TC и TXE, цикл ожидания бесконечный, так что если с битами была бы проблема код застрял бы на цикле. Но в моем случае вся функция исполняыется в коде успешно, но когда проверяю на компе то программа регистрирует меньшее количество байт например: 15 547 966(столько же байт и вижу в бинарном файле), а должно 17 281 024 байт.
причем интерестно то, что
количество полученных байт постоянно разное, но всегда меньше чем 17 281 024 байт.
в чем тут еще может быть проблема? вот настройки терминала:
Baud:115200
DataSize: 8
parity: none
Handshake: off
mode: freeчто тут еще может быть нетак?
Сообщение отредактировал IgorKossak - May 26 2013, 18:27
Причина редактирования: [codebox] для длинного кода, [code] - для короткого!!!