From 0e41d4435ee6df9f9afa4f691924d3fda92dda06 Mon Sep 17 00:00:00 2001 From: Marnix Klooster Date: Mon, 3 Feb 2025 00:05:32 +0100 Subject: [PATCH] Rewrite STM32 blinky to easily add other boards/chips. (#374) --- examples/stmicro/stm32/src/blinky.zig | 40 +++++++++++++++++++-------- 1 file changed, 29 insertions(+), 11 deletions(-) diff --git a/examples/stmicro/stm32/src/blinky.zig b/examples/stmicro/stm32/src/blinky.zig index 1fad430e..8bf1938d 100644 --- a/examples/stmicro/stm32/src/blinky.zig +++ b/examples/stmicro/stm32/src/blinky.zig @@ -2,21 +2,39 @@ const std = @import("std"); const microzig = @import("microzig"); const stm32 = microzig.hal; -const pin_config = stm32.pins.GlobalConfiguration{ - .GPIOC = .{ - .PIN13 = .{ .name = "led", .mode = .{ .output = .general_purpose_push_pull } }, - }, -}; +fn delay() void { + var i: u32 = 0; + while (i < 800_000) { + asm volatile ("nop"); + i += 1; + } +} pub fn main() !void { - const pins = pin_config.apply(); + const pins, const all_leds = res: { + if (comptime std.mem.eql(u8, microzig.config.chip_name, "STM32F103C8")) { + const pins = (stm32.pins.GlobalConfiguration{ .GPIOC = .{ + .PIN13 = .{ .name = "led", .mode = .{ .output = .general_purpose_push_pull } }, + } }).apply(); + const all_leds = .{ + pins.led, + }; + break :res .{ pins, all_leds }; + } else { + @compileError("blinky is not (yet?) implemented for this target"); + } + }; + _ = pins; while (true) { - var i: u32 = 0; - while (i < 800_000) { - asm volatile ("nop"); - i += 1; + delay(); + for (0..all_leds.len) |k| { + switch (@as(u3, @intCast(k))) { + inline else => |i| { + if (i >= all_leds.len) unreachable; + all_leds[i].toggle(); + }, + } } - pins.led.toggle(); } }