Yet another "Помигал светодиодом"


Сосиска с мигающей тинькой — Ваш К.О.

Бегущий огонь на STM32 Discovery

Раз уж модно стало делать мигалки, тогда продолжим на CooCox.
Описание функции в прикреплённом файле. Использовался материал we.easyelectronics.ru/STM32/rukovodstvo-k-bystromu-startu-po-rabote-s-periferiey-stm32f10x.html
Второй день владения stm32-discovery прошёл успешно, светодиоды замигали:-) теперь бы ещё дальше пойти… АЦП, LCD, энкодер блин.

#include <stm32f10x.h>
#include <stm32f10x_conf.h>

#include <stm32f10x_rcc.h>
#include <stm32f10x_gpio.h>

void Delay(volatile uint32_t nCount) {
	for (; nCount != 0; nCount--);
}

int main(void) {
	/* SystemInit() вызывается из startup_stm32f10x_md_vl.c */

	GPIO_InitTypeDef GPIO_InitStructure;

	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC , ENABLE);

	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init( GPIOC , &GPIO_InitStructure);

	GPIO_InitTypeDef GPIO_Init_In_Structure; //Настраиваем PortB0 на вход
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE );
	GPIO_Init_In_Structure.GPIO_Pin = GPIO_Pin_0;
	GPIO_Init_In_Structure.GPIO_Mode = GPIO_Mode_IPU;
	GPIO_Init_In_Structure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init( GPIOB,&GPIO_Init_In_Structure);

	int rab =0x8000;
	int i;
	while (1) {



		i = GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_0);
		if (i==0) { //если кнока нажата, то огонёк движется.
			rab=rab>>1; //сдвиг переменной rab
			if (rab ==0) rab= 0x8; //если pin0 = 0, то зажечь светодиод на pin3
		}

		GPIOC->ODR = rab;
		Delay(0x4FFff);
	}

}

Простой полосовой фильтр

Вот мигалочка из 4 полосовых «фильтров» на тиньке.



Как работает эта штука?


Читать дальше