STM32CubeIDE (вопросы и ответы)

мой английский не настолько хорош, но я понял, что читать можно только регистр:
During this time the device will ignore further instructions except for the Read Status Register
and Erase/Program Suspend instruction (see tW, tPP, tSE, tBE, and tCE in AC Characteristics).

BUSY — это бит только для чтения в регистре состояния (S0). Он устанавливается в 1, когда устройство выполняет одну из следующих операций: Page Program, Quad Page Program, Sector Erase, Block Erase, Chip Erase, Write Status Register или Erase/Program Security Register.

Пока выполняется одна из этих операций, устройство игнорирует все остальные команды, кроме Read Status Register и Erase/Program Suspend (см. времена tW, tPP, tSE, tBE и tCE в разделе AC Characteristics).

Когда операция программирования, стирания или записи регистра состояния/безопасности завершается, бит BUSY сбрасывается в 0, что означает, что устройство готово принимать новые команды.

я это понимаю в буквальном смысле, а что подразумевается в даташите у меня хрустального шара нет, но можно попробовать прочитать данные )

PS в смысле команда чтения это остальная команда или нет?

PPS если бы было остальные из перечисленного списка, то вопроса не возникало… с английским у меня очень плохо, соглашусь…

да, конечно.

При чем тут это?

Конечно следующая операция делается исключительно после окончания предыдущей.

Никто и не запускает чтение во время записи.

Не пойму что я делаю не так… “Не работает”…

“Включаю” привычный мне формат и ничего не происходит…

Почему? Раньше работало. Я что-то забыл/пропустил?

Ничего не понимаю…
Раньше (на старом ПК) работало общее форматирование по керниган/риччи, а сейчас только если я свой код пишу, при генерации изменений периферии - всё по старому… ((

Прошу уточнить - верно ли я рассуждаю?

ШИМ

Допустим я хочу иметь ШИМ с частотой 1кГц и управлять им с разрядностью в 10 бит. Тогда результирующая частота будет = 1кГц * 10бит = 1кГц * 1024 = 1.024МГц, то есть предделитель при тактовой частоте в 72МГц должен быть = 70,3125, но можно использовать только целые числа, поэтому предделитель = 70, счет будет = 1028.

Это верный расчет?

@xDriver , огромное спасибо!

Лучше взять предделитель 72, частота тиков будет ровно 1Мгц, а а результате получим классический Ардуиновский ШИМ частотой 976Гц

обновилась линейка продуктов от ST

2 лайка

Ты - маньяк! :smiley:
Но в хорошем смысле этого слова и спасибо тебе огромное!!! :slight_smile:

А они, продукты от ST, вроде как сами умеют обновляцца. Или я в очередной раз ересь нацарапал на камне?

в России, без спец средств, не умеют.

1 лайк

Средствами HAL минимальная задержка = 1 мс.
А как сделать микросекундные задержки, как тут?

Я думал свой Делей написать нужно, но… Что-то с расчетами у меня не так? 72МГц тактовой это равно 13.89 мкс за такт, правильно?

Чтобы перевести частоту из мегагерц (МГц) в микросекунды (мкс), используйте обратную зависимость: Период (в мкс) = 1000 / Частота (в МГц) , поскольку 1 МГц = 1 миллион герц (циклов в секунду), а микросекунда — миллионная доля секунды.

Ну и как же тогда 5мкс сделать?))
Тем более на авр тактовая ещё ниже…

Брехло эти ваши ии (нахрен его в поисковик встраивают?). 1 такт на 72МГц = 13.89 наносекунды (а не микро). Тогда delay на 5мкс будет если «крутануть» пустой цикл от 0 до 359 971. Так? Или как-то иначе можно?

В инете все есть, таймер есть, который на частоте мк работает

unsigned long micros(void) {
	return (M7_DWT_CYCCNT / divMicros);
}

// https://stackoverflow.com/questions/36378280/stm32-how-to-enable-dwt-cycle-counter
void h743initDWTmicros(void) {
	M7_DEMCR |= 0x01000000; // enable trace
	M7_ETR_LAR = 0xC5ACCE55; // Enable write access
    M7_DWT_CTRL |= DWT_CTRL_CYCCNTENA_Msk; // enable DWT cycle counter
    M7_DWT_CYCCNT = 0;
    divMicros = SystemCoreClock / 1000000UL;
}

void delay_us(unsigned long period_us) {
	unsigned long startTimer = micros();
	while ((micros() - startTimer) < period_us) {/*__NOP();*/};
}

ты же в ардуино пишешь, разве нет? delayMicroseconds() куда дел?

не-а
Во-первых с чего ты взял, что пустой цикл исполняется ровно один такт? - скорее всего больше
А во-вторых, если цикл и правда пустой, велика вероятность, что оптимизатор его просто выкинет.

Нет. В кубе. Вчера просто для теста кода ардуино иде запускал…