to post messages and comments.

OpenOCD прекрасно умеет обращаться с stm32 через stlink.
Прошить main.bin, проверить и сбросить МК:
openocd -f "interface/stlink-v2.cfg" -f "target/stm32f1x_stlink.cfg" -c "program main.bin verify reset"
Остановить МК:
openocd -f "interface/stlink-v2.cfg" -f "target/stm32f1x_stlink.cfg" -c "init" -c "reset halt" -c "exit"
Запустить (сбросить) МК:
openocd -f "interface/stlink-v2.cfg" -f "target/stm32f1x_stlink.cfg" -c "init" -c "reset run" -c "exit"
З.Ы.: Если не добавить -c "init" будет ругаться на неизвестную команду "reset".
З.Ы.Ы.: Если не добавить -c "exit" то останется в ожидании коннекта GDB.
З.Ы.Ы.Ы.: GDB нужно коннектить на порт 3333.

ёбаное колдовство
если прошивать флешу под дебаггером, всё норм прошивается
если без дебаггера, то во время прошивки срабатывает системный таймер и всё идёт пиздой
хотя по идее BASEPRI выставлен в ноль и дебаггер это подтверждает

Кароч таки HFSR = FORCED, CFSR = BFARVALID | PRECISERR, BFAR = 1ffff7e8, VTOR = 0x8000000, выковыренный из стека PC показывает на после-`cpsie i`, в векторах никакого 1ffff7e8 нет; ШТО // не понимаю, как прерывание может хотеть попасть мимо памяти, не залезая в его обработчик.

STM32 CubeMX — офигенно крутое ПО, генерит проекты для используемого мной EWARM.

Однако, собака такая, неправильно — добавляет в сборку один лишний файл и не добавляет один нужный. Причём это не исправляется просто так, в итоге самое быстрое решение — после генерации перенести содержимое нужного файла в ненужный, благо название не роялит.

Хотел в STM зарепортить это, зашёл в онлайн саппорт, а оно мне такое:
Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.
Please contact the server administrator, [no address given] and inform them of the time the error occurred, and anything you might have done that may have caused the error.
More information about this error may be available in the server error log.

Бля заливаю значит чибиось с примером-блинкером в stm32f407, после чего он не блинкает и недоступен по stlink, пока не ребутнёшь по питанию с зажатым BOOT0 шоб в бутлодер вылез.

не понимаю. В прошлый раз дергал 1 wire через usart и всё работало. Сейчас написал на управлении одним GPIO пином. Проверил, что напряжение, как положено, тянется вверх-вниз, проверил правильность настройки таймера (не до конца уверен). Теперь reset отрабатывает нормально, а команды вроде READ ROM 1wire устройства не понимают и ничего не отдают.

Вчера наконец-то забедил камеру и научился конфигурить её и получать из неё данные.
Камеру сконфигурил как QVGA (320х240), концигурится она через I2C протокол, который оказывается очень глючно работает на STM32F1xx серии. С этим протоколом я провозился 2 викенда, стабильно работать так и не удалось заставить. Короче забил на аппаратную реализацию I2C и написал свою программную, написал за пару часов. Вот и спрашивается, нафига парился. Далее была проблема достать данные из камеры, т.к. пиксели бегут очень быстро. На выходе у нас 8битная шина, камера выдаёт сигнал в формате RGB 565, т.е. по 2 байта на пиксель. Тактирую её на 32 МГц. Получить сигнал удалось стабильно после детального изучения ассемблера arm cortex m3 и подсчёта сколько тактов занимает каждая скомпилированная ассемблеровская инструкция. При уменьшении выходной тактовой частоты в 16 раз — изображение удалось получать стабильно! Вин!
Результат можно посмотреть тут: youtu.be
Далее в планах подключение радио модуля и тестирование уже прототипа.

#define RMII_MODE
#define PHY_ADDRESS 0 //3
#define PHY_MICR 0x1B / MII Interrupt Control Register /
#define PHY_MICR_INT_EN ((uint16_t)(1<<13)) / PHY Enable interrupts /
#define PHY_MICR_INT_OE ((uint16_t)(0)) / PHY Enable output interrupt events /
#define PHY_MISR 0x1B / MII Interrupt Status and Misc. Control Register /
#define PHY_MISR_LINK_INT_EN ((uint16_t)((1<<8)|(1<<10))) / Enable Interrupt on change of link status /
#define PHY_LINK_STATUS ((uint16_t)(1<<0)) / PHY link status interrupt mask /
#define PHY_SR ((uint16_t)0x1e)
#define PHY_SPEED_STATUS ((uint16_t)0x0001)
#define PHY_DUPLEX_STATUS ((uint16_t)0x0004)

