Точно, спасибо огромное

, верное замечание - #4.
У GPIOx->CRH подефолту стоит
Port configuration register high (GPIOx_CRH) (x=A..G)
Address offset: 0x04
Reset value: 0x4444 4444 <--- !!!! (0b....100100 -> Floating Input).
Поэтому, когда я ORил их с мне нужными настройками... Что-то там не то получалось...
Так, нет, не всё...
SPI2 теперь инициализируется так:
SPI2->CR1 = 0xDE;
SPI2->CR2 = 0x40;
И оно правильно работает.
Но, если выключить питание, а потом включить, то в SPI2->CR1 почему-то лежит 0x9A. До строки SPI2->CR1 = 0xDE; там 0x00, после - 0x9A. Смотрел через отладочный вывод через UART, потому что если пошагово выполнять программу через JTAG, то всё без ошибок. (Соответственно, ничего не работает.) Что это за такое?! Сразу после прошивки контроллера всё хорошо, до выключения питания...
Если оставить подключенным (в смысле, не выходить в KEIL из DEBUG MODE) отладчик и передернуть питание, то всё нормально. Если выйти и перезапустить, там почему-то 0x9A.
Проблема решилась. Добавил перед инициализацией SPI2 задержку в пару миллионов NOP'ов, теперь записывается то, что надо.
Сообщение отредактировал Григорий Ревзин - Mar 4 2012, 20:15