First, let's create a simple led blinking application. ## Preparing for launch We will use integrated LED. Look at the schematic: ![](https://github.com/Flipper-Zero/flipperzero-firmware-community/raw/master/wiki_static/application_examples/leds.png) ![](https://github.com/Flipper-Zero/flipperzero-firmware-community/raw/master/wiki_static/application_examples/gpio_pa8.png) This led connect between power rail and GPIO PA8 and we should configure this pin as open drain to properly control led behaviour. You can find GPIO API in `target_*/flipper_hal.h`. Or if you prefer to use Arduino API, you can find bindings in `core/flipper.h`. For work with pin we should: 1. Create `GpioPin` instance and specify pin and port. 2. Configure mode of pin by `pinMode` function. 3. Control state of pin by `digitalWrite` function. ## Creating application 1. Create new file (for example, `blink.c`) in `applications` folder. 2. Create code like this: ```C #include "flipper.h" void application_blink(void* p) { // create pin GpioPin led = {.pin = GPIO_PIN_8, .port = GPIOA}; // configure pin pinMode(led, GpioModeOpenDrain); while(1) { digitalWrite(led, HIGH); delay(500); digitalWrite(led, LOW); delay(500); } } ``` 3. To start your application on Flipper startup, add it to autorun: * in `applications/startup.h` add prototype of main application function: ```C void application_blink(void* p); ``` * add entry to `FLIPPER_STARTUP` array (pointer to application function and application name): ```C const FlipperStartupApp FLIPPER_STARTUP[] = { #ifdef TEST {.app = flipper_test_app, .name = "test app"} #endif // user applications: , {.app = application_blink, .name = "blink"} }; ``` 4. Add your application file to Makefile (for each target, `target_lo/Makefile` and `target_f1/Makefile`, we add one common makefile later): ``` # User application C_SOURCES += ../applications/blink.c ``` Build and run for linux (target_lo): `docker-compose exec dev make -C target_lo` Run: `docker-compose exec dev target_lo/build/target_lo`. Linux version has no LED or GPIO, but we can see debug messages how state of GPIO is changing: ![](https://github.com/Flipper-Zero/flipperzero-firmware-community/raw/master/wiki_static/application_examples/example_blink.gif) _You also run found source of this example in `applications/examples/blink.c` and run by `docker-compose exec dev make -C target_lo example_blink`_ Build for Flipper (board F1): `docker-compose exec dev make -C target_f1` Upload to microcontroller: `./target_f1/deploy.sh` Blink! ![](https://github.com/Flipper-Zero/flipperzero-firmware-community/raw/master/wiki_static/application_examples/example_blink_hw.gif) _You also compile by `docker-compose exec dev make -C target_f1 example_blink`_