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

adnega

Свой
  • Постов

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

  • Посещение

  • Победитель дней

    3

Весь контент adnega


  1. Можете озвучить круг задач, которые вы собираетесь решать на STM32? Если это задачи уровня F7, то может, лучше сразу Cortex-A начинать?
  2. С чего вы это взяли? DMA может откуда угодно куда угодно произвести транзакцию, если на это нет ограничений (CCM, выравнивание и т.п.) и есть доступ к соответствующим шинам. Много раз обсуждалось, как таймер инициирует транзакцию в SPI. Там единственная особенность, что от момента запроса до момента транзакции может пройти некоторое время (у меня получалось ~12 тактов) и при высоких скоростях SPI сложно получить равномерный SCK (без межсимвольных пауз).
  3. Если нужно заполнить кольцевой буфер для постобработки, то полностью согласен.
  4. 1мкс -> 1МГц. Даже на МК с тактовой 168МГц у вас 168 тактов на посылку. По-моему, ничего разумного за такое время не сделать. STM32F тут не подходит не из-за SPI, а из-за общей производительности. Тут вариант - на внешней ПЛИС сделать опрос АЦП, а МК предоставить доступ по внешней шине, или правдами-неправдами "окутать" доступ к АЦП в какой-нить DCMI при помощи CPLD попроще. У ТС озвучивалась задача 5кГц, и под нее выбирались МК типа STM32F Если 5кГц это максимум, то на любом STM32F это делается легко даже с ручным дерганьем CS.
  5. Например, вам нужно передавать пакет данных в АЦП с частотой 5кГц. Вы: 1. Делаете таймер с частотой срабатывания 5кГц. 2. В обработчике прерывания этого таймера поднимаете CS ручками. 3. Затем обрабатываете приемный буфер от SPI и готовите буфер отправки. 4. Потом опускаете CS ручками. 5. Настраиваете DMA и запускаете его. 6. Выходите из прерывания таймера. Чем не устраивает? п. 2 и п. 4?
  6. И не понятно зачем ТС смешивает работу через HAL и через регистры? Нужно выбрать что-то одно (только HAL).
  7. Да, неплохо бы перед инициализацией сбрасывать статус DMA, типа
  8. И что? Есть рынок, есть предложение. Если есть потребность - за деньги вы ее закроете, НО вы же не для себя-одного разрабатываете СКУД(?), а для продажи на рынке, в таком случае, у вас мало шансов, что покупать будут ваше. Пример можете привести, чего вам не хватает? У всех есть открыть закрыть дверь, помигать светодиодиками, поставить/снять с охраны, разделение по зонам, учет рабочего времени и т.п. Или хотя бы список производителей, который вы проанализировали и они вам не подошли? Мы вам этот список расширим. Выше функционал - выше стоимость. Существуют Требования к такому типу оборудования для разных видов объектов - порой они не позволят сделать проще, а значит дешевле. А можете про себя рассказать? Вы организация из этой области? Вы физлицо с кучей лишних денег? Вы менеджер кадрового агентства? Курсовая или диплом? Складывается впечатление, что вы хотите сделать железяки для своих потребностей пару штук за дешевле существующих... Это опечатка? Вам нужен ОДИН человек всего?
  9. А чем существующие СКУД не устраивают?
  10. проблемы с SDHC

    Использую CMD18_READ_MULTIPLE_BLOCK + CMD12_STOP_TRANSMISSION для чтения, и ACMD23_SET_WR_BLK_ERASE_COUNT + CMD25_WRITE_MULTIPLE_BLOCK + CMD12_STOP_TRANSMISSION для записи. Перед и после операций - CMD13_SEND_STATUS.
  11. Питон встроен в свежий KiCAD, LibreOffice и т.п. - можно автоматизировать некоторые вещи.
  12. Один должен уметь быть внешним запуском для ADC, а второй - событием для DMA.
  13. Нужно засинхронизировать входной и выходной потоки. Я делал по таймеру. Правда для F407. Настраиваем TIM1CH1 и TIM4CH1 на генерацию нужной Fд. Настраиваем ADC1 на запуск по внешнему событию TIM1CH1. Настраиваем DMA2Stream0 на кольцевой буфер АЦП, куда по запросам от ADC1 будем складывать данные. Настраиваем DMA1Stream0 на кольцевой буфер ЦАП, откуда по запросам от TIM4CH1 будем копировать данные в DAC. В обработчике прерывания от DMA2Stream0 обрабатываем полу-кольцо от АЦП и заполняем полу-кольцо для ЦАП. Уверен, что-то подобное можно сделать и в F103. У ТС F103, а примеры
  14. Для какой-то частной задачи можно найти много упрощений, но иногда бывают непростые случаи. Например, у меня в шине CAN помимо управляющий посылок с высоким приоритетом могут гулять всякие неважные мультимедийные посылки (тот же интерком). Шина при этом может быть загружена на 100%. Часть мультимедийных посылок может быть потеряна (это будет эквивалентно половинной Fд), но управляющий трафик всегда должен выигрывать арбитраж. Скорость не большая 50кБит/с. Я не вижу простого шлюза, а тоже хотелось бы прокинуть все через какую-нить esp8266.
  15. Это если CAN не нужен. А если CAN нужен? Нет прозрачного решения CAN-UART-CAN - нужно так или иначе шлюз мастерить. Я так понял у ТС
  16. Сила пусть через спец подшипники идет, а CAN лучше пустить через токосъемники, если скорость вращения позволяет. Не нужен никакой огород с электроникой.
  17. Погуглил. Существуют вещи типа SRH0317-2. Может, лучше их поставить и не выдумывать модемы-шлюзы-протоколы-конструкции?
  18. Не понятен спектр потребления, не понятны вопросы сертификации и т.п. Описанное вами решение не соответствует требованиям CAN, из-за выпрямителей оно не эффективно при 20А и вы теряете общий провод. 24В и 20А! - какая траншея? Если бы ТС подробнее описал сложности с новой проводкой, то было бы с чем сравнивать.
  19. У профессионалов, как правило, нет проблем с дополнительной парой проводов при решении задачи оптимальным способом. Если уже есть проводная линия, не понятно, что мешает дополнить ее еще парой проводов? Сколько будет стоить добавить эти провода? На мой взгляд, на порядок дешевле, чем придумывать способ обхода. При этом по надежности с выделенной линией вряд ли что сравнится.
  20. И где же в стандарте говориться про физический уровень? Я прочитал, что т.е. в стандарте физический уровень не описывается. Для работы CAN нужно в среде создать два состояния: доминантное и рецессивное, каждое со своими свойствами. Как это сделать - зависит от задачи. Конкретно для этой задачи вряд ли есть стандартное решение или простое решение. Проще передавать по какой-нить powerline-технологии и сделать CAN-шлюзы под данную технологию - тут я с novikovfb согласен. Делать свое powerline-решение под требования CAN я бы не советовал (уж слишком нагрузка у вас непростая).
  21. ТС тоже не робкого десятка, раз хочет менять лампочки под фазным напряжением.
  22. Дык, ремонт в квартире периодически делать нужно. Тут далеко не капиталка, а перед поклейкой обоев пробросить чутка проводов в стенах, не так дорого и не так сложно. Зато в будущем - никаких проблем. Менять силовую проводку (читай knx в щиток) я большой противник. Нужно чтобы в одно посадочное место устанавливались хоть умный, хоть обычный выключатель. Если хочется дешево, то есть много лампочек с esp8266 внутри, и всякие там Xiaomi. Перепроверьте, есть мнение (nooLite-F) что это уже не так.
  23. Лучше всего отдельный кабель до выключателя: по нему подавать питание 24В и интерфейс, лучше CAN :)) Один раз напрячься, зато потом никаких проблем.
  24. Вы точно уверены что это данные из сектора? Пробоволи считать их повторно или на ПК? После команды чтения следует ответ на команду, а затем нужно ждать признака данных (очень долго). После признака данных идут данные и CRC. Ни разу, ни при каких обстоятельствах не видел, чтобы изначально рабочая карта начала выдавать 0xFF вместо данных. Я много лет собираю таких "уродцев" в свою коллекцию, но ничего подобного не встречал. Есть две "левые" карточки, купленные в отделе носовых платков, дык, одна вообще не читается, а на второй работают только первые 128МБ из 2ГБ, но такие карты не для серьезного рассмотрения. Мне кажется я уже тут выкладывал результаты исследований карт при чтении потока в реальном времени, но не могу найти где именно. Чтение велось блоками по 256Б и по 8КБ (по 10 000 блоков в каждом эксперименте). Все данные считываются верно, но с различной задержкой. Иногда задержка настолько велика, что поток реального времени невозможен (в звуке появляются щелчки). Такие события имеют желтый фон. SDIO_stat_2.pdf
  25. Вы в своей прошивке должны дисплей проинициализировать, а затем выводить в него данные/картинку. Что-то типа этого con_str("disp_code = "); con_word(LCD_ReadReg(0x0000)); con_str("\n\r"); con_start(); if(LCD_ReadReg(0x0000) == 0x8989) { LCD_WriteReg(0x0000,0x0001); delay_ms(50); /* Enable LCD Oscillator */ LCD_WriteReg(0x0003,0xA8A4); delay_ms(50); LCD_WriteReg(0x000C,0x0000); delay_ms(50); LCD_WriteReg(0x000D,0x080C); delay_ms(50); LCD_WriteReg(0x000E,0x2B00); delay_ms(50); LCD_WriteReg(0x001E,0x00B0); delay_ms(50); LCD_WriteReg(0x0001,0x2B3F); delay_ms(50); /* 320*240 0x2B3F */ LCD_WriteReg(0x0002,0x0600); delay_ms(50); LCD_WriteReg(0x0010,0x0000); delay_ms(50); LCD_WriteReg(0x0011,0x6078); delay_ms(50); //0x6070 LCD_WriteReg(0x0005,0x0000); delay_ms(50); LCD_WriteReg(0x0006,0x0000); delay_ms(50); LCD_WriteReg(0x0016,0xEF1C); delay_ms(50); LCD_WriteReg(0x0017,0x0003); delay_ms(50); LCD_WriteReg(0x0007,0x0133); delay_ms(50); LCD_WriteReg(0x000B,0x0000); delay_ms(50); LCD_WriteReg(0x000F,0x0000); delay_ms(50); LCD_WriteReg(0x0041,0x0000); delay_ms(50); LCD_WriteReg(0x0042,0x0000); delay_ms(50); LCD_WriteReg(0x0048,0x0000); delay_ms(50); LCD_WriteReg(0x0049,0x013F); delay_ms(50); LCD_WriteReg(0x004A,0x0000); delay_ms(50); LCD_WriteReg(0x004B,0x0000); delay_ms(50); LCD_WriteReg(0x0044,0xEF00); delay_ms(50); LCD_WriteReg(0x0045,0x0000); delay_ms(50); LCD_WriteReg(0x0046,0x013F); delay_ms(50); LCD_WriteReg(0x0030,0x0707); delay_ms(50); LCD_WriteReg(0x0031,0x0204); delay_ms(50); LCD_WriteReg(0x0032,0x0204); delay_ms(50); LCD_WriteReg(0x0033,0x0502); delay_ms(50); LCD_WriteReg(0x0034,0x0507); delay_ms(50); LCD_WriteReg(0x0035,0x0204); delay_ms(50); LCD_WriteReg(0x0036,0x0204); delay_ms(50); LCD_WriteReg(0x0037,0x0502); delay_ms(50); LCD_WriteReg(0x003A,0x0302); delay_ms(50); LCD_WriteReg(0x003B,0x0302); delay_ms(50); LCD_WriteReg(0x0023,0x0000); delay_ms(50); LCD_WriteReg(0x0024,0x0000); delay_ms(50); LCD_WriteReg(0x0025,0x8000); delay_ms(50); LCD_WriteReg(0x004f,0); LCD_WriteReg(0x004e,0); } LCD_WriteReg(0x004e, 0); LCD_WriteReg(0x004f, 0); LCD_WriteIndex(0x0022); for( index = 0; index < 320 * 240; index++ ) { LCD_WriteData(index); } Прицепил. 3.2inch_320x240_Touch_LCD_A.7z
×
×
  • Создать...