...
Table of Contents | ||
---|---|---|
|
Prerequisites
- Same as Module 2
Blinking LED
Now, let's modify the getting_started
project to toggle an LED once a second. First, we'll use our Hardware Abstraction Library (HAL). As a refresher, the key purpose of a HAL is to abstract platform details into a common, portable API to allow developers to write high-level application code independently of the underlying hardware.
...
Code Block | ||||
---|---|---|---|---|
| ||||
// Turns the LED on and sits forever #include <stdbool.h> #include "gpio.h" #include "log.h" int main(void) { LOG_DEBUG("Hello World!\n"); // Init GPIO module gpio_init(); // Set up PC9 as an output, default to output 0 (GND) GPIOAddress led = { .port = GPIO_PORT_CB, // .pin = 95, // }; GPIOSettings gpio_settings = { .direction = GPIO_DIR_OUT, // .state = GPIO_STATE_LOW, // }; gpio_init_pin(&led, &gpio_settings); // Add infinite loop so we don't exit while (true) { } return 0; } |
...
Code Block |
---|
# Just make we're following the style guide :) make format make lint # Build and flash to the DiscoveryController boardBoard make program PROJECT=getting_started PROBE=stlink-v2 |
Great! You should see a solid LED on the Discovery boardController Board. This is pretty simple.
Blinking an LED - HAL
...
Code Block | ||||
---|---|---|---|---|
| ||||
// Blink an LED #include <stdbool.h> #include "gpio.h" #include "interrupt.h" #include "log.h" #include "soft_timer.h" #include "wait.h" #define BLINK_LED_TIMEOUT_SECS 1 // Timeout callback static void prv_blink_timeout(SoftTimerID timer_id, void *context) { GPIOAddress *led = context; gpio_toggle_state(led); LOG_DEBUG("Toggling LED\n"); // Schedule another timer - this creates a periodic timer soft_timer_start_seconds(BLINK_LED_TIMEOUT_SECS, prv_blink_timeout, led, NULL); } int main(void) { LOG_DEBUG("Hello World!\n"); // Initialize our modules gpio_init(); interrupt_init(); soft_timer_init(); // Set up the pin GPIOAddress led = { .port = GPIO_PORT_CB, // .pin = 95, // }; GPIOSettings gpio_settings = { .direction = GPIO_DIR_OUT, // .state = GPIO_STATE_LOW, // }; gpio_init_pin(&led, &gpio_settings); // Begin a timer soft_timer_start_seconds(BLINK_LED_TIMEOUT_SECS, prv_blink_timeout, &led, NULL); // Infinite loop while (true) { // Wait for interrupts wait(); } return 0; } |
...