[STM32F4] DMA z pamieci do peryferia

Tu możesz pisać o swoich problemach z pisaniem programów w języku C/C++ dla STM.
Awatar użytkownika
RafPe
User
User
Posty: 177
Rejestracja: sobota 05 wrz 2015, 16:22

[STM32F4] DMA z pamieci do peryferia

Postautor: RafPe » niedziela 19 mar 2017, 21:35

Witam wszystkich,

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)
   {

   }
}


Awatar użytkownika
Antystatyczny
Geek
Geek
Posty: 1123
Rejestracja: czwartek 03 wrz 2015, 22:02

Re: [STM32F4] DMA z pamieci do peryferia

Postautor: Antystatyczny » niedziela 19 mar 2017, 21:37

W konfiguracji musisz włączyć opcję autoinkrementację adresu źródłowego. Tak na szybko nie widze tego u Ciebie w kodzie.
"The true sign of intelligence is not knowledge but imagination" Albert Einstein.

Awatar użytkownika
RafPe
User
User
Posty: 177
Rejestracja: sobota 05 wrz 2015, 16:22

Re: [STM32F4] DMA z pamieci do peryferia

Postautor: RafPe » niedziela 19 mar 2017, 22:02

@Antystatyczny: dokladnie miales racje - "patrzalem" w RM i jakos "mnie to umknelo" - wydawalo mi sie ze "magicznie" z domyslu to jest to wlaczone.

Zmodyfikowalem kod i zmniejszylem bufor o ostatni znak bo mnie smieciosa wysylal i teraz pieknie smiga ;)

Kod: Zaznacz cały

   DMA1_Stream6->NDTR = buffer_size-1;             // Number of data items to transfer

   DMA1_Stream6->CR = DMA_SxCR_CHSEL_2 |
                  DMA_SxCR_MINC    |
                  DMA_SxCR_DIR_0   ;         // Memory to peripherial


Dzieki!
Ostatnio zmieniony poniedziałek 20 mar 2017, 08:44 przez RafPe, łącznie zmieniany 1 raz.

Awatar użytkownika
mokrowski
User
User
Posty: 189
Rejestracja: czwartek 08 paź 2015, 20:50
Lokalizacja: Tam gdzie Centymetro

Re: [STM32F4] DMA z pamieci do peryferia

Postautor: mokrowski » niedziela 19 mar 2017, 23:11

Spokojnie.. nie jestem purystą językowym. Sam "zapodywuję" różne interesujące wyrażenia ale ujmuję je w znaki "". Proszę popraw "patrzałem" i "mnie to umknęło" i zapisuj to w cudzysłowie :-) Razi...
,,Myślenie nie jest łatwe, ale można się do niego przyzwyczaić" - Alan Alexander Milne: Kubuś Puchatek

Awatar użytkownika
RafPe
User
User
Posty: 177
Rejestracja: sobota 05 wrz 2015, 16:22

Re: [STM32F4] DMA z pamieci do peryferia

Postautor: RafPe » poniedziałek 20 mar 2017, 08:46

Rzeczywiscie - jak przeczytac z lepszym zrozumieniem to razi :O Z ciekawosci poszukalem w internecie i znalazlem

Patrzałem to forma wciąż poprawna, choć przestarzała


Hehehe - az czlowiek czuje sie z innej epoki :)


Wróć do „Programowanie STM w C/C++”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 2 gości