Моргаем светодиодом за счет прерываний таймера.
Оставляем прежний код программы и вносим изменения:
#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);
}
}