ПРИШЛО ВРЕМЯ ПЕРЕСОБИРАТЬ ГЦЦ
ГЦЦ САМ НЕ ПЕРЕСОБЕРЕТСЯ
ПЕРЕСОБЕРИ ЕГО, ПЕРЕСОБЕРИ ЕГО ЕЩЕ РАЗ
ЗАЧЕМ МНЕ НУЖЕН KEIL, У МЕНЯ НЕТ ВРЕМЕНИ, ЧТОБЫ ЕБАТЬСЯ С НИМ
ЛУЧШЕ ЕЩЕ РАЗ ПЕРЕСОБРАТЬ ЛИНАРО-ГЦЦ
Я ДЕЛАЮ ГИТ КЛОН 3 РАЗА В ДЕНЬ
КАЖДЫЙ КЛОН ЗАНИМАЕТ 20 МИНУТ
Я УСПЕШЕН И ПОЭТОМУ ЦЕЛЫЙ ДЕНЬ ЗАПУСКАЮ ST-LINK
А ПОСЛЕ ЭТОГО ПЕРЕКОМПИЛИРУЮ ГЦЦ
ТУПЫЕ ПРОГРАММИСТЫ ОДЕРЖИМЫ ПРОГРАММИРОВАНИЕМ ПОД АРМ
А Я СВОБОДНЫЙ ОТ ЗАДРОТСТВА ЧЕЛОВЕК
GIT CLONE OPENOCD LINARO GCC
ST-LINK UDEV USB ARM-NONE-EABI
ЛУЧШЕ Я ЕЩЕ РАЗ ПЕРЕКОМПИЛИРУЮ ГЦЦ
И УСТАНОВЛЮ СВЕЖИЙ ПАТЧЕННЫЙ OPENOCD
Я НЕ ПЕРЕКОМПИЛИРОВАЛ ГЦЦ НЕДЕЛЮ
ПОЙДУ ПЕРЕСОБЕРУ
В ГЦЦ ВСЕ ПРОСТО И ПОНЯТНО
gtype-desc.c:8834:18: error ЭТО ЖЕ ОЧЕВИДНО КАК ЭТО РЕШИТЬ
ПРИШЛО ВРЕМЯ ПЕРЕКОМПИЛИРОВАТЬ ГЦЦ
КОКОКОКОКОКОКОКОКО
ARM-NONE-EABI GCC GDB TARGET REMOTE
КОКОКОКОКОКОКОКОКО

ch> info
Kernel: 2.5.1unstable
Compiler: GCC 4.6.2 20120613 (release) [ARM/embedded-4_6-branch revision 188521]
Architecture: ARMv7-M
Core Variant: Cortex-M3
Port Info: Advanced kernel mode
Platform: STM32F10x Performance Line eXtra Density
Board: SE LiveView MN800
Build time: Dec 2 2012 — 20:41:31
ch> mem
core free memory : 7328 bytes
heap fragments : 0
heap free total : 0 bytes
ch>

Вот есть у меня, допустим, такой символ:
080003cc g F .text 00000002 handler_default
Еще есть таблица прерываний — секция объектника .interrupt_vector, которая соответственно пихается потом линкером куда надо.
Я беры этот символ и пихаю его в таблицу прерываний, пофиг как — хоть сишным массивом с аттрибутом section, хоть через .word в ассемблерном стартапе, пофиг. Делаю objdump и обнаруживаю, что в бинарник попал адрес на байт больше — 0x080003cd (cd 03 00 08, если учесть эндианнесс). Оно работает, конечно — арм, доступ к памяти выровненный на четыре байта, все дела, но WTF?
[

*blackmagicprobe *hack *awesomeness
Black Magic Probe is a sophisticated JTAG and SWD adapter supporting
flashing and debugging some Cortex-M3 microcontrollers, in particular
the STM32 family. blacksphere.co.nz

It integrates a GDB server and exposes it over a standard ACM
channel. Just plug it in and connect with gdb, no extra software or
drivers needed.

If you want to try it for cheap, you can reflash any ST-Link with a
version from github.com built with "make
PROBE_HOST=stlink" by using another SWD-capable programmer (desolder
the "DEFAULT" bridges, solder "PRG-32", use CN3 for flashing).

But if you want to get the full functionality (including
DFU-upgradeable probe firmware, an additional auxilary UART, full JTAG
support and experimental SWO), read on about more hardware hacking in
the follow-up post.