Перейти к содержанию

levshkatov

Members
  • Постов

    40
  • Зарегистрирован

  • Посещение

Информация

  • Город
    Tomsk

Электроника

  • Стаж в электронике
    1-2 года

Посетители профиля

906 просмотров профиля

Достижения levshkatov

Стажер

Стажер (3/14)

  • 10 постов на форуме
  • Неделя на форуме
  • Месяц на форуме
  • Год на форуме

Последние значки

0

Репутация

  1. Но они способны выдать точность порядка 3-4 метров? По горизонтали в смысле
  2. Модуль, наверное, поудобнее будет в использовании, поэтому предпочтительнее его. SiRF видел, на digikey дорогие модули конечно, баксов по 20 если в розницу. Но большое спасибо за помощь)
  3. Стало интересно поиграться с gps приемниками, стал гуглить какие-нибудь чипы и ничего толкового не смог найти. Знаю, что в основном их производят гиганты типа qualcomm, mtk. Ну либо есть совсем убогие китайские модули с али. В связи с этим вопрос: можно ли где-то достать качественный современный gps чип с нормальным даташитом и характеристиками? Желательно, конечно, наименее энергозатратный и наиболее точный (5 метров вполне достаточно). Интересует именно чип, а не готовые маячки. И еще вопрос по тем же qualcomm (или другие крупные компании, типа sony, lg), может кто-то знает как у них можно заказать что-либо (тестовую партия 3-5 штук, малый опт 500-1000). Возможно ли это сделать физ. лицу или необходимо юр. лицо?
  4. levshkatov

    Проблема с I2S на STM32F407

    День добрый. Пробую запустить I2S на STMF407. Использую HAL. Проблема в том, что данные передаются ровно в два раза медленнее, чем это требуется. Тактирование на ножках проверял, WS ровно столько сколько я поставлю (8к, 44к и тд). CK в 32 раза больше WS. MCK в 256 раз больше, все как и должно быть. Но пакет данных из 1000 байт передается за 62мс, хотя должен за 31 передаваться (при sample rate = 8000Hz). Без разницы, polling mode или DMA. Части кода: #define WAV_BUFFER_SIZE 1000 uint8_t wavReadBuffer[WAV_BUFFER_SIZE]; for(uint16_t i = 0; i < WAV_BUFFER_SIZE; i++){ wavReadBuffer[i] = 0xff; } HAL_I2S_Transmit(&hi2s2, (uint16_t*)wavReadBuffer, WAV_BUFFER_SIZE, 5000); static void MX_I2S2_Init(void) { hi2s2.Instance = SPI2; hi2s2.Init.Mode = I2S_MODE_MASTER_TX; hi2s2.Init.Standard = I2S_STANDARD_MSB; hi2s2.Init.DataFormat = I2S_DATAFORMAT_16B; hi2s2.Init.MCLKOutput = I2S_MCLKOUTPUT_ENABLE; hi2s2.Init.AudioFreq = ((uint32_t)8000U); hi2s2.Init.CPOL = I2S_CPOL_LOW; hi2s2.Init.ClockSource = I2S_CLOCK_PLL; hi2s2.Init.FullDuplexMode = I2S_FULLDUPLEXMODE_DISABLE; if (HAL_I2S_Init(&hi2s2) != HAL_OK){Error_Handler();} }
  5. Передаю данные по I2S. Мне нужно узнать частоты на ножках WS, CK и MCK. Как это можно сделать программными средствами? Без осциллографов и ацп.
  6. Как правильно выделить сектор памяти для heap в stm32? Среда: Keil. Спасибо!
  7. Порылся в инете и не нашел. Вроде бы бесплатный флак, а никто не делится примерами его использования для ARM. Мне нужен Cortex-M4, но в принципе подойдет любой ARM. Любые статьи, код, все что угодно. Спасибо!
  8. levshkatov

    microSD и stmf4

    Подключаю microSD карточку к stmf4 используя FatFs. Инициализирую SDIO: static void MX_SDIO_SD_Init(void) { hsd.Instance = SDIO; hsd.Init.ClockEdge = SDIO_CLOCK_EDGE_RISING; hsd.Init.ClockBypass = SDIO_CLOCK_BYPASS_DISABLE; hsd.Init.ClockPowerSave = SDIO_CLOCK_POWER_SAVE_DISABLE; hsd.Init.BusWide = SDIO_BUS_WIDE_4B; hsd.Init.HardwareFlowControl = SDIO_HARDWARE_FLOW_CONTROL_DISABLE; hsd.Init.ClockDiv = 3; } Успешно привязываю драйвер: FATFS_LinkDriver(&SD_Driver, SDPath) А дальше не могу пройти вот этот этап: f_mount(&fsFileSystem, (TCHAR const*)SDPath, 1) Программа доходит до выполнения функции SD_CmdError(*hsd), пытается считать флаг SDIO_FLAG_CMDSENT в течение 0xFFFF таймаута и по его истечении выкидывает ошибку. static HAL_SD_ErrorTypedef SD_CmdError(SD_HandleTypeDef *hsd) { HAL_SD_ErrorTypedef errorstate = SD_OK; uint32_t timeout, tmp; timeout = SDIO_CMD0TIMEOUT; tmp = __HAL_SD_SDIO_GET_FLAG(hsd, SDIO_FLAG_CMDSENT); while((timeout > 0U) && (!tmp)) { tmp = __HAL_SD_SDIO_GET_FLAG(hsd, SDIO_FLAG_CMDSENT); timeout--; } if(timeout == 0U) { errorstate = SD_CMD_RSP_TIMEOUT; return errorstate; } /* Clear all the static flags */ __HAL_SD_SDIO_CLEAR_FLAG(hsd, SDIO_STATIC_FLAGS); return errorstate; } Физически карта вроде бы нормально подключена, pull-up резисторы на линиях данных и на CMD. CLK напрямую к МК. На что стоит грешить?
  9. Проблему решил. Ни в одном примере в интернете не нашел, что необходимо написать функцию HAL_TIM_Base_MspInit() в msp.c. Код: void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* htim_base) { if(htim_base->Instance==TIM3) { __HAL_RCC_TIM3_CLK_ENABLE(); HAL_NVIC_SetPriority(TIM3_IRQn, 0, 0); HAL_NVIC_EnableIRQ(TIM3_IRQn); } } Также нужно написать аналогичную функцию DeInit: void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef* htim_base) { if(htim_base->Instance==TIM3) { __HAL_RCC_TIM3_CLK_DISABLE(); HAL_NVIC_DisableIRQ(TIM3_IRQn); } }
  10. @mail_robot Знаю, что нужно разрешить прерывания, просто во всех примерах пользовались коллбэком и без этого. Включил прерывания. Но программа по-прежнему не заходит в void TIM3_IRQHandler(void){}
  11. Добрый день. Не хочет работать таймер на stm32f407. Пытаюсь раз в секунду поморгать светодиодом и не получается. Программа вообще не заходит в обработчик прерывания таймера. В чем может быть проблема? TIM_HandleTypeDef htim3; static void MX_TIM3_Init(void); int main(void) { HAL_Init(); SystemClock_Config(); ... MX_TIM3_Init(); while (1){ } } void SystemClock_Config(void) { RCC_OscInitTypeDef RCC_OscInitStruct; RCC_ClkInitTypeDef RCC_ClkInitStruct; /**Configure the main internal regulator output voltage */ __HAL_RCC_PWR_CLK_ENABLE(); __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1); /**Initializes the CPU, AHB and APB busses clocks */ RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI; RCC_OscInitStruct.HSIState = RCC_HSI_ON; RCC_OscInitStruct.HSICalibrationValue = 16; RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE; if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) { Error_Handler(); } /**Initializes the CPU, AHB and APB busses clocks */ RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI; RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1; RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK) { Error_Handler(); } /**Configure the Systick interrupt time */ HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000); /**Configure the Systick */ HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK); /* SysTick_IRQn interrupt configuration */ HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0); } static void MX_TIM3_Init(void) { htim3.Instance = TIM3; htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; htim3.Init.Prescaler = 48000 - 1; htim3.Init.CounterMode = TIM_COUNTERMODE_UP; htim3.Init.Period = 999; if (HAL_TIM_Base_Init(&htim3) != HAL_OK){ Error_Handler(); } if (HAL_TIM_Base_Start_IT(&htim3) != HAL_OK){ Error_Handler(); } } void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim){ if(htim->Instance==TIM3){ HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_5); } }
  12. Ну декодирование должно быть программным, это задача заказчика. В целом с остальным согласен, но для того чтобы передавать данные на периферию по всем этим шинам, тоже нужна скорость. А еще RTOS, в которой выполняются задачи пользователя в текущий момент.
  13. @Sergey-Ufa Дело в том, что заказ на достаточно портативное устройство и два камня туда уже не влезут. Поэтому и спрашиваю про процессоры с двумя ядрами.
  14. Ну мне нужно обеспечить одновременную работу двух microsd карт, передачу файлов по usb-C, wi-fi, bluetooth, управление дополнительным видеопроцессором для экрана декодирование flac и работу RTOS. Понятно, что одновременная работа этого всего дела крайне маловероятно, но мне необходимо обеспечить ее выполнение даже в таком случае. Вполне возможно, что я неправильно распределяю ресурсы и даже f407 с этим со всем может справиться, но мне нужно чтобы кто то указал на мои ошибки,потому что сам я их не вижу.
  15. Добрый день. Хочу узнать, что есть на рынке быстрее чем контроллеры от ST. Ситуация вот какая, для моих задач мне не хватает stm32f4. По частоте не хватит и их нового чипа h7 с 400 МГц. Нужно порядка 800-1000Мгц чип. Ядро, очевидно что cortex, а там значения уже не так много имеет, какое именно. Всякие супер навороченные qualcomm и mediatek с 8 ядрами не подходят, слишком сложно для меня да и лишнее это. Какой нибудь процессор/мк для мультимедиа задач, с различными интерфейсами. Что подскажете? Или что лучше погуглить? Спасибо!
×
×
  • Создать...