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

Nosaer

Свой
  • Публикаций

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

  • Посещение

Репутация

0 Обычный

Информация о Nosaer

  • Звание
    Частый гость
  • День рождения 29.12.1989

Контакты

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

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

2 554 просмотра профиля
  1. Добюрый день. Использую Atmega8u2 и библиотеку LUFA(Virtual COM Port) Подскажите пожалуйста как настроить обработку прерывания на прием данных от хоста. Что то я окончательно запутался в настройках USB. Чтобы не проверять постоянно CDC_Device_BytesReceived() и CDC_Device_ReceiveByte() А по прерыванию, запускать CDC_Device_ReceiveByte и уже потом обрабатывать полученные данные.
  2. На STM32 так и не смог подключить Mass Storage девайс. Писать на карту могу, и чисто по SDIO и используя FatFS. А чтоб определялось на ПК как внешний накопитель так и не смог реализовать. Поэтому и поглядываю в сторону уже более готовых решений.
  3. День добрый Подскажите какой нибудь проверенный (не шибко навороченный) контроллер USB-SDIO. На вроде тех, что используются в кардридерах. С помощью МК пишу в MicroSD, а затем хочу через USB извлекать данные с этой MicroSD.
  4. Запись во Flash STM32

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

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

    Читал. Если я правильно понял, то ошибка обычно возникает когда значение IRAM меньше, чем на самом деле память у контроллера. В своем случае с 0x1000 поднимал до 0x5000 на вскидку, пробовал подставить адрес из нового диапазона. Ошибки все те же.
  7. Запись во 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(); Пробовал менять адрес для записи, на разные области памяти. Ситуация вообще не меняется Собственно ругается на строки, где я передаю адрес для записи(стирания)
  8. Цитата(Сергей Борщ @ Jun 30 2017, 05:52) У STM32F0 немного перемудрили с регистром данных - он 16-битный и если хотите передавать байты - надо их запихивать по два за раз (они назвали это "упаковка"). А когда количество байт нечетное и остается один последний - надо еще и битик управляющий выставить, типа "пихаю последние 8 бит и все". Ваш указатель pTxData лежит в R5 и имеет значение 0x20000047. Своим приведением *(uint16_t *) вы принуждаете компилятор использовать команду чтения 16 бит. А поскольку адрес в указател у вас не выровнен на границу двух байт, то вы и получаете исключение из-за невыровненного доступа. Пламенный привет писателям "библиотеки". Чтобы этот код работал на CM0(+), адрес начала вашего буфера должен быть кратен двум. Или же переписать этот код правильно: если ваш компилятор умеет указатели на упакованные данные, надо объявить pTxData указателем на упакованные данные (как-то наподобие uint16_t __packed * pTxData). Или же объявить его указателем на uint8_t, вычитывать с его помощью два байта, вручную собирать их в 16-битное слово и уже это слово запихивать в DR. Я бы использовал второй вариант - объектный код получится такой же, а исходник останется портируемым на другие компиляторы. Теперь все понял) Спасибо большое)
  9. Код/* SPI1 init function */ static void MX_SPI1_Init(void) {   hspi1.Instance = SPI1;   hspi1.Init.Mode = SPI_MODE_MASTER;   hspi1.Init.Direction = SPI_DIRECTION_2LINES;   hspi1.Init.DataSize = SPI_DATASIZE_8BIT;   hspi1.Init.CLKPolarity = SPI_POLARITY_LOW;   hspi1.Init.CLKPhase = SPI_PHASE_1EDGE;   hspi1.Init.NSS = SPI_NSS_SOFT;   hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_256;   hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB;   hspi1.Init.TIMode = SPI_TIMODE_DISABLE;   hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;   hspi1.Init.CRCPolynomial = 7;   hspi1.Init.CRCLength = SPI_CRC_LENGTH_DATASIZE;   hspi1.Init.NSSPMode = SPI_NSS_PULSE_ENABLE;   if (HAL_SPI_Init(&hspi1) != HAL_OK)   {     _Error_Handler(__FILE__, __LINE__);   } } Проинициалированно на 8 бит, и считываю по 8. Не совсем понял про 16 бит.
  10. Цитата(Kabdim @ Jun 29 2017, 15:03) 80% проблем портирования с M3-M7 на M0/0+ - невыравненный доступ к памяти. Посмотрите на какой инструкции выскакивает хард фолт. Программа не портировалась, а пишется полностью по новой. На приложенном скриншоте, следующим шагом программа уходит в HardFault_Handler(void) У самого знаний не хватает, почему делает так.
  11. SPI не принимает больше одного байта

    Доброго времени суток. Столкнулся со следующей проблемой. В данном случае SPI работает корректно: Кодuint8_t    BufReadMR45[3] = {0x03,0x00,0x00}; uint8_t     DataReadMR45[5] = {0};         void ReadMR45(void)     {         HAL_GPIO_WritePin(PortCSMR45, PinCSMR45, GPIO_PIN_RESET);                                                        // CS on         HAL_Delay(1);         HAL_SPI_Transmit(&hspi1, &BufReadMR45[0], 3, 1000);                                                                // Отправка данных по SPI         HAL_SPI_Receive(&hspi1, &DataReadMR45[0], 1, 1000);                                                                // Получение данных по SPI         HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_SET);         HAL_GPIO_WritePin(PortCSMR45, PinCSMR45, GPIO_PIN_SET);                                                            // CS off         HAL_UART_Transmit(&huart1, &DataReadMR45[0], 1, 0x1000);                                                    // Отправляю данные по UART         ByteMR45_R = ByteMR45_R + 1;     } Если я изменю функцию: КодHAL_SPI_Receive(&hspi1, &DataReadMR45[0], 5, 1000); Чтобы считывать сразу больше 1 байта, программа зависает. Отладчик приводит в HardFault_Handler(void) Процессор STM32F030, до этого работал с серией F4, таких проблем вроде как не было.
  12. Да ладно!? 5 см на такой скорости и ошибка? Может попробовать экранировать провода? Однажды получал 0x00 в конце каждой посылки из-за не большого рассогласования уровней.
  13. Цитата(Plain @ Apr 29 2017, 17:22) С чего вдруг обидного-то? Схема отсутствует, как подключали неизвестно, фото якобы изделия LT тоже нет. К тому же, полтора месяца назад Вам предоставили решающую данную задачу схему на подножном корме за 50 рублей, но видать, снова типа "места на плате катастрофически не хватило", как случилось в ещё одной Вашей теме. Так схема включения приведена выше. В качестве V1 и V2 использую пока 2 блока питания, чтобы проверить как все это дело работает. V2 выставлен на 14.5 В. V1 изменяю от 9 до 16 В. В качестве транзисторов IRF7240. Схема "на подножном корме" работает, но потребляет пару mA, если смотреть потребление LTC4416(до того момента, как она начинает греться и много потреблять), то потребление в 10-15 раз меньше. Поэтому и решил попробовать реализовать на ней.
  14. Эх, если бы это было так, было бы не так обидно Покупались за 8$ с лишним
  15. Доброго всем времени суток. При включении по данной схеме: Все работает поначалу нормально. По истечению какого то времени, LTC4416 начинает прилично греться и потреблять по линии V2 60mA. При этом сохраняя полную работоспособность. В чем может быть причина?