Я пробую оригинальный проект 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?