Поиск сообщества
Показаны результаты для тегов 'stm32vldiscovery'.
Найдено: 1 результат
-
Помогите пожалуйста! Моя схема внизу. На входе электретный микрофон. Звуковой сигнал усиливается, смещается на 1,65В , фильтрируется и подается на АЦП отладочной платы STM32VLDISCOVERY. Никак не могу получить синусоид после UART. Программа на COOCOX IDE #include "stm32f10x.h" char rx_buf[10], rx_length=0; uint32_t adc_res; uint8_t n = 0x00; unsigned char rx_data; unsigned char tx_data; uint16_t i; const int CC = 2048; unsigned int counter=0; unsigned short arr[2048]; int windowSize = 100; void AdcInit(void) { RCC->APB2ENR |= RCC_APB2ENR_IOPAEN; GPIOA->CRL &= ~GPIO_CRL_MODE1; GPIOA->CRL &= ~GPIO_CRL_CNF1; RCC->APB2ENR |= RCC_APB2ENR_ADC1EN; RCC->CFGR &= ~RCC_CFGR_ADCPRE; ADC1->CR1 = 0; ADC1->CR1 |= ADC_CR1_EOCIE; ADC1->SQR1 = 0; ADC1->SQR3 = 1; ADC1->SMPR2 |=ADC_SMPR2_SMP1; ADC1->CR2 = ADC_CR2_EXTSEL; //выбрать источником запуска разряд SWSTART ADC1->CR2 |= ADC_CR2_EXTTRIG; ADC1->CR2 |= ADC_CR2_ADON; ADC1->CR2 |= ADC_CR2_CONT; ADC1->CR2 |= ADC_CR2_CAL; //запуск калибровки while (!(ADC1->CR2 & ADC_CR2_CAL)){}; ADC1->CR2 |= ADC_CR2_SWSTART; NVIC_SetPriority(ADC1_IRQn, 2); NVIC_EnableIRQ(ADC1_IRQn); __enable_irq(); } void init_uart(void) { RCC->APB2ENR |= RCC_APB2ENR_IOPAEN; RCC->APB2ENR |= RCC_APB2ENR_AFIOEN; RCC->APB2ENR |= RCC_APB2ENR_USART1EN; GPIOA->CRH &=~(GPIO_CRH_MODE9|GPIO_CRH_CNF9); GPIOA->CRH |= (GPIO_CRH_MODE9_1|GPIO_CRH_CNF9_1); USART1->CR1 |= USART_CR1_UE; USART1->BRR = 0x0D0;//0x9C4; // 9600Бит/с USART1->CR1 |= USART_CR1_TE; // Включение передатчика USART1 USART1->CR1 |= USART_CR1_RE; // Включение приемника USART1 USART1->CR1 |= USART_CR1_RXNEIE; } void USART1_Send(char chr) { while (!(USART1->SR& USART_SR_TXE)); USART1->DR = chr; } void delay(uint32_t i) { volatile uint32_t j; for (j=0; j!= i * 1000; j++); } int main(void) { init_uart(); AdcInit(); smooth(); while(1) { send(); } } //adc interruption... unsigned short data_adc; void ADC1_IRQHandler(void) { data_adc = ADC1->DR; arr[counter++]= data_adc; if (counter > CC-2) { counter = CC-1; ADC1->CR2 &= ~ADC_CR2_ADON; } ADC1->SR |= ADC_SR_EOC; } void smooth(void) { int k; unsigned short sum = 0; unsigned short movingAverage = 0; if (counter > CC-2) { for ( k = 0; k<= (CC-windowSize);k++) { int g; sum = 0; for (g = k; g < k+windowSize; g++) { sum += arr[g]; } movingAverage = sum/windowSize; arr[k] = movingAverage; } } } void send(void){ if (counter > CC-2) { for (i = 0; i < CC-windowSize; i++) // for (i = 0; i < CC; i++) { USART1_Send((char)((arr) & 0xFF)); USART1_Send((char)((arr >> 8) & 0x0F)) ; } counter = 0; ADC1->CR2 |= ADC_CR2_ADON; ADC1->CR2 |= ADC_CR2_SWSTART; } Программа для построения данных с UART //--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include "Unit2.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma link "CommPort" #pragma resource "*.dfm" TForm2 *Form2; //--------------------------------------------------------------------------- __fastcall TForm2::TForm2(TComponent* Owner) : TForm(Owner) { CommPort1->Open = true; but_stop = 0; } //--------------------------------------------------------------------------- unsigned short data; int count_data = 0; void __fastcall TForm2::CommPort1DataReceived(TObject *Sender, DWORD Count) { if (Count == 0) { return; } static int status = 0; unsigned char temp; DWORD count_temp = 0; while (count_temp++ < Count) { temp = CommPort1->GetChar(); switch(status) { case 0x00 : data = temp; status = 0x01; break; case 0x01 : data |= temp >> 8; status = 0x00; if (!but_stop) { Chart1->Series[0]->AddXY(count_data++, data); } break; } // else { // data = temp; // } } } //--------------------------------------------------------------------------- void __fastcall TForm2::Button1Click(TObject *Sender) { but_stop = ~but_stop; } //--------------------------------------------------------------------------- void __fastcall TForm2::Button2Click(TObject *Sender) { Chart1->Series[0]->Clear(); } //---------------------------------------------------------------------------