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

vlad_new

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

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

  • Посещение

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


  1. Естественно. Внешний массив и обязан быть volatile, тем более что он используется в прерываниях. Ну так я и спрашивал как бы сделать так, чтоб в стандартные библиотеки передовать тип volatile без явного преобразования типа повсеместно. Может через какой нибудь typedef переопределить типы параметров в библиотеке. А может еще какие то другие есть решения.
  2. Не знал что так надо. Век живи век учись. Ща попробую.
  3. Да отступы почему то здесь не выходят, хотя в режиме редактирования я их вижу. А на счет глюков в программе: ну так она же работает если без оптимизатора или Buf_RS485 описать как vu8 ( volatile unsigned char ), но тогда в сотнях местах приходится вписывать явное преобразование типов. memcopy((char*)Buf_RS485,.... ) Updete: Да я в таких случиях смотрю код ассемблера. А о веревке: Так и есть другое устройство принимает пакет с ошибочной длинной.
  4. Уже подправил. Реальный код слишком длинный. К тому же похожие проблеммы с оптимизатором не редки. И как правило когда индекс =0, или он const. Иногда помагало обозвать переменную индекса массива как static. Но вот в этом куске бубны с танцами не помогли.
  5. Вообще то я уже давно свои платы делаю. Но когда то покупал плату в терреэлектронике и на ней баловался. Называлась она: TE-STM32F103RET6KIT. Описание регистров USB есть в даташите на STM32F103 на st.com, там же и описание библиотек. Ох и не завидую я Вам если Вы туда полезете. Но дело Ваше. Есть же куча готовых рабочих примеров, которые чуть подковырять, не в даваясь в физический уровень, и вполне можно использовать в своих целях. http://www.terraelectronica.ru/catalog_inf...amp;CODE=333824 Там и схема есть.
  6. Угу. Пометил. Вот эта имелась ввиду: Buf_RS485[0]=u-1;
  7. Вряд ли Вам помогут описание регистров USB. Там все гипер наворочино. Проси у кого нибудь любой примитивный рабочий проект с USB, залейте его и убедись, что железо работает. А потом уже будете с библиотеками ковыряться. В Keil-е таких куча есть. Конкретно Ваш проект, я когдато пробывал - все работало ( но под Keil-ом).
  8. Вот пример кода. Заполняем массив Buf_RS485 и отправляем его в UART. Первый байт в массиве определяет его длинну. Первые 2 строки после case00: копируют некие данные известной длинны. Поэтому в следующей строке эта длинна и записывается. Далее, если есть Cnt_sob, то туда еще кучка всего вписывается и другая длинна перезаписывается. Таким образом отправляется либо короткий, либо более длинный пакет. Так вот 3 строку оптимизатор игнорирует и пакет отправляется с неверной длинной! vu8 Buf_RS485[256]; // Глобальная void sw_get(void) { u32 i, j, k, u; switch(GetSet) { case 0x00: Pool=1; RX_RS485=1; memcpy((char*)Buf_RS485+1,Mac_mas_bcd,4); memcpy((char*)Buf_RS485+5,Mac_sl_bcd,4); u=9; Buf_RS485[0]=u-1; if(Cnt_sob) { j=EE_rd_byte(UK_WRS); if(j>=Cnt_sob) k=j-Cnt_sob; else k=KOL_BUF-(Cnt_sob-j); k=k*LEN_SOB+BAZA_S; i=0; EE_rd_nbyte(k,Buf_tmp,64); Buf_tmp[64]=0; k=strlen((char*)Buf_tmp); k=k-6; Buf_RS485[u++]=k|0x40; for(i=0; i<12; i=i+2,u++) Buf_RS485[u]=((Buf_tmp[i]-0x30)<<4)|((Buf_tmp[i+1]-0x30)&0xF); for(i=0; i<(k-6); i++) Buf_RS485[u++]=Buf_tmp[i+12]; Buf_RS485[0]=u-1; } SEND_RS485; return; ......... }
  9. Это всего лиш реакция на 1,5 кОм. Сам USB у тебя может вообще не работать. Так что до PID VID еще далеко.
  10. Как использовать переменные типа volatile и одновременно пользоваться стандартными библиотеками, где все сплошником char*. Приходится везде вписыать что то типа: volatile char Buf1[100], Buf2[100]; ..... memcopy((char*)Buf1,(char*)Buf2,20); ..... Если же Buf не будут volatile, то оптимизатор выбрасывает строки типа: Buf1[0]=7; Может как то можно переопределить в билиотеках char на volatile char, ну или еще как то справится с этими неудобствами?
  11. Кто нибудь мерил потребление VBAT с полностью выключенным STM32F1XX и без внешнего 32кГц кварца. По сути меня интересует, как долго не разрушится бекапная SRAM, если ее подпитывать от конденсатора, ионистора, ну или в крайнем случае, самой маленькой батарейкой. PS: В даташитах указан ток ~1мкА, но с включенным внутреннем RC осциллятором.
  12. Вот те ... Я же просил не делать выводов только по этому отчету и объяснил почему. Если Вас уж так это заело, то обратите внимание на разогрев изолирующего слоя в районе PA13 PA14 - это SWD и подключается туда родной ST-LINK. К то му же, ранее я уже писал, что это ни одна плата, а 5 разных. Совершенно с разными разводками и схемами. К тому же у меня не один проэкт, а десатки. И по вашему все это сделано не правильно. К тому же Вы так и не ответили почему на одних и тех же платах одни чипи работают, а другие ( с другой партии ) не программируются или выходят из строя немного позже. Конечно Ваше дело верить или нет но помоему Вы модератор - а это уже начинается флуд. :( Да по центру. Под чипом полный полигон земли, причем в обоих слоях. В некоторых платах имеются и длинные проводники, но под такими проводниками с другой стороны печати идет полигон земли. А на счет чувствительности к высокочастотным помехам - ну так с чего же все началось то? Ах да я предупредил народ, что бы окуратней были с выбором конденсаторов, что надо ставить HPO и тантал. Вот интересно с чего бы я это придумал ? Вы похоже считаете всех ламерами. Очень жаль. Тогда позвольте откланится :(
  13. А я и не писал, что 15 лет назад я STM ганял. Тогда это были камни с 51 ядром. Но проблеммы то те же. 51 ядро выдерживало отрицательное напряжение не более 2,2В, дальше кристал вис и грелся ( в то время этот эффект почему то называли теристорным.) А на деле просто народ не разобрался в проблемме. А вот к стате - твая схема действительно хороший пример. Ты прав только на половину. Тут ведь весь вопрос где именно соеденена земля конденсатора. Если конденсатор соеденен с полигоном земли под процессором ( ну ты понимаешь), то все нормалек. А вот если где то в удаленном месте от проца, то надо еще один резистор поставить после конденсатора и стараться поближе к лапке процессора. Дальше сработает ограничительный диод на лапе ( отрицательные диоды на всех лапах имеются ). Что касательно положительного "пичка" то с ADC входами тоже сработает диод, а вот на талирантных .. - вообще то я мерял возможности STM. Практика показала, что лапка спокойно держит 20В. Конечно это не совсем честно, но я не думаю, что можно так плохо развести землю, что на ней аж больше 20В пички будут. Хотя если амперы гнать через многочисленные переколки ... :)
  14. Ну это слишком стандартные грабли. Я на такие наступал лет этак 15 назад. ( Без обид пожайлуста.) Здесь проблемма крылась в программировании камня. Некоторые сразу не программировались, а некоторые Поработавши немного ( имеется ввиду, просто включили питание и пока не подключаем никаких двигателей, датчиков провадов и т.д.), неожиданно у камня поднималась температура где то до 60-70 градусов. При этом весь чип со всеми портами полностью работал! Некоторые чипы через несколько минут начинали грется, а некоторые через два три дня. Но при этом всеравно все работало. И еще раз повтарюсь - БЕЗ НАГРУЗКИ ! Ни каких токов ни по каким землям не протикали. К тому же вот тебе загадка. Одни и те же платы. Одни чипы накрываются, а чипы из другой партии нормально работают. И это не одна две платы, а сотня. А сейчас уже и тысяча работает. Почему же они тогда работают? Ты патаешся разобраться, найти причину в разводке, гнилой схеме и т. д. Не надо этого делать. Все это уже не один раз анализировалось инженерами из поддержки. Там то же не глупые люди седят. И пока они на 101% не убедятся, в том, что я не напортачил в проэкте - никто в ST ничего на экспертизу посылать не будет.
  15. Там не даташит. Там ссылка для меня на результаты экспертизы. Потом есть разные этапы ( как это выразится даже не знаю - "достучаться до правды" ). Экспертиза определяет только факт того что произошло с чипом, там никого не кого не обвиняет. Выводы на основании экспертизы делает уже служба поддержки, владея схемами, разводкой платы и много чего другого. Еще не забывайте, что я выложил только один конкретный результат экспертизы. Из этого точно нельзя делать какие либо выводы. Поэтому я и просил не обсуждать результат экспертизы. Там все сложнее, чем на первый взгляд кажется.
  16. Давай я выложу заключение. Там все написано и нарисовано. Но с одним условием: Я не буду здесь его обсуждать. Поймите меня правильно. Я уже столько наобсуждался, что опять все заново начинать уже просто нету сил. Файл прикрепил. 5998_final_report.pdf
  17. Ну я же уже писал. Повторюсь. Образцы были отправлены на экспертизу в ST. Там было сделоно послойное сканирование в рентгене и выдоно официальное заключение с приложенными фотографиями. На основании этого заключения нам и поминяли всю закупленную ранее партию. То что Вы не сталкнулись с такой ситуацией - Ваше счастье. А вот мне кровушке это изрядно попортило. Естественно, что перед эксертизой эксперты тщательно анализировали и мои схемы, разводку плат, эксплатационнные условия и т.д.
  18. Доверять-не доверять решать Вам. Что касается производственного брака, то это вообще не тема. Вы же верно написали, что "На фоне плохой пайки..." . И бльше ничего быть не может. Тагда эту тему надо вообще закрыть.
  19. В двух словах все не объяснить. Надо тогда целую статью писать по этому поводу и подробно расписывать что и как тестировалось. К тому же надо много фоток приложить. К примеру: как правильно и как не правильно разводить печатную плату. Почему нельзя ставить конденсаторы тип Y5R. Даже X7R не очень хорошо работают, хотя их рекомендует производитель. Ставить надо HPO. Ни в коем случае нельзя ставить электролит. Только тантал. Как оптимальней защитить лапки от внешних помех, статики и других неприятностей и т.д. К тому же некоторые уже должны были заметить, что лапка сброса не всегда срабатывает. Могу к этому добавить, что в таких ситуациях и сторожевые таймеры безполезны. Вероятность вывести из зависания STM32F1XX лапкой сброса или сторожевиком составляет 1:7. У проца есть очень слабые лапки ( очень чувствительные к помехам создаваемые эфиром ). Это лапки связанные с RTC и кварцевыми генераторами, а так же, как не странно, JTAG. Заставить лапки RTC меньше реагировать на помехи можно повесив на них ( те, что не используются ) конденсаторы пик этак 300. Что касается JTAG, то туда больше 50пФ ставить нельзя, а потому лучший способ, это подтянуть те лапки, которые идут к вашему jtag резисторами к питанию через 510 Ом. Еще один способ справится с лапками JTAG - это в вашей отлаженной программе вообще отключить JTAG. К стате уж точно нельзя оставлять не использованные лапки во float. Первой же командой всегда перевести все лапы на Pull-Down ( подтяжка вниз). Ну в софте то же подводные камешки встретились. К примеру программа должна всегда начинаться с задержки на 50 мс, далее должен стоять De_init, а уж потом Init. Забудте про то, что в даташите вам написали, что время сброса какие то там наносигунды. Т.е. оно может и так, только вот что они под этим имели ввиду? За это время ни кварц ни внутрение генераторы с умножителями уж точно не прекратят работу. А потому флаг готовности PLL просто вас обманет. На что это может повлиять? Ну на мигание светодиодом это точно не влияет. А вот если вы попробуете записать что нибудь ( из своей программы ) во Flash, а потом сделать програмный резет, ну или запустить из своей программы другую программу ( аля BOOT Loader) и после этого попробуете опять записать что либо во Flash, то процессор намертво повиснит. И ни какой внешний сброс или сторожевик не вуыведет кристалл из "клинча". Только отключение питания. А вот еще по поводу лапок. У тех лапок, которые ADC ( не толерантные 5В ) очень слабые диоды, те что на землю подключены. Именно их в основном и пробивает. Это даже в тех поддержке признали и рекомендуют ставить дополнительную защиту. PS: Ну вот. Не собирался писать статью, а получилось как всегда. :) Ну вкратце как то так. Много чего еще хотелось бы рассказать. В заключении могу обрадывать. Если соблюсти большую кучу всякой всячины, то STM32F1XX работает без сбоев, даже если в двух метрах от него работает сварка, а рядом трудятся станки с киловатными двигателями. Причем работает не один проц, а сразу 5 и на разных расстояниях друг от друга ( распределенная сеть устройств до 10 метров). К тому же эти устройства то же управляют двигателями с токами около 5А ( при старте до 20А ).
  20. Интересная тема. Я эти STM32 уже тысячами кушаю. Если коротко, то ситуация такая: Пока были поставки чипов из малазии и малты проблемм вообще не было. Как только хлынул поток из китая, то на некоторых партиях начались неприятности. Сейчас уже точно не помню номера партий, хотя можно поднять переписку с центром поддержки и офисом ST. Дошло до того, что чипы отправлялись на экспертизу и делалось послойное сканирование ( у меня и заключение экспертизы с фотками имеются ). Хотя небольшое кол-во китайских чипов, что у меня были, STM32F103CBT6 и STM32F101CBT6 риботали нормально. Как щас помню STM32F100C4T6 партия толи 46, толи 49 почти все либо не программировались сразу, либо выходили из строя через некоторое время. Нам их заменили на 105 партию. В этой партии из 1000 не завелись где то с десяток. Такая же неприятная партия была с STM32F103RET6. Поскольку на тот момент, на складах в Москве, не было ничего другого, то закупили STM32F103RET7 с расширенным температурным диапазоном. STM32F103RET7 - закупили штук 300 и все оказались рабочие. Я так думаю, что было бы еще интереснее тема надежности ( помехоустойчивости ) STM32F1XX. Здесь то же много чего повылезало в промышленных условиях. Хотя если обойти все подводные камни, то можно получить очень не плохой результат. Но эта уже другая тема :)
  21. Тут уже намек был, что надо ставить не 100, а 101 или 103 камень. Сотки KEIL в дебагере не поддерживает. Хотя STM32F1XXC4T6 любой не поддерживает. Так что всегда ставь STM32F103RET6 - этот точно везде заработает. Опять же "не поддерживает" - это не совсем верно, поскольку в окне view ( в режиме дебагера ) Sistem viewer появляется вся вся перефирия. Правда родные KEIL-овские гуда приятнее. Что касаемо запуска, то, таблица векторов устроена так: Первые 4 байта всегда являются адресом стека. Вторые 4 байта адресом запуска. То что ты видиш в 0 и в 08000000H одно и то же - так и должно быть. Область Flash "подставляется" в 0 адрес или подставляется загрузчик по COM1 (BOOT Loader). Собственно ты и сам уже догадался.
  22. Для диплома и радиолюбительства сойдет, а вот если потом не хочеш по объектам мотаться и по потолкам прыгать, то диоды с резюками ОБЯЗАТЕЛЬНО!
  23. Скачай программу Configuration Wizard 2. Она все что нужно за тебя сделает. И не забудь в самом начале выключить сторожевой таймер. Ну или сними галочку в Configuration Wizard 2.
×
×
  • Создать...