Вот этот кусок кода выполняется за 82 мкс
Код: Выделить всё
int i;
GPIO_InitTypeDef KEY;
RCC_APB2PeriphClockCmd(KEYB_PORT_KEY_CMD, ENABLE);
for(i = 0; i < ROWS; i++){
KEY.GPIO_Mode = GPIO_Mode_Out_OD;
KEY.GPIO_Speed = GPIO_Speed_10MHz;
KEY.GPIO_Pin = row_pin[i];
GPIO_Init(row_port[i], &KEY);
GPIO_SetBits(row_port[i], row_pin[i]);
}
Код: Выделить всё
GPIOB->CRL |= (GPIO_CRL_MODE5_0 | GPIO_CRL_CNF5_0); // Pin 5 Output mode, Speed 10mHz, Open Drain
GPIOB->CRL |= (GPIO_CRL_MODE6_0 | GPIO_CRL_CNF6_0); // Pin 6 Output mode, Speed 10mHz, Open Drain
GPIOB->CRL |= (GPIO_CRL_MODE7_0 | GPIO_CRL_CNF7_0); // Pin 7 Output mode, Speed 10mHz, Open Drain
GPIOB->CRH |= (GPIO_CRH_MODE8_0 | GPIO_CRH_CNF8_0); // Pin 8 Output mode, Speed 10mHz, Open Drain
GPIOB->BSRR = (GPIO_BSRR_BS5 | GPIO_BSRR_BS6 | GPIO_BSRR_BS7 | GPIO_BSRR_BS8);
Вопрос. Зачем писать на std periph, если оно заметно тормозит дело. Я понимаю что счёт на микросекунды это ерунда, но хочется понять идеальные условия. Время замерял, включив отладку в Keil и шагая по коду построчно.


