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

ang54

Участник
  • Постов

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

  • Посещение

Репутация

0 Обычный

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

  • Звание
    Участник
    Участник
  • День рождения 29.03.1954

Контакты

  • Сайт
    Array
  • ICQ
    Array

Информация

  • Город
    Array
  1. В данном случае проблема была в другом. Нового старта еще нет. Иголка, связанная с прерыванием была действительно на полке сигнала СТОП, но вызвана, на мой взгляд, немного сырой реализацией внутренней логики интерфейса и проявилась только при коде, слегка отличном от примера, то есть когда я пытался работать не выключая прерывание (бит TWIE), и при этом, где-то в таймингах логики образовалась дырка. Мое недоумение как раз вызвано недоделкой интерфейса. Только вот я не знаю, было ли это изначально и никто не заметил. Или это выплыло позже, что-то правили и зацепили. Это часто бывает. Или просто такая партия попалась. (И с этим я тоже сталкивался, например, была партия с очень большим временем записи EEPROM). Кстати, если кто-то захочет использовать приведенный мной код, в файле twi_slave.txt строка 18 - while(TWCR & (1<<TWINT)); явно лишняя. Время от времени этот бит не сбрасывается и код зависает в бесконечном опросе, в тоже время, это никак не влияет на последующие операции, так что опрос бита лишний. Ну и для тех, кто не в курсе, в примере я использую подробные комментарии на русском, но, естественно, в реальном коде нельзя использовать маленькую 'я', ее код 0xFF используется как спец код в каком-то из инструментов. Чаще всего он никак не влияет на компиляцию. Но, время от времени нарушает ее ход, и можно долго искать, чего это отладчик идет по коду не туда, да еще пытается выполнить заремированные строки.
  2. Atmega_16+TWI+Atmega_16 - Возникшие проблемы и их решение. Может кому пригодится сэкономить кучу времени. Сначала немного предистории. В начале 2000-х я уже использовал TWI для связи двух Atmega 64. Там была простая передача данных от Мастера к Слэйву. Делал по примерам, Мастер управлялся напрямую, Слэйв по прерываниям. Заработало сразу и я особо не разбирался с этой шиной. Несколько десятков стендов до сих пор работает по стране и претензий к шине не было. Недавно, для очередного проекта мне не хватало ног и я попробовал использовать Atmega 32 + 5шт расширителей PCF8574, и был неприятно удивлен. При разводке платы я особо не задумывался, на какую из микросхем вешать тот или иной вход или выход. Куда ближе, туда и проводил. И большинство кнопок повесил на расширители. Кнопки опрашивал раз в 10 мс. Так вот, эти расширители стали виснуть за время от нескольких секунд, до часу. Мне показалось, что висли именно те PCF, где был опрос входов. Их оживление - только через сброс питания. Порезал дорожки на плате, переразвел проводами так, чтобы все кнопки были подключены непосредственно к МК. Частота обмена по шине снизилась до 1 с. (Только индикатор обменивался довольно длинными пачками, но там только выход) Сбои стали крайне редкими, но меня это не устраивало. Устройство (пеллетный котел) должно работать весь сезон без сбоев. Переделал схему на две Atmega 16 связав их по SPI (и TWI, как вариант Б). Я решил, что проблема именно в PCF8574 и неудачной реализации ее шины, так как, я уже говорил, что связка 2-х Atmega работала нормально (правда там был режим - несколько часов в день, и, возможно, проблема не успевала проявиться). Вариант по SPI что-то не заладился. Мастер дает пачки, а Слэйв не хочет входить в прерывание, хоть ты тресни. Решил пока применить вариант Б, а то время поджимает, а со SPI разберусь попозже. И вот тут меня ждала засада. Сначала применил свой старый код. Передача на слэйв идет нормально. А вот прием - никак. Переделал код в соответствии с примерами AVR312/315. Мне показалось, что так легче отлаживать. Только там в примерах постоянно включают/отключают разрешение прерывания TWI. Это лишнее, решил я, можно оставить разрешение постоянно, так как вариант от Atmel исключал возможность смены Мастера и Слэйва местами. И тут же получил по рукам. После передачи появлялось ложное прерывание Слэйва со статусом 0xA0 - РеСтарт. В принципе его можно проигнорировать в обработчике Слэйва, хотя это лишало возможности самому использовать такую возможность обмена. Причем, на осциллографе была видна стабильная иголка на полке СТОП в первой ее трети, там где Слэйв передавливает Мастера (я временно ввел резистор 200 Ом в линию SDA, чтобы видеть, кто именно давит линию). Вернулся к коду примера. Передача заработала нормально, пропали как ложное прерывание, так и сам пичок. Так что это не просто такой стиль программирования, а необходимость, вызванная особенностью исполнения TWI у Atmega. Но, самый первый запрос на обмен игнорировался. Пришлось вставить в код функции tw_Send() сначала разрешение IRQ, а спустя какое-то время, запуск TWI. Теперь проходят все запросы на передачу. Далее возникла проблема с приемом. Сам прием проходит нормально, ставится флаг завершения пачки, но (куда же без него), стабильно, примерно через 100 мкс после конца приема, возникает ложное прерывание со статусом 0х00 - "Сбой шины". На осциллографе никакой иголки в этом месте не вижу. (Хотя не факт, что ее там нет. У меня Tektronix TDS 1002, и я уже встречался с ситуацией, когда иголка есть, вызывает прерывание, а цифровой осцилл ее не видит). Как временное решение, ставил ошибку и, в основном цикле, переинициировал TWI. Но ведь это не дело!. Очень долго искал проблему, пока не вышел на флаг TWSTO. В примере 312, при приеме, он использовался для сообщения Слэйву, что принята вся пачка и пора освободить шину. А при передаче он отсутствовал. Попробовал вставить в конце передачи. Пропало ложное прерывание, зато Слэйв перестал отпускать шину. Когда искал возможное решение на разных форумах (кстати, почему-то моя проблема нигде не всплывала), мелькнуло сообщение, что какой-то из STM будет нормально работать по TWI только тогда, когда один из его сигналов, после его установки, сбросить вручную через определенное время. Я попробовал вариант, когда при передаче Слэйвом последнего байта ставится бит TWSTO, а спустя 20 мкс снимается. И о чудо, все заработало как надо, но времени убил воз и маленьку тележку. Странно, что не вижу сообщений о подобной проблеме с приемом по IRQ. Пример 312/315 упоминается часто, связь 2-х mega16 тоже. Или в моем случае так планиды сошлись? Может что-то с конкретной партией МК? Непонятки. Далее приведена нарезка кода для Мастера и Слэйва. Пишу на IAR EW. Отлаживаю под AVRStudio 4.18 + AVR JTAG USB. Здесь приведена нарезка кода для Мастера. twi_master.txt Здесь приведена нарезка кода для Слэйва. twi_slave.txt
  3. To RicLab Скорее всего, Вы имеете в виду местный FTP, который модерирует, в том числе, Xenia, она и упоминада этот FTP. Но он доступен только "своим", а чтоб в них попасть, если мне память не изменяет, нужно набрать 50 постов. Так что все новички пока отдыхают.
  4. To RicLab Не совсем понимаю вопрос. Если речь о документации по камню от STM, то все, что я сам надыбал, изложил в "Приложении от переводчика", раздел "2. Что стоит почитать". Если речь об , тогда я ничего не понимаю.
  5. To RicLab Это "стандартный" FTP обменник. Щелкаете ссылку, попадаете на Рапиду. Если в Вашем браузере разрешены скрипты, увидите обратный отсчет. По его завершению откроется ссылка для скачивания.
  6. Привет всем, кто заинтересовался моим переводом! У меня для вас две новости, и как всегда, одна - хорошая, а вторая... - кому как. 1. Я добавил перевод еще 4-х разделов: 6 - RCC (LD-HD), 11 - ADC, 17 - IWDG, 18 - WWDG 2. Я опять сменил формат, теперь на CHM. Что-то у меня не заладилось с PDF, точнее со связкой HTML->ODT->PDF. Если проходить всю связку, опять приходится править всю разметку при переходе HTML->ODT (это долго, документ уже не маленький) ,а если править прямо ODT, почему-то слетают все внутренние ссылки. Так что, промучившись несколько дней, я решил уйти к CHM. Конечно, это также потребовало время на изучение компиляции документа, и еще больше времени на раздрай единого файла на мелкие топики. Но зато теперь у меня не будет болеть голова ни за съехавшую разметку, ни за слетевшие ссылки. А главное достоинство электронного документа - полнотекстовый поиск, остается, да и боковая панель не хуже, чем у PDF. Скачать STM_DOC_RU.chm с rapidshare.ru (по правилам Рапиды, он будет храниться здесь 30 дней)
  7. To Brain13 А вот помощь принимается в любом виде. На мой взгляд возможны два варианта: 1. Вы знаете STM32 (или может Английский) лучше меня. Тогда наилучший вариант, это помощь с переводом тех мест, что мне оказались на по зубам. Бывает, что слова вроде все знакомые, но то, что получается в результате, мне самому непонятно. Такие места я обычно оставляю без перевода. Скорее всего, я не понимаю сути описываемого механизма и нужна подсказка в двух трех предложениях, или ссылка, где об этом механизме можно почитать, чтоб врубиться. Так же возможны места, где я думаю, что понимаю, а на самом деле это не так, и, как следствие, некорректный перевод. Это наиболее трудная и квалифицированная задача, и, если сможете оказать такую помощь, было бы здорово для всех, кто заинтересовался этим переводом. 2. Вы знаете STM32 и язык примерно на моем уровне. Тогда можно просто попытаться выполнить перевод ряда разделов RM (или PM). Оформление в любом виде (TXT, DOC, HTML, ODF), я бы потом добавил в свой документ оформив единый стиль. Здесь желательно не дублировать работу. У меня в ближних планах перевести АЦП, Оба Сторожевых Пса и что нибудь из Таймеров (пока не решил, какой именно раздел(ы)). Это то, что мне будет нужно для проекта. Все остальные разделы "свободны". Только, наверное, эти вопросы лучше обсуждать по EMail ([email protected])
  8. To ukpyr Из двух зол, как известно, выбирают меньшее. В первую очередь, я сам пользуюсь своим переводом. К билингве, особенно с цветовым выделением, быстро привыкаешь. А когда "чистый" русский, часто бывают ситуации, когда начинаешь сомневаться, сам дурак, или переводчик налажал. Приходится искать оригинал, в нем соответствующее место, и выяснять, кто есть Who. Чтобы убрать текст оригинала, нужна уверенность, что все Good. Сам я не могу дать такой гарантии. Желательно получить отмашку от какого-нибудь Гуру. Однако, уже сейчас почти 400 стр. (а я надеюсь перевести еще несколько разделов RM), это только прочитать и сравнить, уже не менее 12 часов. А еще нужна конструктивная критика. Кто же добровольно взвалит на себя такой труд? Так что, пока, поживем с таким вариантом. To Brain13 Ссылка не должна открываться. Это ZIP архив. (http://www.avtomaster.net/downloads/STM_DOC_RU.pdf.zip). В любом браузере должно появиться окно с выбором вариантов, где надо указать "Сохранить файл". А вот этой фразы: >> А можно как-нибудь помочь с переводом? я не понял. Если это "тонкий намек" на возможность поработать бесплатным переводчиком, то увольте. Я перевожу только для себя (и то начальство смотрит косо), и если это пригодилось кому-то еще, значит повезло. А для переводов на заказ есть профессионалы, это их хлеб.
  9. По желанию трудящихся слепил PDF файл. И даже панель навигации получилась. Этот вариант можно скачать здесь.
  10. To Xenia Я пока ни разу не пробовал оформлять документ в PDF (если не считать сохранения из ООО), и сейчас мне трудно оценить трудоемкость процесса конвертации из HTML. Но, если будет приличное окошко в работе, попробую учесть ваше пожелание. To Xenia В догонку Сейчас попробовал просто открыть HTM в ООО и сохранить в PDF. В принципе все работает, только разметку надо править, нарезка по страницам безобразная. На правку, в свободное время, может уйти несколько дней. Правда, мне не очень понятно желание поместить доку на FTP от Electronix. Он нужен, в первую очередь, для новичков, а им, как и мне, до "своих" еще постить и постить. Да и правиться и дополняться он, скорее всего, будет неоднократно, а в коллекцию, наверное, стоит помещать устоявшуюся версию. Кстати, увидел, что последней правкой нарушил разметку файла и, начиная с содержания для "Reference manual", съехало цветовое выделение. Оперативно подправил архив. Последний файл тот, что имеет время 14:55 от 1.09.2011.
  11. Вниманию новичков в изучении МК семейства STM32F10xxx. Я и сам нахожусь в процессе изучения ARM контролеров, а точнее stm32f107. Есть напряг с английским, перевожу неплохо, но очень медленно, поэтому документирую сей процесс, чтобы в дальнейшем было полегче. За лето кое чего попереводил: - Частичный перевод файла "STM32F10xxx Cortex-M3 programming manual.PDF" (кроме описания инструкций) - Частичный перевод файла "STM32F105_107_Reference manual.pdf" (10 разделов из 30) - Полный перевод файла "Errata_stm32f107.pdf" Если кому интересно, архив лежит здесь.
  12. IAR + CoLinkEx + STM32F107.

    Привет всем форумчанам. Я здесь новенький. Начал недавно осваивать Cortex M3, а точнее STM32F107VC, и наверное, как и многие другие, столкнулся с отсутствием четких инструкций по начальной настройке проекта и инициализации камня, хотя этот процес показался мне далеко не тривиальным. Перерыл кучу документации и море топиков, в результате, более или менее разобрался, и хочу, по горячим следам, предложить результаты своего поиска другим, может это кому то сэкономит кучу времени. Итак, у меня есть стартовый набор TE-STM32F107 (около 3000 р.) и отладчик SW RDI CoLinkEx (около 1000 р.). При плате есть CD, с программой "IAR Embedded Workbench for ARM, v. 5.50, 32K Kickstart Edition". Для разгона пойдет, главное с самим камнем разобраться. Для CoLinkEx скачал с сайта CooCox драйвер "ColinkExUsbDriver-1.1.0.exe" и плагин для IAR "CoIARPlugin-1.2.0.exe". Поставил все это. Для отладчика сделал переходник IDC10->IDC20. При этом возникли непонятки с выводом TRST. Методом "научного тыка" выяснил, что его надо оставить в воздухе. STM для работы со своими камнями предлагает на своем сайте библиотеку stm32f10x_stdperiph_lib. Ее можно использовать с драйверами периферии или без, работая только с регистрами. Но она все равно нужна. Насчет целесообразности использования библиотечных драйверов часто возникают споры. Я, на основе работы с Tms320vc55xx и библиотеки CSL, пришел к такому выводу. Пока только осваиваешь новую платформу, и голова и так пухнет от моря новой информации, использовать подобные библиотеки можно и нужно. В дальнейшем, по мере накопления опыта, накапливается и раздражение по поводу явных ошибок, непонятных глюков и оверкода (из за претензии на универсальность). В следствии чего наступает частичный или полный отказ от библиотеки. И это нормально. Так как в ARM я, пока, полный чайник, буду работать с библиотекой. 1. На базе ряда примеров, типа IOToggle, создаю свой файл "main.c" (просто выкинул лишнее и использовал свой вывод PC6, на котором у меня висит светодиод). // ************************************************************************* #include "stm32f10x.h" // регистры и биты камня от STM void myDelay(__IO uint32_t nCount); GPIO_InitTypeDef T_ini_PORTC; int main(void) { #ifndef CFG_SIMUL SystemInit(); #endif // Разрешение тактирования модуля GPIOC (типа, разбудить) RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); // конфигурируем PC6 как Push-Pull Out T_ini_PORTC.GPIO_Pin = GPIO_Pin_6; T_ini_PORTC.GPIO_Speed = GPIO_Speed_50MHz; T_ini_PORTC.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOC, &T_ini_PORTC); while (1) { myDelay(3*1000*500); // 28 tik, при 72МГ ~3*N mks -> ~500 ms GPIO_WriteBit(GPIOC, GPIO_Pin_6, Bit_SET); myDelay(3*1000*500); GPIO_WriteBit(GPIOC, GPIO_Pin_6, Bit_RESET); } } // ------------------------------------------------------------------------- void myDelay(__IO uint32_t nCount) { for (; nCount != 0; nCount--); } // ************************************************************************* 2. Создаю папку study3 для своего проекта и копирую туда ряд файлов. При этом создаю следующую файловую структуру. study3 -+ +- main.c +- Proj -+- stm32f10x_conf.h (из ~\Project\Template) +- stm32f10x_flash.icf (из ~\Project\Template\EWARMv5) +- system_stm32f10x.c (из ~\Libraries\CMSIS\Core\CM3) Здесь и далее символ '~' означает путь к библиотеке stm32f10x_stdperiph_lib. Конечно, копируются только те файлы библиотеки, что, возможно, будут модифицироваться в ходе работы над проектом. 3. Создаю в папке study3\Proj новый Empty проект. В нем уже есть две конфигурации: Debug и Release. Создаю группу STM_LIB. Включаю в дерево проекта следующие файлы: main.c STM_LIB\startup_stm32f10x_cl.s (из ~\Libraries\CMSIS\Core\CM3\startup\iar) STM_LIB\system_stm32f10x.c (из study3\Proj) STM_LIB\stm32f10x_gpio.c (из ~\Libraries\STM32F10x_StdPeriph_Driver\src) STM_LIB\stm32f10x_rcc.c (то же) Сохраняю Workspace как Proj\study3.eww. Теперь надо настроить проект. 4. В текущей конфигурации Debug задаю следующие опции: 1. В General/Target задаю свой Device - STM32F107xC 2. В General/Library... стоит Си библиотека Normal. Устраивает. 3. В Compiler/Optimizations стоит Low, я, для учебы, выбираю None. 4. Убеждаюсь, что в Compiler/Output стоит галочка "Genegate debug info" 5. В Compiler/List ставлю галочку "Output list file" и обе сопутствующие опции, на этапе учебы информации надо побольше. 6. В Compiler/Preprocessor в поле "Additional include" добавляю пути к включаемым файлам .\.. (это к файлам папки study3) ~\Libraries\CMSIS\Core\CM3 ~\Libraries\STM32F10x_StdPeriph_Driver\inc ~\Project\Template 7. Там же, в поле "Defined symbols" добавляю: USE_STDPERIPH_DRIVER (не надо, если работать через регистры) STM32F10X_CL (правильно выбрать свое семейство!) 8. Убеждаюсь, что в Assembler/Output стоит галочку "Genegate debug info" 9. В Linker/Config ставлю галочку "Overide default" и указываю местонохождение своей копии icf файла. 10. В Linker/List ставлю галочку "Genegate linker map file" 11. Согласно описанию плагина CoLinkEx к IAR, в Debugger/Setup/Driver выбираю протокол отладки RDI, затем в Debugger/RDI указываю путь к файлу CoIARPlugin\CoRDI.dll 12. в Debugger/Download ставлю галочки "Verify download", "Use flash loader" и "Overide default board file" и выбираю подходящий скрипт загрузчика - "FlashSTM32F10xxC.board" (Пробовал "FlashSTM32F105xC.board" - полет тоже нормальный). 13. Жму OK, чтобы сохранить изменения конфигурации. 5. Удаляю конфигурацию Release и создаю ее вновь на базе Debug. .4. В Compiler/Output снимаю галочку "Genegate debug info" .8. В Assembler/Output снимаю галочку "Genegate debug info" .11. В Debugger/Setup выбираю Simulator, хотя подозреваю, что все равно, что выбирать, так как нет отладочной информации. 6. Создаю новую конфигурацию Simul на базе Debug .7. В Compiler/Preprocessor в поле "Defined symbols" добавляю: CFG_SIMUL .11. В Debugger/Setup выбираю отладку через Simulator. Итак, проект создан и сконфигурирован. Теперь надо правильно иницииализировать ядро и периферию своего камня. Долго не мог понять, как правильно использовать SystemInit(). В ряде примеров, в начале main(), стоит комментарий (вот его перевод): /* На этот момент тактовый МК уже сконфигурирован, это сделано функцией SystemInit(), которая вызывается из файла startup_stm32f10x_xx.s перед заходом в функцию main(). Чтобы изменить уставки по умолчанию см. файл system_stm32f10x.c */ А в других примерах есть явный вызов ее, как первой функции в main(). Перекопав кучу примеров, пришел к выводу: примечание относится к примерам из пакетов, типа stm32vldiscovery_package, где разработчик Evalution Board модифицировал файлы "startup_stm32f10x_xx.s" и файл "system_stm32f10x.c". А если брать библиотеку прямо от STM (по крайней мере в версии 3.1.0), то требуется прямой вызов SystemInit(). При этом, в конфигурации Simul нас ждет засада: так как мы не получим бита готовности RCC_CR_HSERDY, то попадаем в бесконечный цикл. Чтобы избежать этого, надо либо модифицировать файл, убрав этот цикл (если нужно пройтись по нему под отладчиком), либо использовать символ CFG_SIMUL для условной компиляции функции (см. мой main()). Точка входа в библиотеку - "stm32f10x.h" (из Libraries\CMSIS\Core\CM3). По умолчанию файл настроен на семейство STM32F10X_CL. Для смены семейства достаточно изменить символ в опциях проекта. Файл "system_stm32f10x.c" по умолчанию настроен на частоту 72 МГц при кварце 25 МГц. А как это? Если в наличии только умножитель?. Копаю код и документацию. Похоже документ "STM32F105_107_Reference manual.pdf" делался методом Copy/Paste. Иначе, как объяснить, что регистры, специфичные для CL (а весь документ о камнях этой линии) спрятаны в отдельной 7 главе, где есть регистр CFGR2, который уже содержит биты делителя. А нигде, в общих обзорах по Cortrex, это не звучало. Вопрос снят. В файле "stm32f10x_conf.h" выбираю периферию, пока только RCC и GPIO. Компилирую, линкую, дебажу, полет нормальный. Ну вот. Проект по этой инструкции создан. Плата лежит на столе и мигает диодом. Идет как симуляция, так и пошаговая отладка с помощью CoLinkEx. Пробовал создавать BIN файл командой: ielftool.exe --bin Release.out Release.bin и грузить его по USART с помощью программы "Flash Loader Demonstrator", скачанной с STM сайта. Все дышит. Теперь можно двигаться дальше. Допускаю, что в силу, пока, низкой квалификации, где то допустил ляп, который сейчас не мешает, но позже может выйти боком. Так что, если кто из местных Гуру обнаружит такое, прошу ткнуть носом, буду только благодарен.
  13. Блин, помощи так и не дождался, неужели никто не юзал эту утилиту? Или вопрос показался некорректным? В общем разобрался сам, я не там рыл. Если вдруг у кого возникнет подобный вопрос, то искать в Help'ах дизайнера бесполезно, надо читать AppNote 1115 и главу 10 руководства FX2LP_TRM. Жаль только времени много угробил, и что обидно, нужен это дизайнер, скорее всего, один раз в жизни, сгенерил корректный файл и забыл навсегда.
  14. Начал разбираться с cy7c68013. Нужен интерфейс с HPI от VC5509A. Возникла проблема с "GPIF Designer". Не могу понять по документации, как правильно задать момент захвата данных при чтении и момент выставления данных при записи. По уму, надо бы указать режим шины данных (In/Out) и момент захвата/выставления данных. Активная точка позволяет менять два свойства: Active vs Inactive и Same vs Next. Я предположил было, что первое свойство эквивалентно Out/In, а задание свойства Next соответствует точке захвата в режиме Inactive и точке выставления данных в режиме Active. Однако просмотр примеров, установленных при инсталляции Designer не стыкуется с данной версией. Кто знаком с этой утилитой, поясните на пальцах или дайте путную ссылочку.
×
×
  • Создать...