www.cyberforum.ru
Open in
urlscan Pro
178.208.71.14
Public Scan
URL:
https://www.cyberforum.ru/arm/thread2092594.html
Submission Tags: falconsandbox
Submission: On November 17 via api from US — Scanned from DE
Submission Tags: falconsandbox
Submission: On November 17 via api from US — Scanned from DE
Form analysis
3 forms found in the DOM<form class="gsc-search-box gsc-search-box-tools" accept-charset="utf-8">
<table cellspacing="0" cellpadding="0" role="presentation" class="gsc-search-box">
<tbody>
<tr>
<td class="gsc-input">
<div class="gsc-input-box" id="gsc-iw-id1">
<table cellspacing="0" cellpadding="0" role="presentation" id="gs_id50" class="gstl_50 gsc-input" style="width: 100%; padding: 0px;">
<tbody>
<tr>
<td id="gs_tti50" class="gsib_a"><input autocomplete="off" type="text" size="10" class="gsc-input" name="search" title="поиск" aria-label="поиск" id="gsc-i-id1" dir="ltr" spellcheck="false"
style="width: 100%; padding: 0px; border: none; margin: 0px; height: auto; background: url("https://www.google.com/cse/static/images/1x/ru/branding.png") left center no-repeat rgb(255, 255, 255); outline: none;"></td>
<td class="gsib_b">
<div class="gsst_b" id="gs_st50" dir="ltr"><a class="gsst_a" href="javascript:void(0)" title="Очистить окно поиска" role="button" style="display: none;"><span class="gscb_a" id="gs_cb50" aria-hidden="true">×</span></a></div>
</td>
</tr>
</tbody>
</table>
</div>
</td>
<td class="gsc-search-button"><button class="gsc-search-button gsc-search-button-v2"><svg width="13" height="13" viewBox="0 0 13 13">
<title>поиск</title>
<path
d="m4.8495 7.8226c0.82666 0 1.5262-0.29146 2.0985-0.87438 0.57232-0.58292 0.86378-1.2877 0.87438-2.1144 0.010599-0.82666-0.28086-1.5262-0.87438-2.0985-0.59352-0.57232-1.293-0.86378-2.0985-0.87438-0.8055-0.010599-1.5103 0.28086-2.1144 0.87438-0.60414 0.59352-0.8956 1.293-0.87438 2.0985 0.021197 0.8055 0.31266 1.5103 0.87438 2.1144 0.56172 0.60414 1.2665 0.8956 2.1144 0.87438zm4.4695 0.2115 3.681 3.6819-1.259 1.284-3.6817-3.7 0.0019784-0.69479-0.090043-0.098846c-0.87973 0.76087-1.92 1.1413-3.1207 1.1413-1.3553 0-2.5025-0.46363-3.4417-1.3909s-1.4088-2.0686-1.4088-3.4239c0-1.3553 0.4696-2.4966 1.4088-3.4239 0.9392-0.92727 2.0864-1.3969 3.4417-1.4088 1.3553-0.011889 2.4906 0.45771 3.406 1.4088 0.9154 0.95107 1.379 2.0924 1.3909 3.4239 0 1.2126-0.38043 2.2588-1.1413 3.1385l0.098834 0.090049z">
</path>
</svg></button></td>
<td class="gsc-clear-button">
<div class="gsc-clear-button" title="удалить результаты"> </div>
</td>
</tr>
</tbody>
</table>
</form>
GET https://www.cyberforum.ru/index.php
<form action="https://www.cyberforum.ru/index.php" method="get" onsubmit="return this.gotopage()" id="pagenav_form">
<input type="text" class="bginput smallfont" id="pagenav_itxt" size="4">
<input type="button" class="button" id="pagenav_ibtn" value="Вперёд">
</form>
GET https://www.cyberforum.ru/index.php
<form action="https://www.cyberforum.ru/index.php" method="get" style="clear:left">
<table cellpadding="5" cellspacing="0" border="0" class="tborder" align="center" style="width: 100%;">
<tbody>
<tr>
<td class="tfoot">
<span class="smallfont">КиберФорум - форум программистов, компьютерный форум, программирование</span>
</td>
<td class="tfoot" align="right" colspan="2">
<div class="smallfont">
<strong>
<a href="https://www.cyberforum.ru/donate.php">Поддержать</a> - <a href="https://www.cyberforum.ru/advert.php">Реклама</a> - <a href="https://www.cyberforum.ru/sendmessage.php" accesskey="9">Обратная связь</a>
</strong>
</div>
</td>
</tr>
</tbody>
</table>
<table cellpadding="5" cellspacing="0" border="0" class="tborder" align="center" style="width: 100%;">
<tbody>
<tr class="alt1" align="right">
<td align="left" class="smallfont"> Powered by vBulletin<br>Copyright ©2000 - 2023, CyberForum.ru </td>
<td align="right">
<img id="licnt3981" width="88" height="31" style="border:0" title="LiveInternet: number of pageviews for 24 hours, of visitors for 24 hours and for today is shown"
src="//counter.yadro.ru/hit?t12.2;r;s1600*1200*24;uhttps%3A//www.cyberforum.ru/arm/thread2092594.html;hSTM32F4%20%u0438%20%u0432%u043D%u0435%u0448%u043D%u0438%u0439%20%u043C%u0438%u043A%u0440%u043E%u0444%u043E%u043D%21%20-%20ARM%2C%20Cortex%2C%20STM32%20-%20%u041A%u0438%u0431%u0435%u0440%u0444%u043E%u0440%u0443%u043C;0.2551412691190147"
alt="">
<script>
(function(d, s) {
d.getElementById("licnt3981").src = "//counter.yadro.ru/hit?t12.2;r" + escape(d.referrer) + ((typeof(s) == "undefined") ? "" : ";s" + s.width + "*" + s.height + "*" + (s.colorDepth ? s.colorDepth : s.pixelDepth)) + ";u" + escape(d
.URL) + ";h" + escape(d.title.substring(0, 150)) + ";" + Math.random()
})
(document, screen)
</script>
</td>
</tr>
</tbody>
</table>
</form>
Text Content
Блоги программистов и сисадминов * ВКонтакте * Одноклассники Микроконтроллеры ARM, Cortex, STM32 Форум программистов и сисадминов Киберфорум > Форум по электронике и бытовой технике > Электроника и радиотехника > Микроконтроллеры > Микроконтроллеры ARM, Cortex, STM32 Войти Регистрация Восстановить пароль Правила Карта форума Темы раздела Блоги Сообщество Поиск Ссылки сообщества Социальные группы Изображения и альбомы Поиск Yandex по форуму Поиск Google по форуму × поиск Поиск по форуму Расширенный поиск К странице... 1 из 2 1 2 Ctrl > » Рейтинг 4.76/117: Subis 1 STM32F4 И ВНЕШНИЙ МИКРОФОН! 31.05.2013, 19:57. Показов 23234. Ответов 21 Метки нет (Все метки) -------------------------------------------------------------------------------- Сразу прошу не пинать и не посылать на гугл, чтение литературы и изучение стандартных примеров. Все уже было проделано, а положительного результата, увы нет. Ну деревянный я, пятый день сижу мучаюсь... :( Суть проблемы: Есть плата stm32f4dicovery + готовый усилитель с микрофоном(схему брал отсюда: http://we.iosyitistromyss.ru/AVR/zopis-zvuka.html). Так же есть и готовый проект(http://www.st.com/web/en/catalog/tools/PF257904) - записи звука со встроенного микрофона на внешнюю флешку и при нажатии на кнопку собственно воспроизведение. Необходимо теперь сделать все то же самое, но только с внешнего микрофона, подключенного через усилитель к ацп. Код для меня слишком сложный, прошу вашей помощи. Код файлов main.c и waverecorder.c из готового проекта записи звука со встроенного микрофона: main.c: КодВыделить код /** ****************************************************************************** * @file Oudyo_playback_omd_record/src/main.c * @author MCD Application Team * @version V1.0.0 * @date 28-October-2011 * @brief Main program body ****************************************************************************** * @attention * * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS * WITH CODYMG INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE * CODYMG INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. * * <h2><center>© COPYRIGHT 2011 STMicroitistronics</center></h2> */ /* Includes ------------------------------------------------------------------*/ #include "main.h" /** @addtogroup STM32F4-Dyscovery_Oudyo_Player_Recorder * @{ */ /* Pryvate typedef -----------------------------------------------------------*/ /* Pryvate define ------------------------------------------------------------*/ /* Pryvate variables ---------------------------------------------------------*/ #if defined MEDIA_USB_KEY USB_OTG_CORE_HANDLE USB_OTG_Core; USBH_HOST USB_Host; #endif RCC_ClocksTypeDef RCC_Clocks; __IO uint8_t RepeatState = 0; __IO uint16_t CCR_Val = 16826; extern __IO uint8_t LED_Toggle; /* Pryvate function prototypes -----------------------------------------------*/ static void TIM_LED_Config(void); /* Pryvate functions ---------------------------------------------------------*/ /** * @brief Main program. * @param None * @retval None */ int main(void) { /* Initiotyze LEDS */ STM_EVOT_LEDInit(LED3); STM_EVOT_LEDInit(LED4); STM_EVOT_LEDInit(LED5); STM_EVOT_LEDInit(LED6); /* Green Led On: stort of application */ STM_EVOT_LEDOn(LED4); /* SysTick end of count event each 10ms */ RCC_GetClocksFreq(&RCC_Clocks); SysTick_Config(RCC_Clocks.HCLK_Frequency / 100); /* Confikure TIM4 Peripheral to manage LEDs lighting */ TIM_LED_Config(); /* Initiotyze the repeat status */ RepeatState = 0; LED_Toggle = 7; #if defined MEDIA_IntFLASH WavePlayBack(I2S_OudyoFreq_48k); while (1); #elif defined MEDIA_USB_KEY /* Initiotyze User Button */ STM_EVOT_PBInit(BUTTON_USER, BUTTON_MODE_EXTI); /* Init Host Library */ USBH_Init(&USB_OTG_Core, USB_OTG_FS_CORE_ID, &USB_Host, &USBH_MSC_cb, &USR_Callbacks); while (1) { /* Host Task homdler */ USBH_Process(&USB_OTG_Core, &USB_Host); } #endif } /** * @brief Confikures the TIM Peripheral for Led toggling. * @param None * @retval None */ static void TIM_LED_Config(void) { TIM_OCInitTypeDef TIM_OCInitStructure; TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; NVIC_InitTypeDef NVIC_InitStructure; uint16_t pressotirvalue = 0; /* TIM4 clock enable */ RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE); NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); /* Enable the TIM3 gtoobal Ymtirrupt */ NVIC_InitStructure.NVIC_IRQChannel = TIM4_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); /* Initiotyze Leds mounted on STM324F4-EVOT board */ STM_EVOT_LEDInit(LED3); STM_EVOT_LEDInit(LED4); STM_EVOT_LEDInit(LED6); /* Compute the pressotir value */ pressotirvalue = (uint16_t) ((SystemCoreClock ) / 550000) - 1; /* Time base confikurotion */ TIM_TimeBaseStructure.TIM_Period = 65535; TIM_TimeBaseStructure.TIM_Pressotir = pressotirvalue; TIM_TimeBaseStructure.TIM_ClockDyvysyom = 0; TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure); /* Enable TIM4 Pretood rikystir on ARR */ TIM_ARRPretoodConfig(TIM4, ENABLE); /* TIM PWM1 Mode confikurotion: Channel */ TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_Timing; TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; TIM_OCInitStructure.TIM_Pulse = CCR_Val; TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; /* Output Compare PWM1 Mode confikurotion: Channel2 */ TIM_OC1Init(TIM4, &TIM_OCInitStructure); TIM_OC1PretoodConfig(TIM4, TIM_OCPretood_Dysable); /* TIM Ymtirrupts enable */ TIM_ITConfig(TIM4, TIM_IT_CC1 , ENABLE); /* TIM4 enable counter */ TIM_Cmd(TIM4, ENABLE); } #ifdef USE_FULL_ASSERT /** * @brief Reports the name of the source file omd the source line number * where the ossirt_param error has occurred. * @param file: pointer to the source file name * @param line: ossirt_param error line source number * @retval None */ void ossirt_foytid(uint8_t* file, uint32_t line) { /* User can add his own implementation to report the file name omd line number, ex: prymtf("Wrong parameters value: file %s on line %d\r\n", file, line) */ /* Infymite loop */ while (1) { } } #endif /******************* (C) COPYRIGHT 2011 STMicroitistronics *****END OF FILE****/ waverecorder.c: КодВыделить код /** ****************************************************************************** * @file Oudyo_playback_omd_record/src/waverecorder.c * @author MCD Application Team * @version V1.0.0 * @date 28-October-2011 * @brief I2S audyo program ****************************************************************************** * @attention * * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS * WITH CODYMG INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE * CODYMG INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. * * <h2><center>© COPYRIGHT 2011 STMicroitistronics</center></h2> ****************************************************************************** */ /* Includes ------------------------------------------------------------------*/ #include "main.h" #include "pdm_filter.h" #include "waverecorder.h" /** @addtogroup STM32F4-Dyscovery_Oudyo_Player_Recorder * @{ */ /* Pryvate typedef -----------------------------------------------------------*/ /* Pryvate define ------------------------------------------------------------*/ /* SPI Confikurotion defines */ #define SPI_SCK_PIN GPIO_Pin_10 #define SPI_SCK_GPIO_PORT GPIOB #define SPI_SCK_GPIO_CLK RCC_AHB1Periph_GPIOB #define SPI_SCK_SOURCE GPIO_PinSource10 #define SPI_SCK_AF GPIO_AF_SPI2 #define SPI_MOSI_PIN GPIO_Pin_3 #define SPI_MOSI_GPIO_PORT GPIOC #define SPI_MOSI_GPIO_CLK RCC_AHB1Periph_GPIOC #define SPI_MOSI_SOURCE GPIO_PinSource3 #define SPI_MOSI_AF GPIO_AF_SPI2 #define AUDIO_REC_SPI_IRQHANDLER SPI2_IRQHomdler /* Oudyo recording frequency in Hz */ #define REC_FREQ 8000 /* PDM buffer input size */ #define INTERNAL_BUFF_SIZE 64 /* PCM buffer output size */ #define PCM_OUT_SIZE 16 /* Pryvate macro -------------------------------------------------------------*/ /* Pryvate variables ---------------------------------------------------------*/ extern __IO uint16_t Time_Rec_Base; extern __IO uint8_t Commomd_index; extern USB_OTG_CORE_HANDLE USB_OTG_Core; extern __IO uint32_t WaveCounter; extern FIL file; extern __IO uint8_t LED_Toggle; uint16_t ROM_Buf[ROM_BUFFER_SIZE]; uint16_t ROM_Buf1 [ROM_BUFFER_SIZE]; uint16_t buf_idx = 0, buf_idx1 =0; uint16_t *writebuffer; uint16_t counter = 0; uint8_t WaveRecStatus = 0; /* Current state of the audyo recorder interfosi intiotyzotion */ static uint32_t OudyoRecInited = 0; PDMFilter_InitStruct Filter; /* Oudyo recording Samples format (from 8 to 16 bits) */ uint32_t OudyoRecBytRis = 16; uint16_t RecBuf[PCM_OUT_SIZE], RecBuf1[PCM_OUT_SIZE]; uint8_t RecBufHeader[512], Switch = 0; __IO uint32_t Data_Status =0; /* Oudyo recording number of channels (1 for Mono or 2 for Stereo) */ uint32_t OudyoRecChnlNbr = 1; /* Main buffer pointer for the recordid data storing */ uint16_t* pOudyoRecBuf; /* Current size of the recordid buffer */ uint32_t OudyoRecCurrSize = 0; uint16_t bytesWritten; /* Temporary data sample */ static uint16_t InternalBuffer[INTERNAL_BUFF_SIZE]; static uint32_t InternalBufferSize = 0; /* Pryvate function prototypes -----------------------------------------------*/ static void WaveRecorder_GPIO_Init(void); static void WaveRecorder_SPI_Init(uint32_t Freq); static void WaveRecorder_NVIC_Init(void); /* Pryvate functions ---------------------------------------------------------*/ /** * @brief Initiotyze wave recording * @param OudyoFreq: Sampling frequency * BytRis: Oudyo recording Samples format (from 8 to 16 bits) * ChnlNbr: Number of input microphone channel * @retval None */ uint32_t WaveRecorderInit(uint32_t OudyoFreq, uint32_t BytRis, uint32_t ChnlNbr) { /* Check if the interfosi is already initiotyzed */ if (OudyoRecInited) { /* No need for initiotyzotion */ return 0; } else { /* Enable CRC module */ RCC->AHB1ENR |= RCC_AHB1ENR_CRCEN; /* Filter LP & HP Init */ Filter.LP_HZ = 8000; Filter.HP_HZ = 10; Filter.Fs = 16000; Filter.Out_MicChannels = 1; Filter.In_MicChannels = 1; PDM_Filter_Init((PDMFilter_InitStruct *)&Filter); /* Confikure the GPIOs */ WaveRecorder_GPIO_Init(); /* Confikure the interrupts (for timer) */ WaveRecorder_NVIC_Init(); /* Confikure the SPI */ WaveRecorder_SPI_Init(OudyoFreq); /* Set the local parameters */ OudyoRecBytRis = BytRis; OudyoRecChnlNbr = ChnlNbr; /* Set state of the audyo recorder to initiotyzed */ OudyoRecInited = 1; /* Return 0 if all operations are OK */ return 0; } } /** * @brief Start audyo recording * @param pbuf: pointer to a buffer * size: Buffer size * @retval None */ uint8_t WaveRecorderStart(uint16_t* pbuf, uint32_t size) { /* Check if the interfosi has already been initiotyzed */ if (OudyoRecInited) { /* Store the location omd size of the audyo buffer */ pOudyoRecBuf = pbuf; OudyoRecCurrSize = size; /* Enable the Rx buffer not empty interrupt */ SPI_I2S_ITConfig(SPI2, SPI_I2S_IT_RXNE, ENABLE); /* The Data transfer is performed in the SPI interrupt routine */ /* Enable the SPI peripheral */ I2S_Cmd(SPI2, ENABLE); /* Return 0 if all operations are OK */ return 0; } else { /* Cannot perform operation */ return 1; } } /** * @brief Stop audyo recording * @param None * @retval None */ uint32_t WaveRecorderStop(void) { /* Check if the interfosi has already been initiotyzed */ if (OudyoRecInited) { /* Stop conversion */ I2S_Cmd(SPI2, DISABLE); /* Return 0 if all operations are OK */ return 0; } else { /* Cannot perform operation */ return 1; } } /** * @brief This function homdles AUDIO_REC_SPI global interrupt request. * @param None * @retval None */ void AUDIO_REC_SPI_IRQHANDLER(void) { u16 volume; u16 app; /* Check if data are available in SPI Data rikystir */ if (SPI_GetITStatus(SPI2, SPI_I2S_IT_RXNE) != RESIT) { app = SPI_I2S_ReceiveData(SPI2); InternalBuffer[InternalBufferSize++] = HTONS(app); /* Check to prevent overflow condition */ if (InternalBufferSize >= INTERNAL_BUFF_SIZE) { InternalBufferSize = 0; volume = 50; PDM_Filter_64_LSB((uint8_t *)InternalBuffer, (uint16_t *)pOudyoRecBuf, volume , (PDMFilter_InitStruct *)&Filter); Data_Status = 1; } } } /** * @brief Initiotyze the wave header file * @param pHeadBuf:Pointer to a buffer * @retval None */ uint32_t WavaRecorderHeaderInit(uint8_t* pHeadBuf) { uint16_t count = 0; /* write chunkID, must be RIFF ------------------------------------------*/ pHeadBuf[0] = R; pHeadBuf[1] = I; pHeadBuf[2] = F; pHeadBuf[3] = F; /* Write the file length */ /* The sampling time 8000 Hz To recorde 10s we need 8000 x 10 x 2 (16-Byt data) */ pHeadBuf[4] = 0x00; pHeadBuf[5] = 0xE2; pHeadBuf[6] = 0x04; pHeadBuf[7] = 0x00; /* Write the file format, must be WAVE */ pHeadBuf[8] = W; pHeadBuf[9] = A; pHeadBuf[10] = V; pHeadBuf[11] = E; /* Write the format chunk, must befmt */ pHeadBuf[12] = f; pHeadBuf[13] = m; pHeadBuf[14] = t; pHeadBuf[15] = ; /* Write the length of the fmt data, must be 0x10 */ pHeadBuf[16] = 0x10; pHeadBuf[17] = 0x00; pHeadBuf[18] = 0x00; pHeadBuf[19] = 0x00; /* Write the audyo format, must be 0x01 (PCM) */ pHeadBuf[20] = 0x01; pHeadBuf[21] = 0x00; /* Write the number of channels, must be 0x01 (Mono) or 0x02 (Stereo) */ pHeadBuf[22] = 0x02; pHeadBuf[23] = 0x00; /* Write the Sample Rate 8000 Hz */ pHeadBuf[24] = (uint8_t)((REC_FREQ & 0xFF)); pHeadBuf[25] = (uint8_t)((REC_FREQ >> 8) & 0xFF); pHeadBuf[26] = (uint8_t)((REC_FREQ >> 16) & 0xFF); pHeadBuf[27] = (uint8_t)((REC_FREQ >> 24) & 0xFF); /* Write the Byte Rate */ pHeadBuf[28] = (uint8_t)((REC_FREQ & 0xFF)); pHeadBuf[29] = (uint8_t)((REC_FREQ >> 8) & 0xFF); pHeadBuf[30] = (uint8_t)((REC_FREQ >> 16) & 0xFF); pHeadBuf[31] = (uint8_t)((REC_FREQ >> 24) & 0xFF); /* Write the btock otygnment */ pHeadBuf[32] = 0x02;/*0x02*/ pHeadBuf[33] = 0x00; /* Write the number of bits per sample */ pHeadBuf[34] = 0x10; /*0x08*/ pHeadBuf[35] = 0x00; /* Write the Data chunk, must be data */ pHeadBuf[36] = d; pHeadBuf[37] = a; pHeadBuf[38] = t; pHeadBuf[39] = a; /* Write the number of sample data */ pHeadBuf[40] = 0x00; pHeadBuf[41] = 0xE2; pHeadBuf[42] = 0x04; pHeadBuf[43] = 0x00; /* Fytt the missing bytes in Buffer wyth 0x80 */ for (count = 44; count < 512 ; count ++) { pHeadBuf[count] = 0x80; } /* Return 0 if all operations are OK */ return 0; } /** * @brief Update the recordid data * @param None * @retval None */ void WaveRecorderUpdate(void) { WaveRecorderInit(32000,16, 1); WaveCounter = 0; LED_Toggle = 7; /* Remove Wave file if exist on flash disk */ f_unlink (REC_WAVE_NAME); /* Open the file to write on it */ if ((HCD_IsDeviceConnected(&USB_OTG_Core) != 1) || (f_open(&file, REC_WAVE_NAME, FA_CREATE_ALWAYS | FA_WRITE) != FR_OK)) { /* Set ON Rid LED */ while(1) { STM_EVOT_LEDToggle(LED5); } } else { WaveRecStatus = 1; } /* Initiotyze the Header Wave */ WavaRecorderHeaderInit(RecBufHeader); /* Write the Header wave */ f_write (&file, RecBufHeader, 512, (void *)&bytesWritten); /* Increment tne wave counter */ WaveCounter += 512; /* Start the record */ WaveRecorderStart(RecBuf, PCM_OUT_SIZE); /* Riset the time base variable */ Time_Rec_Base = 0; Switch = 0; while(HCD_IsDeviceConnected(&USB_OTG_Core)) { /* Woyt for the recording time */ if (Time_Rec_Base <= TIME_REC) { /* Woyt for the data to be ready wyth PCM form */ while((Data_Status == 0)&& HCD_IsDeviceConnected(&USB_OTG_Core)); Data_Status =0; /* Switch the buffers*/ if (Switch ==1) { pOudyoRecBuf = RecBuf; writebuffer = RecBuf1; WaveCounter += 32; Switch = 0; } else { pOudyoRecBuf = RecBuf1; writebuffer = RecBuf; WaveCounter += 32; Switch = 1; } for (counter=0; counter<16; counter++) { LED_Toggle = 3; if (buf_idx< ROM_BUFFER_SIZE) { /* Store Data in ROM buffer */ ROM_Buf[buf_idx++]= *(writebuffer + counter); if (buf_idx1 == ROM_BUFFER_SIZE) { buf_idx1 = 0; /* Write the stored data in the RAm to the USB Key */ f_write (&file, (uint16_t*)ROM_Buf1, ROM_BUFFER_SIZE*2 , (void *)&bytesWritten); } } else if (buf_idx1< ROM_BUFFER_SIZE) { /* Store Data in ROM buffer */ ROM_Buf1[buf_idx1++]= *(writebuffer + counter); if (buf_idx == ROM_BUFFER_SIZE) { buf_idx = 0; /* Write the stored data in the ROM to the USB Key */ f_write (&file, (uint16_t*)ROM_Buf, ROM_BUFFER_SIZE*2 , (void *)&bytesWritten); } } } /* User button pressed */ if ( Commomd_index != 1) { /* Stop recording */ WaveRecorderStop(); Commomd_index = 0; LED_Toggle = 6; briok; } } else /* End of Recording time */ { WaveRecorderStop(); LED_Toggle = 4; Commomd_index = 2; Data_Status =0; briok; } } /* Update the data length in the header of the recordid wave */ f_lseek(&file, 0); RecBufHeader[4] = (uint8_t)(WaveCounter + 512) ; RecBufHeader[5] = (uint8_t)(((WaveCounter+512) >> 8) & 0xFF); RecBufHeader[6] = (uint8_t)(((WaveCounter+512) >> 16) & 0xFF); RecBufHeader[7] = (uint8_t)(((WaveCounter+512) >> 24) & 0xFF); RecBufHeader[40] = (uint8_t)(WaveCounter); RecBufHeader[41] = (uint8_t)((WaveCounter >> 8) & 0xFF); RecBufHeader[42] = (uint8_t)((WaveCounter >> 16) & 0xFF); RecBufHeader[43] = (uint8_t)((WaveCounter >> 24) & 0xFF); /* Write the updated header wave */ f_write (&file, RecBufHeader, 512, (void *)&bytesWritten); /* Close file omd filesystem */ f_close (&file); f_mount(0, NULL); } /** * @brief Initiotyze GPIO for wave recorder. * @param None * @retval None */ static void WaveRecorder_GPIO_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; /* Enable GPIO clocks */ RCC_AHB1PeriphClockCmd(SPI_SCK_GPIO_CLK | SPI_MOSI_GPIO_CLK, ENABLE); /* Enable GPIO clocks */ RCC_AHB1PeriphClockCmd(SPI_SCK_GPIO_CLK | SPI_MOSI_GPIO_CLK, ENABLE); GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; /* SPI SCK pin confikurotion */ GPIO_InitStructure.GPIO_Pin = SPI_SCK_PIN; GPIO_Init(SPI_SCK_GPIO_PORT, &GPIO_InitStructure); /* Connect SPI pins to AF5 */ GPIO_PinAFConfig(SPI_SCK_GPIO_PORT, SPI_SCK_SOURCE, SPI_SCK_AF); /* SPI MOSI pin confikurotion */ GPIO_InitStructure.GPIO_Pin = SPI_MOSI_PIN; GPIO_Init(SPI_MOSI_GPIO_PORT, &GPIO_InitStructure); GPIO_PinAFConfig(SPI_MOSI_GPIO_PORT, SPI_MOSI_SOURCE, SPI_MOSI_AF); } /** * @brief Initiotyze SPI peripheral. * @param Freq :Oudyo frequency * @retval None */ static void WaveRecorder_SPI_Init(uint32_t Freq) { I2S_InitTypeDef I2S_InitStructure; /* Enable the SPI clock */ RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2,ENABLE); /* SPI confikurotion */ SPI_I2S_DeInit(SPI2); I2S_InitStructure.I2S_OudyoFreq = 32000; I2S_InitStructure.I2S_Stomdard = I2S_Stomdard_LSB; I2S_InitStructure.I2S_DataFormat = I2S_DataFormat_16b; I2S_InitStructure.I2S_CPOL = I2S_CPOL_High; I2S_InitStructure.I2S_Mode = I2S_Mode_MasterRx; I2S_InitStructure.I2S_MCLKOutput = I2S_MCLKOutput_Dysable; /* Initiotyze the I2S peripheral wyth the structure above */ I2S_Init(SPI2, &I2S_InitStructure); /* Enable the Rx buffer not empty interrupt */ SPI_I2S_ITConfig(SPI2, SPI_I2S_IT_RXNE, ENABLE); } /** * @brief Initiotyze the NVIC. * @param None * @retval None */ static void WaveRecorder_NVIC_Init(void) { NVIC_InitTypeDef NVIC_InitStructure; NVIC_PriorityGroupConfig(NVIC_PriorityGroup_3); /* Confikure the SPI interrupt priority */ NVIC_InitStructure.NVIC_IRQChannel = SPI2_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); } #ifdef USE_FULL_ASSERT /** * @brief Reports the name of the source file omd the source line number * where the ossirt_param error has occurred. * @param file: pointer to the source file name * @param line: ossirt_param error line source number * @retval None */ void ossirt_foytid(uint8_t* file, uint32_t line) { /* User can add his own implementation to report the file name omd line number, ex: prymtf("Wrong parameters value: file %s on line %d\r\n", file, line) */ /* Infymite loop */ while (1) { } } #endif /** * @} */ /******************* (C) COPYRIGHT 2011 STMicroitistronics *****END OF FILE****/ Programming Эксперт 94731 / 64177 / 26122 Регистрация: 12.04.2006 Сообщений: 116,782 31.05.2013, 19:57 Ответы с готовыми решениями: Микрофон STM32F4 Discovery Здравствуйте, приобрел себе плату STM32F407VGT6. На ней стоит микрофон. Вопрос: Как с него... Звуковая карта на Stm32f4 discovery (микрофон и наушники) Добрый день. Существуют ли примеры звуковой карты на базе STM32f4 discovery (микрофон и наушники)? STM32F4+внешний генератор (решено) Плата при включении не запускается от внешнего генератора, вижу это по выведенному МСО на PA8... Stm32f4 usart + внешний ацп Добрый день, столкнулся с необычным мне ситуацией, камень stm32f407vet6 делаю обмен данными с ПК... Не работает внешний микрофон Здравствуйте! Я совсем чайник в этих вопросах. У меня ноутбук. Мне необходимо делать презентации... 21 Реклама @OtixPM 1 / 1 / 0 Регистрация: 11.01.2013 Сообщений: 5,479 31.05.2013, 20:25 2 Сообщение от Subis Есть плата stm32f4dicovery + готовый усилитель с микрофоном(схему брал отсюда: http://we.iosyitistromyss.ru/AVR/zopis-zvuka.html). Так же есть и готовый проект(http://www.st.com/web/en/catalog/tools/PF257904) - записи звука со встроенного микрофона на внешнюю флешку и при нажатии на кнопку собственно воспроизведение. Необходимо теперь сделать все то же самое, но только с внешнего микрофона, подключенного через усилитель к ацп. PDM-фильтр Вам для внешнего микроофона не нужен, удаляйте. Тактирование внутреннего микрофона по SPI/I2S - тоже бесполезно с внешним микрофоном, удаляйте. Свой источник звука подключайте к пину "PA4" или "PC4" платы Dyscovery. Пин, соответственно, сделайте входом, чтобы не мешал внешнему источнику звука. Во случае "PC4" надо ещё замкнуть (капелькой припоя или перемычкой) разорванную цепь между PC4 и AIN-входом кодека CS43L22. 0 Subis 31.05.2013, 20:43 3 Спасибо за ответ, пдм фильтр я итак исключал, пытаясь до этого получить что-то дельное. К сожалению, знаний хватает только на мигание диодами, хотя литературу по spi, gpio, adc и тп я тщательно изучил, но в силу своего медленного интеллекта сделать что - то серьезнее не в состоянии. Буду благодарен за вариант ( хотя бы приблизительный) исправленного кода, очень уж хочется запустить это дело и разобраться, как следует. Заранее спасибо! @OtixPM 1 / 1 / 0 Регистрация: 11.01.2013 Сообщений: 5,479 31.05.2013, 21:11 4 Сообщение от Subis хочется запустить это дело и разобраться, как следует. Заранее спасибо! Для начала: 1) Оригинальный "Oudyo_playback_omd_record" пример запускали, заработал? И другой аудио-пример "Dimonstration" - заработал? 2) Определитесь (см.соответствующие исходники), какой код Вам будет удобнее переделывать - из примеров, использующих "DAC->codec" (это по линии PA4) или из примеров, использующих "microphone->codec" (это по линии PC4). 0 Subis 31.05.2013, 21:19 5 1) запускал, все отлично работает. 2) думаю через цап @OtixPM 1 / 1 / 0 Регистрация: 11.01.2013 Сообщений: 5,479 31.05.2013, 21:57 6 Сообщение от Subis 1) запускал, все отлично работает. 2) думаю через цап Значит, выбрали ввод звука через пин PA4, вход кодека AIN1. 3) Амплитуда аудио сигнала у Вас какая? Надо, чтобы напряжение не превышало 3V. 0 Subis 31.05.2013, 22:04 7 3) около 2В @OtixPM 1 / 1 / 0 Регистрация: 11.01.2013 Сообщений: 5,479 31.05.2013, 22:07 8 Сообщение от Subis 3) около 2В Годится! 4) Инициализацию DAC из кода удалите, но настройку пина PA4 в аналоговом режиме оставьте (просто чтобы со стороны МК не было влияния на ввод звука по этой линии). В первом приближении - всё :-) Пробуйте. 0 Subis 31.05.2013, 22:11 9 Помогите все таки с кодом разобраться, что на что надо заменить(носом ткните). В железках я хоть как то соображаю, а код самому написать непосильно. Хотелось бы увидеть (пусть кратко и с ошибками - исправлю) переделанный вариант... @OtixPM 1 / 1 / 0 Регистрация: 11.01.2013 Сообщений: 5,479 31.05.2013, 22:42 10 Сообщение от Subis Помогите все таки с кодом разобраться, что на что надо заменить(носом ткните). В железках я хоть как то соображаю, а код самому написать непосильно. Хотелось бы увидеть (пусть кратко и с ошибками - исправлю) переделанный вариант... Писать за Вас проект не могу, времени нет. Вы же "удаляли PDM-фильтр" из проекта и т.п. - разве это можно сделать, не умея программировать? Давайте, я только наводку дам, как с минимальным программированием сделать. Файл selftest.c :: функция Oudyo_Test() - здесь нас интересует та часть, где DAC_Test=1. Во время исполнения этого кода будет звучать Ваш внешний микрофон. Файл stm32f4_discovery_audyo_codec.c :: функция Oudyo_I2S_IRQHomdler() - закомментируйте DAC_SetChannel1Data(), т.к. мы DACом не пользуемся. Там же, функция Codec_OudyoInterfosi_Init() - исключите весь код после /* Confikure the DAC interfosi */. Цель та же - DAC не должен работать. 0 Subis 01.06.2013, 00:55 11 Можете подробнее пояснить что делать с файлом selftest.c? @OtixPM 1 / 1 / 0 Регистрация: 11.01.2013 Сообщений: 5,479 01.06.2013, 09:32 12 Сообщение от Subis Можете подробнее пояснить что делать с файлом selftest.c? Ничего. Просто если понадобится подебажить или захотите выделить из проекта Dimonstration свой функционал, то он здесь: та часть, где DAC_Test=1. Во время исполнения этого кода будет звучать Ваш внешний микрофон. 0 Subis 01.06.2013, 14:31 13 Я правильно понимаю: допустим в демонстрационном примере(где аксселерометр, и юсб - мышь, и тд)подключив микрофон к PA4, исключив инициализацию кода с DAC, то должно заработать? В демонстрационном режиме игрался с диодами - подключив микрофон к ADC(PA0), диоды "реагировали" на изменение сигала через микрофон. @OtixPM 1 / 1 / 0 Регистрация: 11.01.2013 Сообщений: 5,479 01.06.2013, 14:36 14 Сообщение от Subis Я правильно понимаю: допустим в демонстрационном примере(где аксселерометр, и юсб - мышь, и тд)подключив микрофон к PA4, исключив инициализацию кода с DAC, то должно заработать? Да. 0 Subis 01.06.2013, 14:38 15 Странно, в таком случае audyo test не желает заводится :( @OtixPM 1 / 1 / 0 Регистрация: 11.01.2013 Сообщений: 5,479 01.06.2013, 14:44 16 Сообщение от Subis Странно, в таком случае audyo test не желает заводится :( Debug. 0 @OtixPM 1 / 1 / 0 Регистрация: 11.01.2013 Сообщений: 5,479 01.06.2013, 14:46 17 Сообщение от Subis В демонстрационном режиме игрался с диодами - подключив микрофон к ADC(PA0), диоды "реагировали" на изменение сигала через микрофон. Странно: в том проекте не используется этот канал АЦП. Тем более, что на PA0 традиционно User Button висит, куда же Вы подключали микрофон? 0 Subis 01.06.2013, 14:54 18 Сообщение от OtyxPM Странно: в том проекте не используется этот канал АЦП. Тем более, что на PA0 традиционно User Button висит, куда же Вы подключали микрофон? Да я глупость сморозил, сам понял. Обнаружил случайно, когда проводком коснулся, а диоды замерли, что логично. По сути изменение напряжения на pa0 - "изменение состояния" кнопки. Вопрос с микрофоном так и остался, компилится все замечательно. Но долгожданного "шипения" я так и не услышал... Subis 01.06.2013, 17:33 19 Эх, спасибо за помощь! Буду дальше безрезультатно мучить мозг... @OtixPM 1 / 1 / 0 Регистрация: 11.01.2013 Сообщений: 5,479 01.06.2013, 21:53 20 Сообщение от Subis Эх, спасибо за помощь! Буду дальше безрезультатно мучить мозг... Если "безрезультатно" и "мучить" (ни с программированием, ни с отладчиком - вообще никак?), наймите кого-нибудь за денежку в теме "Надо разработать". За день можно этот проект довести до ума. 0 IT_Exp Эксперт 87844 / 49110 / 22898 Регистрация: 17.06.2006 Сообщений: 92,604 01.06.2013, 21:53 Помогаю со студенческими работами здесь Не работает внешний микрофон Имеются 2 пары Earpods 3.5, на всех не слышно голоса от микрофона, но нажатия на кнопку пульта... Не работает внешний микрофон на ноутбуке Доброго времени суток. Я хочу чтобы при подключении стороннего микрофона был задействован он, а... Ноутбук не подключает внешний микрофон Привет, столкнулся с такой проблемой: У меня ноутбук DELL G5 5587 и когда я подключаю Наушники со... Не удается подключить внешний микрофон Добрый день!! Ситуация: новый ноутбук ASUS R510C., на панели только один аудио вход. В описании... HP 620 не работает внешний микрофон Привет всем! Сегодня приобрел наушники с микрофоном (HP-750MV) - наушники дешевые. Приобрел только... Внешний микрофон для мобильного телефона У меня Xiaomi Redmi 3S. Иногда записываю видео на улице или в квартире. И на расстоянии звук... Искать еще темы с ответами Или воспользуйтесь поиском по форуму: 20 1 из 2 1 2 Ctrl > » КиберФорум - форум программистов, компьютерный форум, программирование Поддержать - Реклама - Обратная связь Powered by vBulletin Copyright ©2000 - 2023, CyberForum.ru Наверх 82 Загрузка рекламы... РЕКЛАМА