Jump to content

    

porty

Свой
  • Content Count

    240
  • Joined

  • Last visited

Everything posted by porty


  1. ясно, спасибо. Действительно тупка. Подумалось почему то что страница сайта на конкретный чип именно 64 выводной. Значит всё таки в кооксе накосячили и прочих эклипс подобных сборках и плагинах к нему.
  2. Добрый день. Есть ли интерфейс внешней памяти в STM32F100RC? Суть проблемы: тут сказано что есть: http://www.st.com/internet/mcu/product/216...ferrer=70011740 "Flexible static memory controller with 4 Chip Selects. Supports SRAM, PSRAM and NOR memories" но в офф. пдфке: http://www.st.com/internet/com/TECHNICAL_R.../CD00212417.pdf стр. 10/97 "Table 2. STM32F100xx features and peripheral counts" "STM32F100Rх: FSMC: No" Так же в многих средах объявляется что FSMC есть, например Coocox: STM32F100RC Descriptions: ST's STM32F100RC operates at a maximum speed of 24MHz and features 256 Kbytes of Flash and 24 Kbytes of SRAM. Key Parameters: Flexible static memory controller, Supports SRAM, PSRAM and NOR memories, LCD parallel interface Internal RC 8MHz and 40kHz, 32 kHz for Real-Time Clock ///
  3. к сожалению она недоступна для заказа. А на сайте на китайском языке её даже для продажи нет.
  4. тут схему и исходник нужно смотреть причём целиком всю часть что касается что ацп то и цапа и их питание и питание контроллера. Но судя по описанию - программный глюк. Но может быть аппаратный, NXP 1768 очень сильно лажали в АЦП и всей аналоговой частью точно так же как выше описано в этой теме.
  5. выход ЦАП относительно высокоомный, включи внутренние буфера и нагрузи выход цап на 10-100ком на землю.
  6. Извините, но нужна отладка именно на СТМ32. Для того чтоб без существенных доработок кода перенести в основной проект который тоже на стм32, то что будет реализовано в отладке на тех таймерах и ресурсах которые в основном проекте свободы. Такая вот задумка.
  7. используй специально для этого предназначенное ключевое слово "volatile", оно говорит компилятору чтоб не оптимизировал значение и работу с этой переменной или кодом. volatile int i; ... i = 100; while (i --) ;
  8. Добрый день. Нужна отладка: 1. Самый простой камень от СТМ32 типа STM32F100RC 2. ОЗУ: SRAM асинхронная или синхронная, в общем любое ОЗУ на 128-512кбайт. 3. 2шт SPI или 2шт I2S или два любых других канала последовательных для связи с готовым изделием на базе CPLD. 4. УСБ распаянный (SiLabs, FTDI и тд) или уарт на 512кбит или езернет, короче какая то связь с компом на 512кбит. 5. Ценой менее 300 баксов. Чтоб в готовое изделие ставить и самим не производить. Надо 10шт всего. Цель - приделать "костыль" к проекту, которому оказалось требуется буфер на 128-512кбайт и сложное управление самим буфером (поэтому готовые микросхемы FIFO не подходят) пока в виде покупной отладки. Но потом встроить в сам проект поэтому желательно чтоб был минимальный размер кристалла и памяти с минимумом ножек. Посоветуйте пожалуйста.
  9. без всяких A/D Global Data Register щёлкали результаты или вообще случайные шли даже читая из регистров конкретных каналов. Да и смысл в burst mode пользоваться глобальным регистром? Всё равно нужны конкретные каналы после окончания выборок пачки и прерывание настраивается на последний канал пачки или общее окончание работы ацп или просто опрос с заведомо большим интервалом чем обработка пачки.
  10. Спектр искажается в области ВЧ, если инжектирование происходит в области 500гц, то почему то изменения затрагивают равномерно от 5 до 8кгц судя по спектрограмме. Что весьма странно. Выявляется это лесом палок частот что на 10-20дб выше шума (см скрины выше). А если на слух то звоном как будто монеты падают при достаточно глухом нч тоне. В том то и дело что это даже на слух слышно (если воспроизвести выборки данных с АЦП), хотя если аудиошюпом встать на ножку ацп то не слышно. В самом сигнале полочек нет, перед АЦП стоит фильтр НЧ (на 8кгц) третьего порядка на качественном инструментальном ОУ с выходным током до 100мА без каких либо резисторов напрямую на ножку АЦП. Так что источники сигналов я считаю достаточно низкоомные в добавок при прослушке прямо с ножки АЦП сторонними приборами ничего не слышно (что аудиощупом, что опцией осциллографа). Регулярность выборок не нарушается, т.к. регулярные - звук запускаются по переполнению таймера, а инжектированные запускаются программно после того как программа убедилась что таймер досчитал до 200 тактов (из 750) от переполнения - события запуска АЦП для регулярного, а так же проверив флаги АЦП о том что текущая конверсия закончилась. Проверял как программно (ножкодрыганием по статусным флагам ацп), так и осцилографом (подключив источник сигнала в мегаомы по импульсам просадки во время сэмплирования) . Т.е. запуск инжектированных каналов происходит только когда закончилось преобразование регулярного и прошло около 100 тактов (т.е. где в середине между регулярными выборками). И в добавок инжектированные каналы намеренно заканчиваются тем же каналом что и регулярный - я думал что это поможет перезарядить ёмкость после аналогового мультиплексора - но такого нет - судя по спектограмме разница не чувствуется, т.е. нет разницы на каком канале закончилось преобразование инжектированного.
  11. Добрый день. chip: STM32F100C8T6B Имеется три канала АЦП, один измеряет звук 32кГц. Два других - датчики уровней - 500Гц. Первый канал повесил на Regular у ADC, другие инъектированные. Регулярные запускаются от таймера на 32кГц. Запускаю инжектированные по прерываниям ДМА софтварно по приёму блока в 64 выборок звука, так чтоб запуск состоялся после обработки очередной выборки и не приводил к временному смещению регулярной выборки - джиттингу (проверяю и жду определённую фазу предделителя таймера). Питание у АЦП и аналоговой части своё отдельное от цифры и стабилизированное, шума нет если подключиться аудио-щюпом или измерителем спектра. Время семплирования звука 71.5 такта. Инжектированных - 41.5 такта. Частота АЦП - 12МГц. В итоге в спектрограмме наблюдается ВЧ шум в виде леса палок частот на 10-20 дб больше, нежели если выключить запуск инжектированных каналов. Что приводит к недопустимым дополнительным искажениям в измерение шума + нелинейных искажений (основная функция прибора). Спектрограмма когда инжектирование включено: http://minus.com/mwYStTrhs#1o Спектрограмма когда выключено http://minus.com/mwYStTrhs#2o Пробовал даже добавлять последний инжектированый канал с звука для того чтоб было меньше переходных процессов при переключении каналов в мультиплексоре АЦП - не помогает. В чём может быть дело? Как устранить? Или правильно переключать каналы? Спасибо.
  12. понимаю, но хотелось бы этого избежать, в добавок уже какой то есть в самом чипе. DTR и RST не выведены в стм32. т.к. требуется гальваническая развязка и ставить доп микросхемы типа адумов или оптронов нет ни места ни бюджета, макс что влезет - 2 транзистора в сот23 с обвязкой или эквивалент. как понимаю предлагается программой на проце подать на ноги 1 и сделать програмный сброс? - тоже не вариант, клиенты хотят сами прошивку писать на проц и часто делают очевидные ляпы типа доступа к не выравненным данным в итоге все висит и перепрошить потом не смогут. Я думаю подать на ресет данные с RX в устройство через RC цепочку и сбрасывать проц посылая очень длинный 0 по уарту. т.е. BREAK. но остается проблема скремблера, чтоб не было слишком много нулевых бит в штатном режиме... это как запасной вариант если ничего не придумаем.
  13. Добрый день Кратко: Как бороться с ложной автонастройкой скорости USART у ROM-загрузчика STM32? У нас имеется устройство в которое может заливаться прошивка пользователем через подключенный RS232 порт. Устройство обязано стартовать с входа в загрузчик. Поставить кнопочку входа в режим загрузчика проблематично, потому что требуется удалённое управление. Для этого мы используем функцию ROM загрузчика согласно документу AN3155 "USART protocol used in the STM32™ bootloader". Согласно этому документу ROM загрузчик выставляет скорость по первому принятому байту 0x7F и далее с ней работает. Устройство подключается к компьютеру через RS232 либо через USB переходники, в любом случае при подключении винда пытается опросить по P&P, либо этот комп порт пытаются опросить другие программы, в любом случае возникает ситуация когда загрузчик настраивается на ложную скорость, которая неизвестна и вряд ли попадает в стандартный ряд для уарта и достучаться до него становится невозможно без перезагрузки МК. Как с этим бороться? Как отключить Plug&play в винде через новые ком порты? Или как скрыть ком порт чтоб у него не было имени вида COMx, а только строка с ID реестра, например "\??\USB#VID_1234&PID_5678#7&2bec8296&0&3#{a5dcbf10-6530-11d2-901f-00c04fb951ed}" чтобы левые программы не открывали его в поисках GSM шлюзов, сотиков, и прочего железа и не писали левые байты и не приводили к ложному срабатыванию автонастройки скорости? Или как сбросить скорость у загрузчика или иным образом запустить автонастройку не дёргая рэсет? Или какие есть дешовые интеллектуальные WDT которые например сбрасывают раз в минуту если не было подтверждения, до 10р за шт, если всё-таки сделать ресет или аналогичные цепи / заменители? Заранее Спасибо.
  14. мне вот интересно откуда Саблезубый собирается например АМОЛЕД матрицу покупать? неужели такое продаётся в обычных радио магазинах? или например компеле? Или SIPS? Найти то можно, но цены прикольные весьма =) Ещё интереснее сроки. Ещё интереснее интерфейсы. Ну можно готовый модуль типа промышленного но не в россии ... и там ещё интереснее цены. По сравнению с станком за пару миллионов баксов даже интересные весьма. Купи сразу ретину на 2000х1000, удиви Аппл =) Он в свою очередь удивит тебя приехав на невзрачном фургончике в час ночи =)
  15. если ТС сможет сделать всё задуманное то смысл ему делать задуманное с каким то ширпотребам если он с такими знаниями может разработать что то новое и купить хоть сто айпадов 2 64гига? Сама задача бессмысленная. Действительно, плюнь и разотри
  16. NXP крайне не советую, море тем про то что у них аналоговые цепи сбоят, и прочие косяки... Да даже по SPI выще 20Мгц прыгнуть не удалось - фронты выдаваемого SPI были дико завалены, до 10нс чего даже у атмег и AVR не наблюдалось... STM32 пока понравились больше, возможно стелларисы от TI
  17. Что за глюки которые в самой библиотеке? То что нельзя использовать код из примеров это я знаю, то что она рассчитана на один поток тоже, то что всё писать нужно чисто алгоритмически лучше тоже (не делать вечных циклов ожидающих чего либо, например окончания калибрации АЦП и тд).
  18. что за проблемы могут появиться? ладно, ладно, я вначале просто написал как было предложено, но стало просто интересно куда там запихали именно devID вот и спросил на форуме. Куда же всё же затолкано оно?
  19. Затем что просто интересно, вдруг чего ещё полезного там есть и код должен быть однообразным. А не тут так там сяк. И ещё, чтоб не было магических чисел http://ru.wikipedia.org/wiki/%D0%9C%D0%B0%...82%D0%B5%D1%80) И читаемость была кода высокая. Для многих кто разрабатывает проги размером менее 1-10тыщь строк что так то не принципиально.
  20. Добрый день. У СТМ32 есть такая хорошая штука как уникальный идентификатор. Unique device ID register (96 bits) Но почему то в стандартной библиотеке на си от стм я её не нашел. Как по имени так и по адресу 0x1FFFF7E8 Подскажите пожалуйста, где он располагается именно в этой библиотеке если конечно есть и описан прямо или косвенно?
  21. Добрый день. STM32F100RB включены АЦП, USART1 и DMA chanel4 Настроил DMA на передачу данных в усарт и нужен был режим работы в котором при передаче половины буфера срабатывало бы прерывание, а так же по завершению. Всё срабатывает нормально до поры до времени. Ровно до тех пор пока обработчик прерывания не вызовется с запозданием и если во время обработки половины буфера выставится флаг TC ( передача завершена) то прерывание TC не срабатывает, в итоге прога не сбрасывает флаг занятости USART и ждёт у моря погоды вечно (или пока принудительно не будешь опрашивать счётчик отсавшихся транзакций в ДМА и по нему ориентироваться). Исходники Прерывание void DMA1_Channel4_IRQHandler(void) //TX { if (DMA_GetFlagStatus(DMA1_FLAG_TE4)) { DMA_ClearFlag(DMA1_FLAG_TE4 | DMA1_FLAG_GL4); error_add(ERROR_UART_TX_DMA); }; if (DMA_GetFlagStatus(DMA1_FLAG_HT4)) { DMA_ClearFlag(DMA1_FLAG_HT4 | DMA1_FLAG_GL4); }; if (DMA_GetFlagStatus(DMA1_FLAG_TC4)) { DMA_ClearFlag(DMA1_FLAG_TC4 | DMA1_FLAG_GL4); usart_transmit_complite = true; }; usart_check_shift(); } Настройка ДМА: RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE); NVIC_InitTypeDef NVIC_InitStructure; STRUCT_CLEAR(NVIC_InitStructure); NVIC_InitStructure.NVIC_IRQChannel = DMA1_Channel4_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); DMA_DeInit(DMA1_Channel4); DMA_InitTypeDef DMA_InitStructure; DMA_DeInit(DMA1_Channel4); STRUCT_CLEAR(DMA_InitStructure); DMA_InitStructure.DMA_PeripheralBaseAddr = (u32) &(USART1->DR); DMA_InitStructure.DMA_MemoryBaseAddr = (u32) data; DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST; DMA_InitStructure.DMA_BufferSize = size; DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte; DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte; DMA_InitStructure.DMA_Mode = DMA_Mode_Normal; DMA_InitStructure.DMA_Priority = DMA_Priority_High; DMA_InitStructure.DMA_M2M = DMA_M2M_Disable; DMA_Init(DMA1_Channel4, &DMA_InitStructure); DMA_ITConfig(DMA1_Channel4, DMA_IT_TE | DMA_IT_HT | DMA_IT_TC, ENABLE); USART1->SR=0; DMA_Cmd(DMA1_Channel4, ENABLE); В чём может быть проблема? Стоит ли флаг глобального прерывания канала очищать? Или достаточно очистить конкретный флаг не глобального а HT | TC? В документации от СТМ не нашол ответа
  22. я на спектрумах вообще защищал дискеты, портя одну сторону и писал спец загрузчик на низком уровне.
  23. я делал так - у нашего устройства была специфика - на каждый канал арм проц, все каналы соединены цепочкой, первый с вторым, второй с третьим и тд, последний с езернетом и компом, т.е. данные с первого канала проходят через все остальные (скорость позволяла). Все каналы можно обновлять с компа, соответственно прошивка будет общедоступна - снифером её снять без проблем ... что сделали - ввели серийники на каждый канал и если ведомый проц видит что ведущий отдаёт тот же серийник что его то он начинает изредка глючить (менять каналы местами) и выдавать в голосовой канал что прошивка сворована. Серийник спрятан и размазан по нескольким местам прошивки обусфактором, на каждый канал в исходнике делается скриптом разный рефакторинг и обусфакция в итоге на каждый канал прошивка кардинально меняется. Т.е.: 1. Каналы знают друг у друга серийный номер 2. Серийный номер спрятан так чтоб прошивка каждого канала существенно отличалась 3. Если серийники совпали - задолбать пользователя сообщениями о подделке или выключится. 4. Проверку начать только после 100-200 часов наработки. Затрачено день на продумывание и неделя на реализацию (включая протокол прошивки с компа и правку платы - поставить подтяжку на режим бутлоадера) имея готовое устройство. Как взламывать без дизасма прошивки - сам не знаю. В этом плюс. Т.е. смотри конкретику и привязывайся к аппаратуре