
Что вообще за регистры CoreDebug_DEMCR_TRCENA_Msk, DWT_CTRL_CYCCNTENA_Msk, DWT ? В даташите не нашел инфы.

Потому что универсального решения в данном случае не существует: кому-то нравится в теле main проверять счетчик времени, а потом запускать нужную процедуру, а кто-то делает все на конечных автоматах (и по сути внутри обработки состояния автомата в состоянии PAUSE выполняется та же самая процедура). Для пущей точности можно паузу таймером делать: по прерыванию при окончании счета выставляем флаг, а далее - те же самые процедуры проверки.201bazza писал(а):почему до сих пор еще никто не озаботился написать нормальный рабочий код для милли - или секундных задержек?
Код: Выделить всё
DWT_CYCCNT = 0; Код: Выделить всё
#include "stm32f10x.h"
extern uint32_t SystemCoreClock;
static uint32_t Delay_ms;
void DWT_Delay_ms(uint32_t ms)
{
uint32_t Count = DWT->CYCCNT;
ms = ms * Delay_ms;
while((DWT->CYCCNT - Count) < ms);
}
int main(void)
{
SystemCoreClockUpdate(); // Текущая тактовая частота.
Delay_ms = SystemCoreClock / 1000;
RCC-> APB2ENR |= RCC_APB2ENR_IOPCEN;
GPIOC->CRH &= ~GPIO_CRH_CNF13;
GPIOC->CRH |= GPIO_CRH_MODE13;
CoreDebug->DEMCR |= CoreDebug_DEMCR_TRCENA_Msk;
DWT->CTRL |= DWT_CTRL_CYCCNTENA_Msk;
while(1)
{
GPIOC->ODR ^= GPIO_ODR_ODR13;
DWT_Delay_ms(500);
}
}Кто вас учил писать исполняемый код в заголовочных файлах и к тому же не подключать другие заголовочные файлы где находятся объявления регистров и их битов?201bazza писал(а):В чем может быть дело?
Это из ядра ARM и не регистры, а их биты.201bazza писал(а):Что вообще за регистры CoreDebug_DEMCR_TRCENA_Msk, DWT_CTRL_CYCCNTENA_Msk, DWT ? В даташите не нашел инфы.