Jump to content

    

Nosaer

Свой
  • Content Count

    93
  • Joined

  • Last visited

Community Reputation

0 Обычный

About Nosaer

  • Rank
    Частый гость
  • Birthday 12/29/1989

Контакты

  • Сайт
    http://reason89.ru
  • ICQ
    492067

Recent Profile Visitors

2682 profile views
  1. Зависает в f_mkfs (STM32)

    Другие MicroSD я пробовал, проблема та же. Через SDIO на прямую я спокойно работаю с картой, могу считывать все ее параметры, записывать, считывать. Тоже самое в принципе и с FATFS, кроме функции форматирования. Карт SD, под рукой к сожалению пока нет. haker_fox, моего уровня знаний пока не достаточно чтобы прицепить FATFS самостоятельно. Если бы у меня сейчас получилось инициализировать все с помощью куба, чтобы все конкретно заработало. Я бы со временем с этими настройками все переписал бы под себя. Как в принципе я поступаю со всей другой периферией: освоил на HAL, посмотрел как все инициализируется, посмотрел как все работает, перехожу на CMSIS. Во всяком случае для меня, это на много упрощает освоение STM.
  2. Зависает в f_mkfs (STM32)

    Здравствуйте. МК зависает при вызове функции: f_mkfs("", FM_FAT32, 0, work, sizeof work); Зависает в функции HAL_SD_WriteBlocks, в этом цикле: while(!__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_TXUNDERR | SDIO_FLAG_DCRCFAIL | SDIO_FLAG_DTIMEOUT | SDIO_FLAG_DATAEND | SDIO_FLAG_STBITERR)) Монтирование, создание файлов и запись в них выполняется нормально, но с форматированием проблема. Пробовал всевозможные файловые системы, в половине случае так же зависает, в половине возвращает: FR_INVALID_PARAMETER Пробовал разные MicroSD, результат везде один. Где то год назад я уже пробовал работать с MicroSD, и тогда никаких проблем у меня не возникало. Возможно причина связана с новым обновлением CubeMX или с тем, что в CubeMX в настройках FATFS появился пункт BSP (Detect_SDIO) Возможно кто то сталкивался с подобным и подскажет решение МК: STM32F4 Проект генерирую в кубе Связка FATFS+SDIO
  3. Не обновляется регистр CNT

    ivan24190, Большое спасибо, помогло.
  4. Не обновляется регистр CNT

    На данном этапе мне удобнее производить всю инициализацию на HAL. Постепенно осваиваю CMSIS, т.к. некоторые функции от HAL выполняются очень долго и то что освоил пробую писать на CMSIS. Поэтому пока такая мусорка)) Штатными функциями HAL принудительно изменить значение регистра CNT тоже не получилось.
  5. Не обновляется регистр CNT

    // Изначальная инициализация: static void MX_TIM2_Init(void) { TIM_ClockConfigTypeDef sClockSourceConfig = {0}; TIM_MasterConfigTypeDef sMasterConfig = {0}; htim2.Instance = TIM2; htim2.Init.Prescaler = 24999; htim2.Init.CounterMode = TIM_COUNTERMODE_UP; htim2.Init.Period = 68399999; htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; HAL_TIM_Base_Init(&htim2); sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig); sMasterConfig.MasterOutputTrigger = TIM_TRGO_UPDATE; sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig); } // Перезапуск с другими условиями RCC -> APB1ENR |= RCC_APB1ENR_TIM2EN; TIM2 -> CR1 |= TIM_CR1_URS; TIM2 -> CNT = 0x112233; TIM2 -> ARR = 0x334455; TIM2 -> EGR |= TIM_EGR_UG; TIM2 -> SR &= ~TIM_SR_UIF; TIM2 -> DIER |= TIM_DIER_UIE; NVIC_EnableIRQ(TIM2_IRQn); TIM2 -> CR1 |= TIM_CR1_CEN; МК STM32F4
  6. Не обновляется регистр CNT

    Считываю по UART значение. Таймер на момент считывания значения CNT, даже не запущен. После запуска, считать начинает с 0.
  7. Добрый день. Хочу занести свое значение в регистр CNT: TIM2 -> CNT = 0x112233; TIM2 -> ARR = 0x334455; TIM2 -> EGR |= TIM_EGR_UG; С ARR проблем никаких нет, он обновляется и значение остается тем, которое я задал. CNT по началу принимает заданное значение, но буквально через пару тактов после TIM2 -> EGR |= IM_EGR_UG; сбрасывается опять в 0
  8. Добюрый день. Использую Atmega8u2 и библиотеку LUFA(Virtual COM Port) Подскажите пожалуйста как настроить обработку прерывания на прием данных от хоста. Что то я окончательно запутался в настройках USB. Чтобы не проверять постоянно CDC_Device_BytesReceived() и CDC_Device_ReceiveByte() А по прерыванию, запускать CDC_Device_ReceiveByte и уже потом обрабатывать полученные данные.
  9. На STM32 так и не смог подключить Mass Storage девайс. Писать на карту могу, и чисто по SDIO и используя FatFS. А чтоб определялось на ПК как внешний накопитель так и не смог реализовать. Поэтому и поглядываю в сторону уже более готовых решений.
  10. День добрый Подскажите какой нибудь проверенный (не шибко навороченный) контроллер USB-SDIO. На вроде тех, что используются в кардридерах. С помощью МК пишу в MicroSD, а затем хочу через USB извлекать данные с этой MicroSD.
  11. Запись во Flash STM32

    Код скопировал скорее всего когда пробовал методом перебора добиться отсутствия ошибки, извиняюсь, не доглядел. В основном пытаюсь писать во флеш по даташиту. И как уже писал выше, куда только пробовал не писать. Сейчас заметил, что при включении оптимизации(а она у меня отключена), компилируется без ошибок. Но в память все равно не пишет.
  12. Запись во Flash STM32

    В плане адреса, согласно мануалу он существует. К тому же я практически методом перебора уже перепробовал всевозможные адреса [attachment=108470:STM32F0xx_REF1.jpg]
  13. Запись во Flash STM32

    Читал. Если я правильно понял, то ошибка обычно возникает когда значение IRAM меньше, чем на самом деле память у контроллера. В своем случае с 0x1000 поднимал до 0x5000 на вскидку, пробовал подставить адрес из нового диапазона. Ошибки все те же.
  14. Запись во Flash STM32

    Добрый день Пытаюсь записывать свои данные во Flash на STM32f0xx, при компиляции выдает кучу ошибок по типу: ЦитатаANV_AMP_MTR\ANV_AMP_MTR.axf: Error: L6407E: Sections of aggregate size 0x40 bytes could not fit into .ANY selector(s). ANV_AMP_MTR\ANV_AMP_MTR.axf: Error: L6406E: No space in execution regions with .ANY selector matching iusefp.o(.text). Код    HAL_FLASH_Unlock();                  FLASH_EraseInitTypeDef EraseInitStruct;         EraseInitStruct.PageAddress = 0x08004000;         EraseInitStruct.TypeErase = FLASH_TYPEERASE_PAGES;         EraseInitStruct.NbPages = 1;         uint32_t SectorError = 0;         if (HAL_FLASHEx_Erase(&EraseInitStruct, &SectorError) != HAL_OK)             {                         HAL_FLASH_Lock();             }         HAL_FLASH_Unlock();         HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, 0x08010000, AHReady);         HAL_FLASH_Lock(); Пробовал менять адрес для записи, на разные области памяти. Ситуация вообще не меняется Собственно ругается на строки, где я передаю адрес для записи(стирания)
  15. Цитата(Сергей Борщ @ Jun 30 2017, 05:52) У STM32F0 немного перемудрили с регистром данных - он 16-битный и если хотите передавать байты - надо их запихивать по два за раз (они назвали это "упаковка"). А когда количество байт нечетное и остается один последний - надо еще и битик управляющий выставить, типа "пихаю последние 8 бит и все". Ваш указатель pTxData лежит в R5 и имеет значение 0x20000047. Своим приведением *(uint16_t *) вы принуждаете компилятор использовать команду чтения 16 бит. А поскольку адрес в указател у вас не выровнен на границу двух байт, то вы и получаете исключение из-за невыровненного доступа. Пламенный привет писателям "библиотеки". Чтобы этот код работал на CM0(+), адрес начала вашего буфера должен быть кратен двум. Или же переписать этот код правильно: если ваш компилятор умеет указатели на упакованные данные, надо объявить pTxData указателем на упакованные данные (как-то наподобие uint16_t __packed * pTxData). Или же объявить его указателем на uint8_t, вычитывать с его помощью два байта, вручную собирать их в 16-битное слово и уже это слово запихивать в DR. Я бы использовал второй вариант - объектный код получится такой же, а исходник останется портируемым на другие компиляторы. Теперь все понял) Спасибо большое)