STM32Duino AD C не дает выборочных данных - PullRequest
0 голосов
/ 14 апреля 2020

Я пробую оригинальный проект O-Scope (PigOScope) без сенсорного экрана на основе платы Bluepill STM32F103C8T6, но у меня возникли некоторые проблемы:

Я использовал новейшие rogerclarkmelbourne / Arduino_STM32 Ядро и скачанный

pingumacpenguin / STM32-O-Scope эскиз. Я скомпилировал и загрузил его на устройство через UART с адреса 0x08000000. Затем я запустил устройство. Сетка и координатные линии отображались на экране. Также на экране были отображены надписи ниже 0,0 мкСм / Образец и т. Д. c ... Но любой шум или импульсный сигнал от PB1 на моем датчике. Почему график не нарисован? Также я попытался записать свои шаги в Usart в функции кода активации DMA:

  void takeSamples()
  {
    // This loop uses dual interleaved mode to get the best performance out of 
    the ADCs
    Serial.println("Init DMA");
    dma_init(DMA1);
    dma_attach_interrupt(DMA1, DMA_CH1, DMA1_CH1_Event);
    Serial.println("Enable DMA for ADC");
    adc_dma_enable(ADC1);
    dma_setup_transfer(DMA1, DMA_CH1, &ADC1->regs->DR, DMA_SIZE_32BITS,
                  dataPoints32, DMA_SIZE_32BITS, (DMA_MINC_MODE |      
    DMA_TRNS_CMPLT));// Receive buffer  
    Serial.println("Set DMA transfer");
    Serial.println(maxSamples / 2);
    dma_set_num_transfers(DMA1, DMA_CH1, maxSamples / 2);
    dma1_ch1_Active = 1;
    Serial.println("Enable the channel and start the transfer");
    dma_enable(DMA1, DMA_CH1); // Enable the channel and start the transfer.
    samplingTime = micros();
    Serial.println(samplingTime);
    while (dma1_ch1_Active); // SOME BUG OR WHAT.... PROGRAM STOP HERE!!!
    samplingTime = (micros() - samplingTime);
    Serial.println("Disable DMA");
    dma_disable(DMA1, DMA_CH1); //End of trasfer, disable DMA and Continuous 
   mode.
  }

Обработчик событий для прерывания остановки

  static void DMA1_CH1_Event()
  {
    dma1_ch1_Active = 0;
  }

Флаг энергозависимости для остановки процедуры

    volatile static bool dma1_ch1_Active = 0;

Программа продолжает работать, пока l oop я думаю ... И программа не работает за пределами функции takeSamples ().

Почему программа не выходит из l oop?

...