К1986ВЕ92FI функция Delay_часть1
volatile uint32_t systick_counter = 0; // Счётчик миллисекунд void STick_Init(void) { // 1. Устанавливаем значение перезагрузки // Для 1 мс при 8 МГц: 8000 - 1 = 7999 // Для 1 мс при 72 МГц: 72000 - 1 = 71999 SysTick-﹥LOAD = 72000 - 1; // При 8 МГц - 1 мс // SysTick-﹥LOAD = 72000 - 1; // При 72 МГц - 1 мс SysTick-﹥VAL = 0; // 3. Настраиваем SysTick: // - CLKSOURCE = 1 (источник HCLK - тактирование от процессора) // - TICKINT = 1 (разрешить прерывания) // - ENABLE = 1 (включить таймер) SysTick-﹥CTRL = (1UL ﹤﹤ 2) | // CLKSOURCE (бит 2) (1UL ﹤﹤ 1) | // TICKINT (бит 1) (1UL ﹤﹤ 0); // ENABLE (бит 0) } void SysTick_Handler(void) { // Увеличиваем глобальный счётчик на 1 (каждая мс) systick_counter++; } void Delay(uint32_t ms) { uint32_t start = systick_counter; while ((systick_counter - start) ﹤ ms) { } }
volatile uint32_t systick_counter = 0; // Счётчик миллисекунд void STick_Init(void) { // 1. Устанавливаем значение перезагрузки // Для 1 мс при 8 МГц: 8000 - 1 = 7999 // Для 1 мс при 72 МГц: 72000 - 1 = 71999 SysTick-﹥LOAD = 72000 - 1; // При 8 МГц - 1 мс // SysTick-﹥LOAD = 72000 - 1; // При 72 МГц - 1 мс SysTick-﹥VAL = 0; // 3. Настраиваем SysTick: // - CLKSOURCE = 1 (источник HCLK - тактирование от процессора) // - TICKINT = 1 (разрешить прерывания) // - ENABLE = 1 (включить таймер) SysTick-﹥CTRL = (1UL ﹤﹤ 2) | // CLKSOURCE (бит 2) (1UL ﹤﹤ 1) | // TICKINT (бит 1) (1UL ﹤﹤ 0); // ENABLE (бит 0) } void SysTick_Handler(void) { // Увеличиваем глобальный счётчик на 1 (каждая мс) systick_counter++; } void Delay(uint32_t ms) { uint32_t start = systick_counter; while ((systick_counter - start) ﹤ ms) { } }