Jump to content

Eddy_Em

Members
  • Posts

    151
  • Joined

  • Last visited

Reputation

44 Обычный

Информация

  • Город
    Нижний Архыз

Электроника

  • Стаж в электронике
    3-5 лет
  • Сфера радиоэлектроники
    микроконтроллеры
  • Оборудование
    Всякая китайщина в основном.

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

  1. Т.е. считается, что пользователи сего форума - дебилы безмозглые? Ну-ну… На "электрониксе" такой же мудачески-убогий движок, но теги работают! А вообще, я поражен просто: существует много приличных движков для форумов. Самый приятный - как на ЛОРе (linux.org.ru). Но такого отстойного говна, как на "электрониксе" и здесь я еще не встречал. Как будто бы самый рукожопый двоечник среди веб-писак его создавал!
  2. Нафиг мне эти кнопочки убогие? Это ж дикость просто!
  3. На линии-то появился высокий уровень? Осциллографом можно посмотреть, есть ли ACK от EEPROM'ки. Или добавить отладочный вывод в код. Ну и блокирующие while сменить на таймаут. Плюс более точно следовать алгоритму из мануала.
  4. Нельзя ничего полезного вырубить, если делать так: [code] GPIOB->CRL = (GPIOB->CRL & ~(GPIO_CRL_CNF6 | GPIO_CRL_CNF7)) | CRL(6, CNF_AFOD | MODE_NORMAL) | CRL(7, CNF_AFOD | MODE_NORMAL); [/code] Сначала сбрасываем то, что хотим изменить, потом изменяем. А если тупо делать |= , то в случае, когда эти ноги уже как-то были настроены, получим черт знает что! |= годится лишь для изменения группы битовых флагов, а в нашем случае флаги имеют ширину по 2 бита, нельзя. И лучше оформить макросами все. Вот, у меня так: [code] /************************* GPIO *************************/ /** CNF1: 0 - general output or input; 1 - alternate output or pullup/down input CNF0: 0 - push/pull, analog or pullup/down input MODE: 00 - input, 01 - 10MHz, 10 - 2MHz, 11 - 50MHz Pullup/down: ODR = 0 - pulldown, 1 - pullup GPIO_BSRR and BRR also works IDR - input, ODR - output (or pullups management), */ // MODE: #define MODE_INPUT 0 #define MODE_NORMAL 1 // 10MHz #define MODE_SLOW 2 // 2MHz #define MODE_FAST 3 // 50MHz // CNF: #define CNF_ANALOG (0 << 2) #define CNF_PPOUTPUT (0 << 2) #define CNF_FLINPUT (1 << 2) #define CNF_ODOUTPUT (1 << 2) #define CNF_PUDINPUT (2 << 2) #define CNF_AFPP (2 << 2) #define CNF_AFOD (3 << 2) #define CRL(pin, cnfmode) ((cnfmode) << (pin*4)) #define CRH(pin, cnfmode) ((cnfmode) << ((pin-8)*4)) [/code] А бесполезный SWD я сразу же отрубаю при старте МК.
  5. вот, где собака порылась! Ну нельзя же MAGICK писать, вот так будет понятней: [code] GPIOB->CRL = (GPIOB->CRL & ~(GPIO_CRL_CNF6 | GPIO_CRL_CNF7)) | CRL(6, CNF_AFOD | MODE_NORMAL) | CRL(7, CNF_AFOD | MODE_NORMAL); [/code] И да, там должно быть не |=, а строго = (мало ли, что вначале там было)! В общем, нужно писать GPIOB->CRL = 0xDD000000, например. А в вашем случае ноги настроены как тупые выходы, естественно, ничего не работает.
  6. @ilya_orel00 , нельзя тупо ожидать: может, событие вообще не произойдет? Все ожидания надо делать с таймаутом. И проверять ошибки. Хотя, по идее, такой простой код должен работать. Может, получатель не дает ACK? Что вообще на втором конце шины сидит?
  7. Я в случае чтения своих старых комментариев иной раз думаю: "да, сейчас я уже столько не выпью" ☺
  8. Для начала напишите элементарный код, который в цикле в суперлупе будет что-нибудь по I2C отправлять. Учтите все тонкости errata. [url=https://github.com/eddyem/stm32samples/blob/master/F1-nolib/I2Cscan/i2c.c#L120]Вот, например[/url] - работающий код. У STM32F103 I2C очень кривой: если какую-нибудь тонкость пропустить, ничего работать не будет.
  9. а) проприетарное дерьмо, б) работает только под мастдайкой. Зато есть уйма GPIO всяких разных. Конкретно в этом случае: три таймера, читающих энкодеры, три таймера, генерирующих CLK для шаговика, всякие GPIO для ~EN, DIR и т.п. Это невозможно "оптимизировать", если что. Дрыгать ногой, выдавать тестовые сообщения и т.п. Я вот USB отлаживал через USART1: сделал буфер пожирней, настроил его на 3Мбод и смотрел, что там у меня происходит, когда был затык с этими дурацкими регистрами (додумались же в один регистр пихать флаги с разной реакцией). Достаточно в прерывании таймера выставлять флаг, а в суперлупе выдавать код! Либо настроить выдачу по DMA, а таймер пусть инициирует передачу. Но так делать нельзя. Оно разве что в хеллоуворлде будет работать.
  10. Кайло-то для профессионала? Ну-ну... Повесить одновременно работающие CAN, USB, I2C и SPI на одни и те же ноги? Ну-ну.. Без понятия. Я никогда в жизни gdb не использовал. И как-то не вижу смысла в этом. Для отладки есть более удобные методы. Ну кто же в прерывание таймера запихивает жирнючую передачу данных по I2C?
  11. Ну, не знаю. Вот я набираю: [b]жирный[/b] - и фигвам! Или код хочу вставить - аналогично, когда пишу теги code и вставляю между ними кусок кода, ничего не работает! Вот пример. Вставляю код: [code] These are the packages that would be merged, in order: Calculating dependencies... done! [ebuild R ] sci-libs/libapogee-3.0.3179::eddy_overlay 0 KiB Total: 1 package (1 reinstall), Size of downloads: 0 KiB >>> Verifying ebuild manifests >>> Emerging (1 of 1) sci-libs/libapogee-3.0.3179::eddy_overlay >>> Installing (1 of 1) sci-libs/libapogee-3.0.3179::eddy_overlay >>> Jobs: 1 of 1 complete Load avg: 5.56, 5.36, 4.64 >>> Auto-cleaning packages... [/code] Это всегда работало, а теперь - нет!
  12. [code]RCC->APB2ENR |= RCC_APB2ENR_IOPCE;[/code] [url=https://github.com/eddyem/stm32samples/tree/master/F1-nolib/led_blink]Вот[/url] - простая мигалка.
  13. Вот, кстати, намедни на одну платку (уже частично помытую) допаивал разъемчики. Пользовался спиртоканифолью. Сейчас помыл в смеси спирта и бензина. Вся спиртоканифоль полностью отмылась, а долбаный глицериновый флюс, которым я паял мелкие многоножки, остался! После мойки стал прогревать феном плату, чтобы быстро просушить, так из-под многоножек вылез этот поганец!!! В общем, такую дрянь, похоже, нужно только в УЗ-ванне отмывать. Но без нее паять всякие LQFP нереально, к сожалению.
  14. Только что, редактируя сообщение, обнаружил, что тег url не работает! Обернул гиперссылку в тег, а ничего не вышло. [url=http://test.test]Тест[/url]. Проверю другие теги: [b]Жирный[/b], [i]курсив[/i], [s]зачеркнутый[/s], [code]for(int i = 0; i < 100; ++i){}[/code] [quote]Цитата[/quote] Вообще теги работать перестали! Это что за рукожопие такое???
  15. Тактирование порта же не включено! Что до программатора, лично я вообще предпочитаю на STM32F072 работать через DFU! Крайне удобно: ничего лишнего не нужно. А запускается режим DFU из прошивки. Дал в терминале МК команду "dfu", в соседней вкладке терминала запустил "make dfuboot" — вуаля! Только питание переключить после прошивки (т.к. dfu-util не умеет перезагружать МК). Зато не нужно лишних ног выбрасывать коту под хвост. [url=https://github.com/eddyem/stm32samples/tree/master/F0-nolib/3steppersLB]Вот здесь[/url], например, у меня только одна нога не используется — какой уж тут SWD (или тем паче JTAG)? А отладка этими страшными gdb — на любителя. Многие вещи - тот же USB и всякие другие рилтаймовые штуки, где задержки неприемлемы - отладить через JTAG или SWD невозможно. st-link применяю лишь для STM8, да в очень редких случаях с STM32F103.
×
×
  • Create New...