12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- /*
- * http://chipspace.ru/stm32-systick/
- */
- #include "stm32f10x.h"
- static __IO uint32_t TimingDelay;
- void Delay_ms(__IO uint32_t nTime);
- GPIO_InitTypeDef GPIO_InitStruct;
- int main()
- {
- /*Вызов функции конфигурации системного таймера SysTick.
- Эта функция находится в файле core_cm3.h и:
- --Задает источник тактирования системного таймера (по умолчанию это SYSCLK = 24 МГц,
- другой возможный вариант - SysTick тактируется от SYSCLK/8);
- --Задает уровень приоритета прерывания;
- --Сбрасывает флаг ожидания прерывания, если он выставлен;
- --Заносит в нужный регистр перезагружаемое значение для декрементирующего счетчика,
- которое вычисляется по формуле:
- Reload Value = SysTick Counter Clock (Hz) x Desired Time base (s),
- для базовой задержки длительностью 1 мс получим величину
- Reload Value = 24 000 000 Гц х 0,001 с = 24 000
- (Необходимо самостоятельно посчитать эту величину и вставить в качестве
- параметра при вызове функции);
- --Обнуляет счетчик
- --Запускает счет системного таймера*/
- SysTick_Config(24000);
- //Включаем тактирование порта GPIOC
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
- //Конфигурируем выводы, к которым подключены светодиоды платы
- GPIO_InitStruct.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9; //Выбираем выводы PC8, PC9
- GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; //Максимальная скорость работы
- GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP; //Выход Push-Pull
- GPIO_Init(GPIOC, &GPIO_InitStruct); //Заносим заданные настройки в регистры порта
- while(1)
- {
- GPIO_ResetBits(GPIOC, GPIO_Pin_9); //Гасим зеленый LED
- GPIO_SetBits(GPIOC, GPIO_Pin_8); //Зажигаем синий LED
- Delay_ms(1000); //Временная задержка на 1 с
- GPIO_ResetBits(GPIOC, GPIO_Pin_8); //Гасим синий LED
- GPIO_SetBits(GPIOC, GPIO_Pin_9); //Зажигаем зеленый LED
- Delay_ms(1000); //Временная задержка на 1 с
- }
- }
- //Функция временной задержки
- void Delay_ms(__IO uint32_t nTime)
- {
- TimingDelay = nTime;
- while(TimingDelay != 0);
- }
- void TimingDelay_Decrement(void)
- {
- if (TimingDelay != 0x00)
- {
- TimingDelay--;
- }
- }
- //Обработчик прерывания системного таймера
- void SysTick_Handler(void)
- {
- TimingDelay_Decrement();
- }
|