[uquote="Oxford",url="/forum/viewtopic.php?p=3904859#p3904859"]
Код: Выделить всё
GPIOB->CRL |= GPIO_CRL_MODE4_1; // PORTB.4 OUTPUT 2MHz
Кому тут не понятно что? Вы когда настраиваете комментарии пишите, чтобы знать что хотите и сами не забудете.[/uquote]1. Я не хочу помнить что значит в каждом конкретном чипе из всех что у меня в работе ничегонеговорящее GPIO_CRL_MODE4_1.
2. Я не хочу помнить есть ли там GPIO_CRL_MODE4_0 и GPIO_CRL_MODE4_2 и что значат они. А может там еще и CNF биты есть? Да ну на.
3. Я не хочу помнить начальное состояние GPIOB->CRL. Оно может отличаться от GPIOA->CRL и других. А не помня этого как можно тут |= применить?
[uquote="Oxford",url="/forum/viewtopic.php?p=3904859#p3904859"]Запоминать и не надо никому ни начинающим, ни профи есть мануал открываете на нужный микроконтроллер и настраиваете.[/uquote]Чтобы сконфигурировать на выход один пин лезть в RM?
И у меня для вас плохие новости.

Начальное состояние GPIOB->CRL равно 0x44444444. Ваша инструкция задала не PushPull 2 MHz, а OpenDrain режим. Ошибка в такой примитивной операции, как конфигурация одного пина. ЧТД!!!
[uquote="Oxford",url="/forum/viewtopic.php?p=3904859#p3904859"]Или тут нужен класс C++?

[/uquote]А почему нет? Я даже думать не буду что это за контроллер и напишу
Код: Выделить всё
PB_4::mode<PinMode::PushPull_LowSpeed<>>();
Компилятор всё сделает за меня. На F1 он, в отличии от вас, старательно зачистил ненужные биты
Код: Выделить всё
LDR.W R5,??main_0 ;; 0x40010c00
LDR R0,[R5, #+0]
BIC R0,R0,#0xF0000
ORR R0,R0,#0x20000
STR R0,[R5, #+0]
На mdr1986ve8
Код: Выделить всё
LDR.N R0,??DataTable1 ;; 0x40081010
MOVS R1,#+16
STR R1,[R0, #+0]
STR R1,[R0, #+40]
STR R1,[R0, #+68]
STR R1,[R0, #+52]
STR R1,[R0, #+60]
MOV R2,#+512
MOV R1,#+256
STR R1,[R0, #+72]
STR R2,[R0, #+80]
MOV R1,#+983040
STR R1,[R0, #+24]
И тут точно не будет ошибок, как у вас.
Добавлено after 49 minutes 11 seconds:
[uquote="Oxford",url="/forum/viewtopic.php?p=3904888#p3904888"]a5021 в данном случае не требуется. К тому же это отключает оптимизацию. Не всегда это нужно у регистров.[/uquote]У меня для вас вторая плохая новость за это утро.
Вот так правильно.
А вот так фигняс получилась
Спойлер
IAR, чуть похитрее даже поступил.Код: Выделить всё
*(volatile uint64_t *) GPIOA = 0xFFFFFFFF'00000000;
LDR.W R5,??main_0 ;; 0x40010800
MOVS R0,#+0
MOV R1,#-1
STRD R0,R1,[R5, #+0]
*(volatile uint64_t *) GPIOA = 0x00000000'FFFFFFFF;
MOVS R3,#+0
STRD R1,R3,[R5, #+0]
Добавлено after 10 minutes 41 second:
[uquote="a5021",url="/forum/viewtopic.php?p=3904853#p3904853"]Смотря как записать. Можно, например, так:[/uquote]Боюсь даже представить размер "портянки" для какого-нибудь 240-ногого F7. При том что у него и портов 11, и регистров конфигурации одного порта 7. Да помножить это на 16 пинов. На 16 AF просто забьём

Кстати, не для всех режимов нужно все регистры порта конфигурировать. Это как-то учтем в портянке?