Перейти к содержимому

#5.3. Запускаем «blink» (StdPeriph + SysTick)

Моргаем светодиодом за счет прерываний таймера.

Оставляем прежний код программы и вносим изменения:

#include "stm32f10x.h"

uint16_t delay_count = 0;

void SysTick_Handler(void)//фун-ция вызыв. каждую 1 ms

{
		if (delay_count > 0)
		{
			delay_count--; //уменьшение delay_count если > 0
		}
}


void delay_ms(uint16_t delay_temp)
	
{
	delay_count = delay_temp;
	while(delay_count){}
}

int main(void)
{
		
	GPIO_InitTypeDef GPIO_Init_LED;
	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);//Включение тактирования на порту C
	
	SysTick_Config(SystemCoreClock/1000);//1ms
	//через какое кол-во тактов МК будут срабатывать прерывания
	//SystemCoreClock - сколько тактов МК за секунду
	
	GPIO_Init_LED.GPIO_Pin = GPIO_Pin_13;//выбор пина
	GPIO_Init_LED.GPIO_Mode = GPIO_Mode_Out_PP;//режим работы пуш пулл
	GPIO_Init_LED.GPIO_Speed = GPIO_Speed_2MHz;//скорость
	
	GPIO_Init(GPIOC, &GPIO_Init_LED);//инициализация порта
	
		
	while(1)
	{
		GPIO_SetBits(GPIOC, GPIO_Pin_13);//установка бита в 1 на порту 13
		delay_ms(500);
		GPIO_ResetBits(GPIOC, GPIO_Pin_13);//установка бита в 0 на порту 13
		delay_ms(500);
	}

}

Добавить комментарий