Przerabiam kolejne rozdzialy poradnika o STM32 i probuje swoich sil z DMA. Skonfigurowalem sobie prosty program , ktory powienen wyslac mi z pamieci do USART moje dane. Niestety wysyla mi tylko pierwszy znak x34 razy :/ Wiec na 100% gdzies mam blad w konfiguracji. Gdyby ktos moglby mi podpowiedziec byloby super
Kod: Zaznacz cały
int main(void)
{
rcc_init();
mco_init();
/* globale Variable */
char buffer[] = "Hello world, this is a DMA test!\n";
size_t buffer_size = sizeof(buffer);
DMA1_Stream6->PAR = (uint32_t)&USART2->DR; // Peripherial address
DMA1_Stream6->M0AR = (uint32_t)&buffer; // Memory address
DMA1_Stream6->NDTR = buffer_size; // Number of data items to transfer
DMA1_Stream6->CR = DMA_SxCR_CHSEL_2 | // Stream 6 - channel 4
DMA_SxCR_DIR_0 ; // Memory to peripherial
DMA1_Stream6->CR |= DMA_SxCR_EN;
GPIOA->MODER |= GPIO_MODER_MODER2_1 | // AF: PA2 => USART2_TX
GPIO_MODER_MODER3_1; // AF: PA3 => USART2_RX
GPIOA->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR2|
GPIO_OSPEEDER_OSPEEDR3;
GPIOA->AFR[0] |= ( 0b0111 << 8 ) | ( 0b0111 << 12); // PA2/PA3 => AF7
USART2->BRR = 42000000/230400;
USART2->CR1 = USART_CR1_UE | // Enable
// USART_CR1_RXNEIE | // RX Interrupt
USART_CR1_TE | // Transmitter enable
USART_CR1_RE; // Receiver enable
//NVIC_EnableIRQ(USART2_IRQn); // USART IRQ Enabled
USART2->CR3 |= USART_CR3_DMAT;
while(1)
{
}
}