This commit is contained in:
Brett Weiland 2025-09-22 21:07:53 -05:00
parent 6120cc2a3f
commit e46ddbba6f
43 changed files with 0 additions and 172854 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

File diff suppressed because it is too large Load Diff

View File

@ -1 +0,0 @@
This thing was created by Thingiverse user pgreenland, and is licensed under Creative Commons - Attribution - Share Alike

View File

@ -1 +0,0 @@
Bed Leveling Calibration Test Object (Parametric) by pgreenland on Thingiverse: https://www.thingiverse.com/thing:34558

View File

@ -1,53 +0,0 @@
/**
* Print designed to check that you bed is level
*
* print four small squares in each corner to ensure even print quality and good adhesion.
*/
// Define your printers printable area
// If you are using Sprinter firmware then these come directly from configuration.h
X_MAX_LENGTH = 120;
Y_MAX_LENGTH = 120;
THICKNESS = 0.1; //Square / outline thickness
SIZE = 10; //Square width / height
GAP = 0.5; //Width of border between square and parameter
OUTLINE_WIDTH = 1; //Width of parameter around square
OFFSET = 25; //Offset from limits in each axis
translate([OFFSET, OFFSET, 0]) square(); //Top Left
translate([(X_MAX_LENGTH / 2) - (SIZE / 2), OFFSET, 0]) square(); //Top Middle
translate([X_MAX_LENGTH - OFFSET - SIZE, OFFSET, 0]) square(); //Top Right
translate([OFFSET, (Y_MAX_LENGTH / 2) - (SIZE / 2), 0]) square(); //Middle Left
translate([(X_MAX_LENGTH / 2) - (SIZE / 2), (Y_MAX_LENGTH / 2) - (SIZE / 2), 0]) square(); //Middle Middle
translate([X_MAX_LENGTH - OFFSET - SIZE, (Y_MAX_LENGTH / 2) - (SIZE / 2), 0]) square(); //Middle Right
translate([OFFSET, Y_MAX_LENGTH - OFFSET - SIZE, 0]) square(); //Bottom Left
translate([(X_MAX_LENGTH / 2) - (SIZE / 2), Y_MAX_LENGTH - OFFSET - SIZE, 0]) square(); //Bottom Middle
translate([X_MAX_LENGTH - OFFSET - SIZE, Y_MAX_LENGTH - OFFSET - SIZE, 0]) square(); //Bottom Right
module square() {
//Center square
translate([
OUTLINE_WIDTH + GAP,
OUTLINE_WIDTH + GAP,
0
])
cube([SIZE, SIZE, THICKNESS]);
//Parameter
difference() {
//Outer square
cube([
SIZE + (2 * (GAP + OUTLINE_WIDTH)),
SIZE + (2 * (GAP + OUTLINE_WIDTH)),
THICKNESS
]);
//Inner square
translate([OUTLINE_WIDTH, OUTLINE_WIDTH, -5])
cube([SIZE + (2 * GAP), SIZE + (2 * GAP), 10]);
}
}

View File

@ -1,57 +0,0 @@
# THIS README IS NOW OUTDATED. THE PROJECT IS WAY COOLER AND AN ARTICLE IS COMING SOON!
## I've implimented my own border tracing algorithim to dramatically speed up rendering.
There's a few other optimizations, such as shifting around image buffers, etc. <br>
## Also, the card is rechargable now.
Software is still in disarray and could be optimized, however it runs smoothly. Hardware is working, I haven't had time to test all functionallity though. The battery does charge and discharge safely (cut off at 1v).<br>
## Here's a crummy picture of the card.
![STM32 Card Prototype 2](https://git.bpcspace.com/indigo/stm32_business_card/raw/branch/main/imgs/new_card.jpg)
## A quick video of the border tracing in action- a better video coming soon.
![border tracing demo](https://git.bpcspace.com/indigo/stm32_business_card/raw/branch/main/imgs/border_demo.mkv)
<br><br><br><br><br><br><br>
# STM32 Mandelbrot Explorer Buisness Card
A battery powered business card that can explore the Mandelbrot set. Meant to be cheaply made for handing out. Will likely include a flappy bird clone to encourage recruiter competition.
# Project in development! See below for a brief write up.
![STM32 Card Prototype 1](https://git.bpcspace.com/indigo/stm32_business_card/raw/branch/main/preview.png)
## Project structure
Code: [program/stm32f1_buisnesscard_v1/Core](https://git.bpcspace.com/indigo/stm32_business_card/src/branch/main/program/stm32f1_buisnesscard_v1/Core) <br>
PCB: [kicad/](https://git.bpcspace.com/indigo/stm32_business_card/src/branch/main/kicad)
## Software Development
The software is currently working, but is more a proof of concept (messy and unoptimized). In it's current state, I'm leaning heavily on ST's HAL to save time. For a project where everything is written from the ground up, see my other projects below [^1]!
### Display
I've modified [this repository](https://github.com/afiskon/stm32-st7735) to fit my needs. I've had to make some minor changes to utilize the ST7735's sleep mode, and to make the code work for my specific display. I expect I'll need to rewrite the library to manipulate raw registers to optimize SPI communication, as it currently uses HAL and is *very* slow. I'm considering implementing a game as well, which may require I access SPI via DMA.
### (No) FPU
The STM32F1 lineup doesn't have an FPU, thus fixed point integer arithmetic is used to speed up rendering. The decimal is intentionally too close to the MSB, as this introduces aesthetic visual artifacts at no cost that I think are a nice twist. <br>
*notice the banding around the set- that's an artifact of pushing fixed point arithmatic beyond its limits* <br>
<img src="./writeup/quick_buildings.png" alt="drawing" width="800"/> <br>
<img src="./writeup/quick_spiral.png" alt="drawing" width="800"/> <br>
### MCU Power Consumption
The software is interrupt based, saving power any time there's not an active job. After 30 seconds, a MOSFET will turn off the backlight and the MCU will in a deeper sleep state, where only a few microamps are consumed. This allows the card to operate without a power switch, as theoretically the sleeping power consumption is insignificant compared to the shelf life of these batteries (a few months).
## Hardware Development
The PCB works, and is what I'm using to test code. I'm planning on making some changes, including adding MOSFETS for the display backlight and creating some art for the silk screen.
The hardware is intentionally left simple for rapid development; there's two ideal diodes, allowing power delivery via USB-C or batteries, a step-down switching regulator, buttons with debouncing circuits, and of course, the MCU.
Some of the most vital components are described below.
### Batteries
This card will be powered by 4 zinc air batteries (cost effective & high power density, commonly used in hearing aids). The downside to these batteries is that they're non-rechargeable, and after activation, they only have a shelf life of a few weeks. Batteries are expensive, and what I've got is more then enough- it may actually be overkill.
A battery holder was developed to be used with springs to hold the batteries in place. I haven't ordered the batteries yet, so I have yet to see how it performs.
### Display
The display is the cheapest 2$ 65k 160x80 color LCD I could find on LCSC. It is the most expensive part of my card, matched with batteries. I'm sure I could have found it on Ali Express for 50¢, but hindsight is 20/20. It's actually very pretty, and I plan to upload images soon.
### SPI troubles
Currently, SPI only works consistently at 4mHZ. I have yet to probe it with my oscilloscope and figure out what's wrong; I'm guessing parasitic capacitance. My next PCB will have differential routing to allow higher speeds.
## Things I'd change
I'm used to working with a lot lower spec MCUs, and after the purchase I've found that the price of the STM32f1 is actually quite expensive for it's performance. I might want to try something uber cheap for my next project requiring a higher speed 32 bit processor, as long as it's got a HAL to accelerate development. The ch32v003 looks pretty cool...
## Other Projects
[^1]: For another embedded project without any assistance from HAL, check out my (unfinished) [AVR wristwatch](https://git.bpcspace.com/indigo/AVRwristwatch), where everything- from the I2C display and RTC clock is developed from the ground up! <br>
For a much larger project that's not exactly embedded, check out my [Operating System](https://git.bpcspace.com/indigo/IndigoOS). I haven't been able to work on it since going to Missouri S&T, but some impressive feats include a bootloader, an efficient binary tree/buddy system physical memory allocator, and multi-core execution. It's a lot of code, maybe check it out!

File diff suppressed because it is too large Load Diff

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -1,128 +0,0 @@
(kicad_symbol_lib
(version 20241209)
(generator "kicad_symbol_editor")
(generator_version "9.0")
(symbol "quad_675"
(exclude_from_sim no)
(in_bom yes)
(on_board yes)
(property "Reference" "U"
(at 0 -1.524 0)
(effects
(font
(size 1.27 1.27)
)
)
)
(property "Value" ""
(at 0 0 0)
(effects
(font
(size 1.27 1.27)
)
)
)
(property "Footprint" ""
(at 0 0 0)
(effects
(font
(size 1.27 1.27)
)
(hide yes)
)
)
(property "Datasheet" ""
(at 0 0 0)
(effects
(font
(size 1.27 1.27)
)
(hide yes)
)
)
(property "Description" ""
(at 0 0 0)
(effects
(font
(size 1.27 1.27)
)
(hide yes)
)
)
(symbol "quad_675_1_1"
(pin bidirectional line
(at 0 11.43 0)
(length 2.54)
(name "gnd_4"
(effects
(font
(size 1.27 1.27)
)
)
)
(number "4"
(effects
(font
(size 1.27 1.27)
)
)
)
)
(pin bidirectional line
(at 0 7.62 0)
(length 2.54)
(name "gnd_3"
(effects
(font
(size 1.27 1.27)
)
)
)
(number "3"
(effects
(font
(size 1.27 1.27)
)
)
)
)
(pin bidirectional line
(at 0 3.81 0)
(length 2.54)
(name "gnd_2"
(effects
(font
(size 1.27 1.27)
)
)
)
(number "2"
(effects
(font
(size 1.27 1.27)
)
)
)
)
(pin bidirectional line
(at 0 0 0)
(length 2.54)
(name "gnd_1"
(effects
(font
(size 1.27 1.27)
)
)
)
(number "1"
(effects
(font
(size 1.27 1.27)
)
)
)
)
)
(embedded_fonts no)
)
)

View File

@ -1,142 +0,0 @@
(kicad_symbol_lib
(version 20241209)
(generator "kicad_symbol_editor")
(generator_version "9.0")
(symbol "quad_675"
(exclude_from_sim no)
(in_bom yes)
(on_board yes)
(property "Reference" "U"
(at 10.668 5.588 0)
(effects
(font
(size 1.27 1.27)
)
(hide yes)
)
)
(property "Value" ""
(at 0 0 0)
(effects
(font
(size 1.27 1.27)
)
)
)
(property "Footprint" ""
(at 0 0 0)
(effects
(font
(size 1.27 1.27)
)
(hide yes)
)
)
(property "Datasheet" ""
(at 0 0 0)
(effects
(font
(size 1.27 1.27)
)
(hide yes)
)
)
(property "Description" ""
(at 0 0 0)
(effects
(font
(size 1.27 1.27)
)
(hide yes)
)
)
(symbol "quad_675_0_1"
(rectangle
(start 2.54 12.7)
(end 12.7 -1.27)
(stroke
(width 0)
(type default)
)
(fill
(type none)
)
)
)
(symbol "quad_675_1_1"
(pin bidirectional line
(at 0 11.43 0)
(length 2.54)
(name "gnd_4"
(effects
(font
(size 1.27 1.27)
)
)
)
(number "4"
(effects
(font
(size 1.27 1.27)
)
)
)
)
(pin bidirectional line
(at 0 7.62 0)
(length 2.54)
(name "gnd_3"
(effects
(font
(size 1.27 1.27)
)
)
)
(number "3"
(effects
(font
(size 1.27 1.27)
)
)
)
)
(pin bidirectional line
(at 0 3.81 0)
(length 2.54)
(name "gnd_2"
(effects
(font
(size 1.27 1.27)
)
)
)
(number "2"
(effects
(font
(size 1.27 1.27)
)
)
)
)
(pin bidirectional line
(at 0 0 0)
(length 2.54)
(name "gnd_1"
(effects
(font
(size 1.27 1.27)
)
)
)
(number "1"
(effects
(font
(size 1.27 1.27)
)
)
)
)
)
(embedded_fonts no)
)
)

View File

@ -1,48 +0,0 @@
(module battery (layer F.Cu) (tedit 61218795)
(attr smd)
(descr "battery StepUp generated footprint")
(fp_text reference "FC_" (at 0.0 1.0) (layer F.SilkS)
(effects (font (size 1.0 1.0) (thickness 0.15)))
)
(fp_text value "Val_" (at 0.0 -1.0) (layer F.SilkS)
(effects (font (size 1.0 1.0) (thickness 0.15)))
)
(fp_text user %R (at 0.0 1.0) (layer F.Fab)
(effects (font (size 1.0 1.0) (thickness 0.15)))
)
(fp_text user "EDIT PAD NUMBERS" (at 0.0 -2.0) (layer Cmts.User)
(effects (font (size 1 1) (thickness 0.2) italic))
)
(fp_line (start 47.100000 -7.800000) (end 47.100000 -6.854102) (layer Sketch_converted) (width 0.05))
(fp_arc (start 50.100000 -6.854102) (end 47.100000 -6.854102) (angle -63.434949) (layer Sketch_converted) (width 0.05))
(fp_line (start 48.758359 -4.170820) (end 50.441641 -3.329180) (layer Sketch_converted) (width 0.05))
(fp_arc (start 49.100000 -0.645898) (end 52.100000 -0.645898) (angle -63.434949) (layer Sketch_converted) (width 0.05))
(fp_line (start 52.100000 -0.645898) (end 52.100000 0.645898) (layer Sketch_converted) (width 0.05))
(fp_arc (start 49.100000 0.645898) (end 50.441641 3.329180) (angle -63.434949) (layer Sketch_converted) (width 0.05))
(fp_line (start 50.441641 3.329180) (end 48.758359 4.170820) (layer Sketch_converted) (width 0.05))
(fp_arc (start 50.100000 6.854102) (end 48.758359 4.170820) (angle -63.434949) (layer Sketch_converted) (width 0.05))
(fp_line (start 47.100000 7.800000) (end 47.100000 6.854102) (layer Sketch_converted) (width 0.05))
(fp_line (start 47.100000 7.800000) (end -7.800000 7.800000) (layer Sketch_converted) (width 0.05))
(fp_line (start -7.800000 7.800000) (end -7.800000 6.854102) (layer Sketch_converted) (width 0.05))
(fp_arc (start -10.800000 6.854102) (end -7.800000 6.854102) (angle -63.434949) (layer Sketch_converted) (width 0.05))
(fp_line (start -9.458359 4.170820) (end -11.141641 3.329180) (layer Sketch_converted) (width 0.05))
(fp_arc (start -9.800000 0.645898) (end -12.800000 0.645898) (angle -63.434949) (layer Sketch_converted) (width 0.05))
(fp_line (start -12.800000 0.645898) (end -12.800000 -0.645898) (layer Sketch_converted) (width 0.05))
(fp_arc (start -9.800000 -0.645898) (end -11.141641 -3.329180) (angle -63.434949) (layer Sketch_converted) (width 0.05))
(fp_line (start -11.141641 -3.329180) (end -9.458359 -4.170820) (layer Sketch_converted) (width 0.05))
(fp_arc (start -10.800000 -6.854102) (end -9.458359 -4.170820) (angle -63.434949) (layer Sketch_converted) (width 0.05))
(fp_line (start -7.800000 -7.800000) (end -7.800000 -6.854102) (layer Sketch_converted) (width 0.05))
(fp_line (start -7.800000 -7.800000) (end 47.100000 -7.800000) (layer Sketch_converted) (width 0.05))
(fp_circle (center 49.600000 -0.000000) (end 48.000000 -0.000000) (layer Sketch_converted) (width 0.05))
(fp_circle (center 39.300000 0.000000) (end 33.250000 0.000000) (layer Sketch_converted) (width 0.05))
(fp_circle (center 26.200000 0.000000) (end 20.150000 0.000000) (layer Sketch_converted) (width 0.05))
(fp_circle (center 13.100000 0.000000) (end 7.050000 0.000000) (layer Sketch_converted) (width 0.05))
(fp_circle (center 0.000000 0.000000) (end -6.050000 0.000000) (layer Sketch_converted) (width 0.05))
(fp_circle (center -10.300000 0.000000) (end -11.900000 0.000000) (layer Sketch_converted) (width 0.05))
(model "/home/indigo/projects/stm32_buisnesscard/kicad/battery.wrl"
(at (xyz 0 0 0))
(scale (xyz 1 1 1))
(rotate (xyz 0 0 0))
)
)

View File

@ -1,96 +0,0 @@
{
"board": {
"active_layer": 0,
"active_layer_preset": "",
"auto_track_width": true,
"hidden_netclasses": [],
"hidden_nets": [],
"high_contrast_mode": 0,
"net_color_mode": 1,
"opacity": {
"images": 0.6,
"pads": 1.0,
"shapes": 1.0,
"tracks": 1.0,
"vias": 1.0,
"zones": 0.6
},
"selection_filter": {
"dimensions": true,
"footprints": true,
"graphics": true,
"keepouts": true,
"lockedItems": false,
"otherItems": true,
"pads": true,
"text": true,
"tracks": true,
"vias": true,
"zones": true
},
"visible_items": [
"vias",
"footprint_text",
"footprint_anchors",
"ratsnest",
"footprints_front",
"footprints_back",
"footprint_values",
"footprint_references",
"tracks",
"drc_errors",
"drawing_sheet",
"bitmaps",
"pads",
"zones",
"drc_warnings",
"locked_item_shadows",
"conflict_shadows",
"shapes"
],
"visible_layers": "ffffffff_ffffffff_ffffffff_ffffffff",
"zone_display_mode": 0
},
"git": {
"repo_type": "",
"repo_username": "",
"ssh_key": ""
},
"meta": {
"filename": "stm32card_old.kicad_prl",
"version": 5
},
"net_inspector_panel": {
"col_hidden": [],
"col_order": [],
"col_widths": [],
"custom_group_rules": [],
"expanded_rows": [],
"filter_by_net_name": true,
"filter_by_netclass": true,
"filter_text": "",
"group_by_constraint": false,
"group_by_netclass": false,
"show_unconnected_nets": false,
"show_zero_pad_nets": false,
"sort_ascending": true,
"sorting_column": -1
},
"open_jobsets": [],
"project": {
"files": []
},
"schematic": {
"selection_filter": {
"graphics": true,
"images": true,
"labels": true,
"lockedItems": false,
"otherItems": true,
"pins": true,
"symbols": true,
"text": true,
"wires": true
}
}
}

View File

@ -1,655 +0,0 @@
{
"board": {
"3dviewports": [],
"design_settings": {
"defaults": {
"apply_defaults_to_fp_fields": false,
"apply_defaults_to_fp_shapes": false,
"apply_defaults_to_fp_text": false,
"board_outline_line_width": 0.05,
"copper_line_width": 0.2,
"copper_text_italic": false,
"copper_text_size_h": 1.5,
"copper_text_size_v": 1.5,
"copper_text_thickness": 0.3,
"copper_text_upright": false,
"courtyard_line_width": 0.05,
"dimension_precision": 4,
"dimension_units": 3,
"dimensions": {
"arrow_length": 1270000,
"extension_offset": 500000,
"keep_text_aligned": true,
"suppress_zeroes": false,
"text_position": 0,
"units_format": 1
},
"fab_line_width": 0.1,
"fab_text_italic": false,
"fab_text_size_h": 1.0,
"fab_text_size_v": 1.0,
"fab_text_thickness": 0.15,
"fab_text_upright": false,
"other_line_width": 0.1,
"other_text_italic": false,
"other_text_size_h": 1.0,
"other_text_size_v": 1.0,
"other_text_thickness": 0.15,
"other_text_upright": false,
"pads": {
"drill": 0.762,
"height": 1.524,
"width": 1.524
},
"silk_line_width": 0.1,
"silk_text_italic": false,
"silk_text_size_h": 1.0,
"silk_text_size_v": 1.0,
"silk_text_thickness": 0.1,
"silk_text_upright": false,
"zones": {
"min_clearance": 0.5
}
},
"diff_pair_dimensions": [
{
"gap": 0.0,
"via_gap": 0.0,
"width": 0.0
}
],
"drc_exclusions": [],
"meta": {
"version": 2
},
"rule_severities": {
"annular_width": "error",
"clearance": "error",
"connection_width": "warning",
"copper_edge_clearance": "error",
"copper_sliver": "warning",
"courtyards_overlap": "error",
"creepage": "error",
"diff_pair_gap_out_of_range": "error",
"diff_pair_uncoupled_length_too_long": "error",
"drill_out_of_range": "error",
"duplicate_footprints": "warning",
"extra_footprint": "warning",
"footprint": "error",
"footprint_filters_mismatch": "ignore",
"footprint_symbol_mismatch": "warning",
"footprint_type_mismatch": "ignore",
"hole_clearance": "error",
"hole_near_hole": "error",
"hole_to_hole": "error",
"holes_co_located": "warning",
"invalid_outline": "error",
"isolated_copper": "warning",
"item_on_disabled_layer": "error",
"items_not_allowed": "error",
"length_out_of_range": "error",
"lib_footprint_issues": "warning",
"lib_footprint_mismatch": "warning",
"malformed_courtyard": "error",
"microvia_drill_out_of_range": "error",
"mirrored_text_on_front_layer": "warning",
"missing_courtyard": "ignore",
"missing_footprint": "warning",
"net_conflict": "warning",
"nonmirrored_text_on_back_layer": "warning",
"npth_inside_courtyard": "ignore",
"padstack": "warning",
"pth_inside_courtyard": "ignore",
"shorting_items": "error",
"silk_edge_clearance": "warning",
"silk_over_copper": "warning",
"silk_overlap": "warning",
"skew_out_of_range": "error",
"solder_mask_bridge": "error",
"starved_thermal": "error",
"text_height": "warning",
"text_on_edge_cuts": "error",
"text_thickness": "warning",
"through_hole_pad_without_hole": "error",
"too_many_vias": "error",
"track_angle": "error",
"track_dangling": "warning",
"track_segment_length": "error",
"track_width": "error",
"tracks_crossing": "error",
"unconnected_items": "error",
"unresolved_variable": "error",
"via_dangling": "warning",
"zones_intersect": "error"
},
"rules": {
"max_error": 0.005,
"min_clearance": 0.1,
"min_connection": 0.0,
"min_copper_edge_clearance": 0.5,
"min_groove_width": 0.0,
"min_hole_clearance": 0.25,
"min_hole_to_hole": 0.25,
"min_microvia_diameter": 0.2,
"min_microvia_drill": 0.1,
"min_resolved_spokes": 2,
"min_silk_clearance": 0.0,
"min_text_height": 0.8,
"min_text_thickness": 0.08,
"min_through_hole_diameter": 0.3,
"min_track_width": 0.16,
"min_via_annular_width": 0.1,
"min_via_diameter": 0.5,
"solder_mask_to_copper_clearance": 0.0,
"use_height_for_length_calcs": true
},
"teardrop_options": [
{
"td_onpthpad": true,
"td_onroundshapesonly": false,
"td_onsmdpad": true,
"td_ontrackend": false,
"td_onvia": true
}
],
"teardrop_parameters": [
{
"td_allow_use_two_tracks": true,
"td_curve_segcount": 0,
"td_height_ratio": 1.0,
"td_length_ratio": 0.5,
"td_maxheight": 2.0,
"td_maxlen": 1.0,
"td_on_pad_in_zone": false,
"td_target_name": "td_round_shape",
"td_width_to_size_filter_ratio": 0.9
},
{
"td_allow_use_two_tracks": true,
"td_curve_segcount": 0,
"td_height_ratio": 1.0,
"td_length_ratio": 0.5,
"td_maxheight": 2.0,
"td_maxlen": 1.0,
"td_on_pad_in_zone": false,
"td_target_name": "td_rect_shape",
"td_width_to_size_filter_ratio": 0.9
},
{
"td_allow_use_two_tracks": true,
"td_curve_segcount": 0,
"td_height_ratio": 1.0,
"td_length_ratio": 0.5,
"td_maxheight": 2.0,
"td_maxlen": 1.0,
"td_on_pad_in_zone": false,
"td_target_name": "td_track_end",
"td_width_to_size_filter_ratio": 0.9
}
],
"track_widths": [
0.0,
0.25,
0.35,
0.5
],
"tuning_pattern_settings": {
"diff_pair_defaults": {
"corner_radius_percentage": 80,
"corner_style": 1,
"max_amplitude": 1.0,
"min_amplitude": 0.2,
"single_sided": false,
"spacing": 1.0
},
"diff_pair_skew_defaults": {
"corner_radius_percentage": 80,
"corner_style": 1,
"max_amplitude": 1.0,
"min_amplitude": 0.2,
"single_sided": false,
"spacing": 0.6
},
"single_track_defaults": {
"corner_radius_percentage": 80,
"corner_style": 1,
"max_amplitude": 1.0,
"min_amplitude": 0.2,
"single_sided": false,
"spacing": 0.6
}
},
"via_dimensions": [
{
"diameter": 0.0,
"drill": 0.0
}
],
"zones_allow_external_fillets": false
},
"ipc2581": {
"dist": "",
"distpn": "",
"internal_id": "",
"mfg": "",
"mpn": ""
},
"layer_pairs": [],
"layer_presets": [],
"viewports": []
},
"boards": [],
"cvpcb": {
"equivalence_files": []
},
"erc": {
"erc_exclusions": [],
"meta": {
"version": 0
},
"pin_map": [
[
0,
0,
0,
0,
0,
0,
1,
0,
0,
0,
0,
2
],
[
0,
2,
0,
1,
0,
0,
1,
0,
2,
2,
2,
2
],
[
0,
0,
0,
0,
0,
0,
1,
0,
1,
0,
1,
2
],
[
0,
1,
0,
0,
0,
0,
1,
1,
2,
1,
1,
2
],
[
0,
0,
0,
0,
0,
0,
1,
0,
0,
0,
0,
2
],
[
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
2
],
[
1,
1,
1,
1,
1,
0,
1,
1,
1,
1,
1,
2
],
[
0,
0,
0,
1,
0,
0,
1,
0,
0,
0,
0,
2
],
[
0,
2,
1,
2,
0,
0,
1,
0,
2,
2,
2,
2
],
[
0,
2,
0,
1,
0,
0,
1,
0,
2,
0,
0,
2
],
[
0,
2,
1,
1,
0,
0,
1,
0,
2,
0,
0,
2
],
[
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2
]
],
"rule_severities": {
"bus_definition_conflict": "error",
"bus_entry_needed": "error",
"bus_to_bus_conflict": "error",
"bus_to_net_conflict": "error",
"conflicting_netclasses": "error",
"different_unit_footprint": "error",
"different_unit_net": "error",
"duplicate_reference": "error",
"duplicate_sheet_names": "error",
"endpoint_off_grid": "warning",
"extra_units": "error",
"footprint_filter": "ignore",
"footprint_link_issues": "warning",
"four_way_junction": "ignore",
"global_label_dangling": "warning",
"hier_label_mismatch": "error",
"label_dangling": "error",
"label_multiple_wires": "warning",
"lib_symbol_issues": "warning",
"lib_symbol_mismatch": "warning",
"missing_bidi_pin": "warning",
"missing_input_pin": "warning",
"missing_power_pin": "error",
"missing_unit": "warning",
"multiple_net_names": "warning",
"net_not_bus_member": "warning",
"no_connect_connected": "warning",
"no_connect_dangling": "warning",
"pin_not_connected": "error",
"pin_not_driven": "error",
"pin_to_pin": "warning",
"power_pin_not_driven": "error",
"same_local_global_label": "warning",
"similar_label_and_power": "warning",
"similar_labels": "warning",
"similar_power": "warning",
"simulation_model_issue": "ignore",
"single_global_label": "ignore",
"unannotated": "error",
"unconnected_wire_endpoint": "warning",
"unit_value_mismatch": "error",
"unresolved_variable": "error",
"wire_dangling": "error"
}
},
"libraries": {
"pinned_footprint_libs": [],
"pinned_symbol_libs": []
},
"meta": {
"filename": "stm32card_old.kicad_pro",
"version": 3
},
"net_settings": {
"classes": [
{
"bus_width": 12,
"clearance": 0.2,
"diff_pair_gap": 0.25,
"diff_pair_via_gap": 0.25,
"diff_pair_width": 0.2,
"line_style": 0,
"microvia_diameter": 0.3,
"microvia_drill": 0.1,
"name": "Default",
"pcb_color": "rgba(0, 0, 0, 0.000)",
"priority": 2147483647,
"schematic_color": "rgba(0, 0, 0, 0.000)",
"track_width": 0.25,
"via_diameter": 0.6,
"via_drill": 0.3,
"wire_width": 6
},
{
"clearance": 0.2,
"diff_pair_gap": 0.25,
"diff_pair_width": 0.2,
"microvia_diameter": 0.3,
"microvia_drill": 0.1,
"name": "power",
"pcb_color": "rgba(0, 0, 0, 0.000)",
"priority": 0,
"schematic_color": "rgba(0, 0, 0, 0.000)",
"track_width": 0.5,
"via_diameter": 0.6,
"via_drill": 0.3
}
],
"meta": {
"version": 4
},
"net_colors": null,
"netclass_assignments": null,
"netclass_patterns": [
{
"netclass": "power",
"pattern": "+3.0V"
},
{
"netclass": "power",
"pattern": "unregulated_vcc"
}
]
},
"pcbnew": {
"last_paths": {
"gencad": "",
"idf": "",
"netlist": "",
"plot": "../../v1_output/",
"pos_files": "",
"specctra_dsn": "",
"step": "",
"svg": "",
"vrml": ""
},
"page_layout_descr_file": ""
},
"schematic": {
"annotate_start_num": 0,
"bom_export_filename": "",
"bom_fmt_presets": [],
"bom_fmt_settings": {
"field_delimiter": ",",
"keep_line_breaks": false,
"keep_tabs": false,
"name": "CSV",
"ref_delimiter": ",",
"ref_range_delimiter": "",
"string_delimiter": "\""
},
"bom_presets": [],
"bom_settings": {
"exclude_dnp": false,
"fields_ordered": [
{
"group_by": false,
"label": "Reference",
"name": "Reference",
"show": true
},
{
"group_by": true,
"label": "Value",
"name": "Value",
"show": true
},
{
"group_by": false,
"label": "Datasheet",
"name": "Datasheet",
"show": true
},
{
"group_by": false,
"label": "Footprint",
"name": "Footprint",
"show": true
},
{
"group_by": false,
"label": "Qty",
"name": "${QUANTITY}",
"show": true
},
{
"group_by": true,
"label": "DNP",
"name": "${DNP}",
"show": true
}
],
"filter_string": "",
"group_symbols": true,
"include_excluded_from_bom": false,
"name": "Grouped By Value",
"sort_asc": true,
"sort_field": "Reference"
},
"connection_grid_size": 50.0,
"drawing": {
"dashed_lines_dash_length_ratio": 12.0,
"dashed_lines_gap_length_ratio": 3.0,
"default_line_thickness": 6.0,
"default_text_size": 50.0,
"field_names": [],
"intersheets_ref_own_page": false,
"intersheets_ref_prefix": "",
"intersheets_ref_short": false,
"intersheets_ref_show": false,
"intersheets_ref_suffix": "",
"junction_size_choice": 3,
"label_size_ratio": 0.375,
"operating_point_overlay_i_precision": 3,
"operating_point_overlay_i_range": "~A",
"operating_point_overlay_v_precision": 3,
"operating_point_overlay_v_range": "~V",
"overbar_offset_ratio": 1.23,
"pin_symbol_size": 25.0,
"text_offset_ratio": 0.15
},
"legacy_lib_dir": "",
"legacy_lib_list": [],
"meta": {
"version": 1
},
"net_format_name": "",
"ngspice": {
"fix_include_paths": true,
"meta": {
"version": 0
},
"model_mode": 4,
"workbook_filename": ""
},
"page_layout_descr_file": "",
"plot_directory": "",
"space_save_all_events": true,
"spice_current_sheet_as_root": false,
"spice_external_command": "spice \"%I\"",
"spice_model_current_sheet_as_root": true,
"spice_save_all_currents": false,
"spice_save_all_dissipations": false,
"spice_save_all_voltages": false,
"subpart_first_id": 65,
"subpart_id_separator": 0
},
"sheets": [
[
"87333522-7f73-498a-afdc-76bd376ba27f",
"Root"
]
],
"text_variables": {}
}

File diff suppressed because it is too large Load Diff

View File

@ -1,56 +0,0 @@
#!/usr/bin/env python3
# Based on https://github.com/KiCad/kicad-source-mirror/blob/master/demos/python_scripts_examples/gen_gerber_and_drill_files_board.py
import sys
import os
from pcbnew import *
def help():
print("Usage: kicadExportDxf.py <board file> [<output dir>]")
print(" Default output dir same as the board directory'")
if len(sys.argv) == 1 or len(sys.argv) > 3:
print("Invalid number of arguments.")
help()
sys.exit()
filename = sys.argv[1]
basename = os.path.dirname(filename)
if len(sys.argv) == 3:
plotDir = sys.argv[2]
else:
plotDir = basename
plotDir = os.path.abspath(plotDir)
board = LoadBoard(filename)
pctl = PLOT_CONTROLLER(board)
popt = pctl.GetPlotOptions()
popt.SetOutputDirectory(plotDir)
popt.SetAutoScale(False)
popt.SetScale(1)
popt.SetMirror(False)
popt.SetExcludeEdgeLayer(True)
popt.SetScale(1)
popt.SetDXFPlotUnits(DXF_PLOTTER.DXF_UNIT_MILLIMETERS)
popt.SetDXFPlotPolygonMode(False)
plot_plan = [
# name, id, comment
("PasteBottom", B_Paste, "Paste Bottom"),
("PasteTop", F_Paste, "Paste top"),
("EdgeCuts", Edge_Cuts, "Edges"),
]
for name, id, comment in plot_plan:
pctl.SetLayer(id)
pctl.OpenPlotfile(name, PLOT_FORMAT_DXF, comment)
print('plot {}'.format(pctl.GetPlotFileName()))
if pctl.PlotLayer() == False:
print("plot error")
pctl.ClosePlot()
sys.exit(0)

View File

@ -1,48 +0,0 @@
module stencilFrame(outlineDxf, height, width, clearance) {
linear_extrude(height = height)
difference() {
offset(r = width + clearance) import(file = outlineDxf);
offset(r = clearance) import(file = outlineDxf);
};
};
module stencilSubstrate(outlineDxf, thickness, frameHeight,
frameWidth, frameClearance)
{
difference() {
linear_extrude(height = thickness + frameHeight)
offset(r = frameWidth + frameClearance)
import(file = outlineDxf);
translate([0, 0, thickness])
linear_extrude(height = thickness + frameHeight)
offset(r = frameClearance)
import(file = outlineDxf);
}
}
module stencil(outlineDxf, holesDxf, thickness = 0.2, frameHeight = 1,
frameWidth = 1, frameClearance = 0.1, enlargeHoles = 0.05, front = true)
{
zScale = front ? -1 : 1;
xRotate = front ? 180 : 0;
rotate(a = xRotate, v = [1, 0, 0])
difference() {
scale([1, 1, zScale]) stencilSubstrate(outlineDxf, thickness,
frameHeight, frameWidth, frameClearance);
linear_extrude(height = 4 * thickness, center = true)
offset(delta = enlargeHoles) import(file = holesDxf);
};
}
$fa = 0.4;
$fs = 0.4;
thickness = 0.2;
frameHeight = 1;
frameWidth = 2;
enlargeHoles = 0.0;
frameClearance = 0;
front = true;
stencil("../stm32card-Edge_Cuts.dxf", "../stm32card-F_Paste.dxf", thickness = thickness, frameHeight = frameHeight,
frameWidth = frameWidth, frameClearance = frameClearance, front=front);

File diff suppressed because it is too large Load Diff

View File

@ -1,36 +0,0 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
version="1.1"
width="297.0022mm" height="210.0072mm" viewBox="0.0000 0.0000 297.0022 210.0072">
<title>SVG Image created as stm32card-Edge_Cuts.svg date 2025/09/11 14:25:54 </title>
<desc>Image generated by PCBNEW </desc>
<g style="fill:#000000; fill-opacity:1.0000;stroke:#000000; stroke-opacity:1.0000;
stroke-linecap:round; stroke-linejoin:round;"
transform="translate(0 0) scale(1 1)">
</g>
<g style="fill:none;
stroke:#000000; stroke-width:0.0500; stroke-opacity:1;
stroke-linecap:round; stroke-linejoin:round;">
<path d="M137.5645 132.3355
L216.4645 132.3355
" />
<path d="M132.5645 127.3355 A5.0000 5.0000 0.0 0 0 137.5645 132.3355" />
<path d="M132.5645 86.5355
L132.5645 127.3355
" />
<path d="M221.4645 86.5355 A5.0000 5.0000 0.0 0 0 216.4645 81.5355" />
<path d="M221.4645 127.3355
L221.4645 86.5355
" />
<path d="M216.4645 81.5355
L137.5645 81.5355
" />
<path d="M137.5645 81.5355 A4.9999 4.9999 0.0 0 0 132.5645 86.5355" />
<path d="M216.4645 132.3356 A5.0001 5.0001 0.0 0 0 221.4645 127.3355" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 1.3 KiB

File diff suppressed because it is too large Load Diff

Before

Width:  |  Height:  |  Size: 124 KiB

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

Before

Width:  |  Height:  |  Size: 79 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 404 KiB

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 946 B

View File

@ -1,327 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!-- Created with qrencode 4.1.1 (https://fukuchi.org/works/qrencode/index.html) -->
<svg width="3.49cm" height="3.49cm" viewBox="0 0 33 33" preserveAspectRatio="none" version="1.1" xmlns="http://www.w3.org/2000/svg">
<g id="QRcode">
<rect x="0" y="0" width="33" height="33" fill="#ffffff"/>
<g id="Pattern" transform="translate(4,4)">
<rect x="0" y="0" width="1" height="1" fill="#000000"/>
<rect x="1" y="0" width="1" height="1" fill="#000000"/>
<rect x="2" y="0" width="1" height="1" fill="#000000"/>
<rect x="3" y="0" width="1" height="1" fill="#000000"/>
<rect x="4" y="0" width="1" height="1" fill="#000000"/>
<rect x="5" y="0" width="1" height="1" fill="#000000"/>
<rect x="6" y="0" width="1" height="1" fill="#000000"/>
<rect x="10" y="0" width="1" height="1" fill="#000000"/>
<rect x="14" y="0" width="1" height="1" fill="#000000"/>
<rect x="15" y="0" width="1" height="1" fill="#000000"/>
<rect x="18" y="0" width="1" height="1" fill="#000000"/>
<rect x="19" y="0" width="1" height="1" fill="#000000"/>
<rect x="20" y="0" width="1" height="1" fill="#000000"/>
<rect x="21" y="0" width="1" height="1" fill="#000000"/>
<rect x="22" y="0" width="1" height="1" fill="#000000"/>
<rect x="23" y="0" width="1" height="1" fill="#000000"/>
<rect x="24" y="0" width="1" height="1" fill="#000000"/>
<rect x="0" y="1" width="1" height="1" fill="#000000"/>
<rect x="6" y="1" width="1" height="1" fill="#000000"/>
<rect x="8" y="1" width="1" height="1" fill="#000000"/>
<rect x="9" y="1" width="1" height="1" fill="#000000"/>
<rect x="10" y="1" width="1" height="1" fill="#000000"/>
<rect x="13" y="1" width="1" height="1" fill="#000000"/>
<rect x="15" y="1" width="1" height="1" fill="#000000"/>
<rect x="16" y="1" width="1" height="1" fill="#000000"/>
<rect x="18" y="1" width="1" height="1" fill="#000000"/>
<rect x="24" y="1" width="1" height="1" fill="#000000"/>
<rect x="0" y="2" width="1" height="1" fill="#000000"/>
<rect x="2" y="2" width="1" height="1" fill="#000000"/>
<rect x="3" y="2" width="1" height="1" fill="#000000"/>
<rect x="4" y="2" width="1" height="1" fill="#000000"/>
<rect x="6" y="2" width="1" height="1" fill="#000000"/>
<rect x="8" y="2" width="1" height="1" fill="#000000"/>
<rect x="14" y="2" width="1" height="1" fill="#000000"/>
<rect x="15" y="2" width="1" height="1" fill="#000000"/>
<rect x="18" y="2" width="1" height="1" fill="#000000"/>
<rect x="20" y="2" width="1" height="1" fill="#000000"/>
<rect x="21" y="2" width="1" height="1" fill="#000000"/>
<rect x="22" y="2" width="1" height="1" fill="#000000"/>
<rect x="24" y="2" width="1" height="1" fill="#000000"/>
<rect x="0" y="3" width="1" height="1" fill="#000000"/>
<rect x="2" y="3" width="1" height="1" fill="#000000"/>
<rect x="3" y="3" width="1" height="1" fill="#000000"/>
<rect x="4" y="3" width="1" height="1" fill="#000000"/>
<rect x="6" y="3" width="1" height="1" fill="#000000"/>
<rect x="9" y="3" width="1" height="1" fill="#000000"/>
<rect x="12" y="3" width="1" height="1" fill="#000000"/>
<rect x="14" y="3" width="1" height="1" fill="#000000"/>
<rect x="18" y="3" width="1" height="1" fill="#000000"/>
<rect x="20" y="3" width="1" height="1" fill="#000000"/>
<rect x="21" y="3" width="1" height="1" fill="#000000"/>
<rect x="22" y="3" width="1" height="1" fill="#000000"/>
<rect x="24" y="3" width="1" height="1" fill="#000000"/>
<rect x="0" y="4" width="1" height="1" fill="#000000"/>
<rect x="2" y="4" width="1" height="1" fill="#000000"/>
<rect x="3" y="4" width="1" height="1" fill="#000000"/>
<rect x="4" y="4" width="1" height="1" fill="#000000"/>
<rect x="6" y="4" width="1" height="1" fill="#000000"/>
<rect x="8" y="4" width="1" height="1" fill="#000000"/>
<rect x="9" y="4" width="1" height="1" fill="#000000"/>
<rect x="10" y="4" width="1" height="1" fill="#000000"/>
<rect x="12" y="4" width="1" height="1" fill="#000000"/>
<rect x="14" y="4" width="1" height="1" fill="#000000"/>
<rect x="15" y="4" width="1" height="1" fill="#000000"/>
<rect x="18" y="4" width="1" height="1" fill="#000000"/>
<rect x="20" y="4" width="1" height="1" fill="#000000"/>
<rect x="21" y="4" width="1" height="1" fill="#000000"/>
<rect x="22" y="4" width="1" height="1" fill="#000000"/>
<rect x="24" y="4" width="1" height="1" fill="#000000"/>
<rect x="0" y="5" width="1" height="1" fill="#000000"/>
<rect x="6" y="5" width="1" height="1" fill="#000000"/>
<rect x="8" y="5" width="1" height="1" fill="#000000"/>
<rect x="10" y="5" width="1" height="1" fill="#000000"/>
<rect x="12" y="5" width="1" height="1" fill="#000000"/>
<rect x="15" y="5" width="1" height="1" fill="#000000"/>
<rect x="16" y="5" width="1" height="1" fill="#000000"/>
<rect x="18" y="5" width="1" height="1" fill="#000000"/>
<rect x="24" y="5" width="1" height="1" fill="#000000"/>
<rect x="0" y="6" width="1" height="1" fill="#000000"/>
<rect x="1" y="6" width="1" height="1" fill="#000000"/>
<rect x="2" y="6" width="1" height="1" fill="#000000"/>
<rect x="3" y="6" width="1" height="1" fill="#000000"/>
<rect x="4" y="6" width="1" height="1" fill="#000000"/>
<rect x="5" y="6" width="1" height="1" fill="#000000"/>
<rect x="6" y="6" width="1" height="1" fill="#000000"/>
<rect x="8" y="6" width="1" height="1" fill="#000000"/>
<rect x="10" y="6" width="1" height="1" fill="#000000"/>
<rect x="12" y="6" width="1" height="1" fill="#000000"/>
<rect x="14" y="6" width="1" height="1" fill="#000000"/>
<rect x="16" y="6" width="1" height="1" fill="#000000"/>
<rect x="18" y="6" width="1" height="1" fill="#000000"/>
<rect x="19" y="6" width="1" height="1" fill="#000000"/>
<rect x="20" y="6" width="1" height="1" fill="#000000"/>
<rect x="21" y="6" width="1" height="1" fill="#000000"/>
<rect x="22" y="6" width="1" height="1" fill="#000000"/>
<rect x="23" y="6" width="1" height="1" fill="#000000"/>
<rect x="24" y="6" width="1" height="1" fill="#000000"/>
<rect x="8" y="7" width="1" height="1" fill="#000000"/>
<rect x="10" y="7" width="1" height="1" fill="#000000"/>
<rect x="11" y="7" width="1" height="1" fill="#000000"/>
<rect x="14" y="7" width="1" height="1" fill="#000000"/>
<rect x="15" y="7" width="1" height="1" fill="#000000"/>
<rect x="0" y="8" width="1" height="1" fill="#000000"/>
<rect x="1" y="8" width="1" height="1" fill="#000000"/>
<rect x="3" y="8" width="1" height="1" fill="#000000"/>
<rect x="6" y="8" width="1" height="1" fill="#000000"/>
<rect x="7" y="8" width="1" height="1" fill="#000000"/>
<rect x="11" y="8" width="1" height="1" fill="#000000"/>
<rect x="12" y="8" width="1" height="1" fill="#000000"/>
<rect x="13" y="8" width="1" height="1" fill="#000000"/>
<rect x="14" y="8" width="1" height="1" fill="#000000"/>
<rect x="16" y="8" width="1" height="1" fill="#000000"/>
<rect x="18" y="8" width="1" height="1" fill="#000000"/>
<rect x="19" y="8" width="1" height="1" fill="#000000"/>
<rect x="20" y="8" width="1" height="1" fill="#000000"/>
<rect x="22" y="8" width="1" height="1" fill="#000000"/>
<rect x="23" y="8" width="1" height="1" fill="#000000"/>
<rect x="0" y="9" width="1" height="1" fill="#000000"/>
<rect x="4" y="9" width="1" height="1" fill="#000000"/>
<rect x="9" y="9" width="1" height="1" fill="#000000"/>
<rect x="11" y="9" width="1" height="1" fill="#000000"/>
<rect x="12" y="9" width="1" height="1" fill="#000000"/>
<rect x="16" y="9" width="1" height="1" fill="#000000"/>
<rect x="18" y="9" width="1" height="1" fill="#000000"/>
<rect x="24" y="9" width="1" height="1" fill="#000000"/>
<rect x="0" y="10" width="1" height="1" fill="#000000"/>
<rect x="1" y="10" width="1" height="1" fill="#000000"/>
<rect x="2" y="10" width="1" height="1" fill="#000000"/>
<rect x="3" y="10" width="1" height="1" fill="#000000"/>
<rect x="5" y="10" width="1" height="1" fill="#000000"/>
<rect x="6" y="10" width="1" height="1" fill="#000000"/>
<rect x="8" y="10" width="1" height="1" fill="#000000"/>
<rect x="11" y="10" width="1" height="1" fill="#000000"/>
<rect x="12" y="10" width="1" height="1" fill="#000000"/>
<rect x="13" y="10" width="1" height="1" fill="#000000"/>
<rect x="16" y="10" width="1" height="1" fill="#000000"/>
<rect x="18" y="10" width="1" height="1" fill="#000000"/>
<rect x="19" y="10" width="1" height="1" fill="#000000"/>
<rect x="23" y="10" width="1" height="1" fill="#000000"/>
<rect x="24" y="10" width="1" height="1" fill="#000000"/>
<rect x="0" y="11" width="1" height="1" fill="#000000"/>
<rect x="3" y="11" width="1" height="1" fill="#000000"/>
<rect x="9" y="11" width="1" height="1" fill="#000000"/>
<rect x="10" y="11" width="1" height="1" fill="#000000"/>
<rect x="11" y="11" width="1" height="1" fill="#000000"/>
<rect x="12" y="11" width="1" height="1" fill="#000000"/>
<rect x="13" y="11" width="1" height="1" fill="#000000"/>
<rect x="19" y="11" width="1" height="1" fill="#000000"/>
<rect x="20" y="11" width="1" height="1" fill="#000000"/>
<rect x="1" y="12" width="1" height="1" fill="#000000"/>
<rect x="2" y="12" width="1" height="1" fill="#000000"/>
<rect x="3" y="12" width="1" height="1" fill="#000000"/>
<rect x="4" y="12" width="1" height="1" fill="#000000"/>
<rect x="6" y="12" width="1" height="1" fill="#000000"/>
<rect x="8" y="12" width="1" height="1" fill="#000000"/>
<rect x="10" y="12" width="1" height="1" fill="#000000"/>
<rect x="11" y="12" width="1" height="1" fill="#000000"/>
<rect x="14" y="12" width="1" height="1" fill="#000000"/>
<rect x="16" y="12" width="1" height="1" fill="#000000"/>
<rect x="17" y="12" width="1" height="1" fill="#000000"/>
<rect x="18" y="12" width="1" height="1" fill="#000000"/>
<rect x="21" y="12" width="1" height="1" fill="#000000"/>
<rect x="23" y="12" width="1" height="1" fill="#000000"/>
<rect x="24" y="12" width="1" height="1" fill="#000000"/>
<rect x="1" y="13" width="1" height="1" fill="#000000"/>
<rect x="5" y="13" width="1" height="1" fill="#000000"/>
<rect x="7" y="13" width="1" height="1" fill="#000000"/>
<rect x="9" y="13" width="1" height="1" fill="#000000"/>
<rect x="11" y="13" width="1" height="1" fill="#000000"/>
<rect x="13" y="13" width="1" height="1" fill="#000000"/>
<rect x="17" y="13" width="1" height="1" fill="#000000"/>
<rect x="18" y="13" width="1" height="1" fill="#000000"/>
<rect x="19" y="13" width="1" height="1" fill="#000000"/>
<rect x="21" y="13" width="1" height="1" fill="#000000"/>
<rect x="22" y="13" width="1" height="1" fill="#000000"/>
<rect x="24" y="13" width="1" height="1" fill="#000000"/>
<rect x="0" y="14" width="1" height="1" fill="#000000"/>
<rect x="4" y="14" width="1" height="1" fill="#000000"/>
<rect x="6" y="14" width="1" height="1" fill="#000000"/>
<rect x="7" y="14" width="1" height="1" fill="#000000"/>
<rect x="8" y="14" width="1" height="1" fill="#000000"/>
<rect x="10" y="14" width="1" height="1" fill="#000000"/>
<rect x="11" y="14" width="1" height="1" fill="#000000"/>
<rect x="13" y="14" width="1" height="1" fill="#000000"/>
<rect x="14" y="14" width="1" height="1" fill="#000000"/>
<rect x="17" y="14" width="1" height="1" fill="#000000"/>
<rect x="18" y="14" width="1" height="1" fill="#000000"/>
<rect x="19" y="14" width="1" height="1" fill="#000000"/>
<rect x="20" y="14" width="1" height="1" fill="#000000"/>
<rect x="22" y="14" width="1" height="1" fill="#000000"/>
<rect x="24" y="14" width="1" height="1" fill="#000000"/>
<rect x="1" y="15" width="1" height="1" fill="#000000"/>
<rect x="4" y="15" width="1" height="1" fill="#000000"/>
<rect x="8" y="15" width="1" height="1" fill="#000000"/>
<rect x="9" y="15" width="1" height="1" fill="#000000"/>
<rect x="10" y="15" width="1" height="1" fill="#000000"/>
<rect x="11" y="15" width="1" height="1" fill="#000000"/>
<rect x="15" y="15" width="1" height="1" fill="#000000"/>
<rect x="18" y="15" width="1" height="1" fill="#000000"/>
<rect x="20" y="15" width="1" height="1" fill="#000000"/>
<rect x="23" y="15" width="1" height="1" fill="#000000"/>
<rect x="0" y="16" width="1" height="1" fill="#000000"/>
<rect x="1" y="16" width="1" height="1" fill="#000000"/>
<rect x="2" y="16" width="1" height="1" fill="#000000"/>
<rect x="3" y="16" width="1" height="1" fill="#000000"/>
<rect x="5" y="16" width="1" height="1" fill="#000000"/>
<rect x="6" y="16" width="1" height="1" fill="#000000"/>
<rect x="7" y="16" width="1" height="1" fill="#000000"/>
<rect x="8" y="16" width="1" height="1" fill="#000000"/>
<rect x="9" y="16" width="1" height="1" fill="#000000"/>
<rect x="12" y="16" width="1" height="1" fill="#000000"/>
<rect x="13" y="16" width="1" height="1" fill="#000000"/>
<rect x="16" y="16" width="1" height="1" fill="#000000"/>
<rect x="17" y="16" width="1" height="1" fill="#000000"/>
<rect x="18" y="16" width="1" height="1" fill="#000000"/>
<rect x="19" y="16" width="1" height="1" fill="#000000"/>
<rect x="20" y="16" width="1" height="1" fill="#000000"/>
<rect x="21" y="16" width="1" height="1" fill="#000000"/>
<rect x="22" y="16" width="1" height="1" fill="#000000"/>
<rect x="8" y="17" width="1" height="1" fill="#000000"/>
<rect x="12" y="17" width="1" height="1" fill="#000000"/>
<rect x="13" y="17" width="1" height="1" fill="#000000"/>
<rect x="14" y="17" width="1" height="1" fill="#000000"/>
<rect x="15" y="17" width="1" height="1" fill="#000000"/>
<rect x="16" y="17" width="1" height="1" fill="#000000"/>
<rect x="20" y="17" width="1" height="1" fill="#000000"/>
<rect x="21" y="17" width="1" height="1" fill="#000000"/>
<rect x="24" y="17" width="1" height="1" fill="#000000"/>
<rect x="0" y="18" width="1" height="1" fill="#000000"/>
<rect x="1" y="18" width="1" height="1" fill="#000000"/>
<rect x="2" y="18" width="1" height="1" fill="#000000"/>
<rect x="3" y="18" width="1" height="1" fill="#000000"/>
<rect x="4" y="18" width="1" height="1" fill="#000000"/>
<rect x="5" y="18" width="1" height="1" fill="#000000"/>
<rect x="6" y="18" width="1" height="1" fill="#000000"/>
<rect x="8" y="18" width="1" height="1" fill="#000000"/>
<rect x="11" y="18" width="1" height="1" fill="#000000"/>
<rect x="12" y="18" width="1" height="1" fill="#000000"/>
<rect x="14" y="18" width="1" height="1" fill="#000000"/>
<rect x="15" y="18" width="1" height="1" fill="#000000"/>
<rect x="16" y="18" width="1" height="1" fill="#000000"/>
<rect x="18" y="18" width="1" height="1" fill="#000000"/>
<rect x="20" y="18" width="1" height="1" fill="#000000"/>
<rect x="21" y="18" width="1" height="1" fill="#000000"/>
<rect x="23" y="18" width="1" height="1" fill="#000000"/>
<rect x="24" y="18" width="1" height="1" fill="#000000"/>
<rect x="0" y="19" width="1" height="1" fill="#000000"/>
<rect x="6" y="19" width="1" height="1" fill="#000000"/>
<rect x="9" y="19" width="1" height="1" fill="#000000"/>
<rect x="10" y="19" width="1" height="1" fill="#000000"/>
<rect x="12" y="19" width="1" height="1" fill="#000000"/>
<rect x="14" y="19" width="1" height="1" fill="#000000"/>
<rect x="16" y="19" width="1" height="1" fill="#000000"/>
<rect x="20" y="19" width="1" height="1" fill="#000000"/>
<rect x="21" y="19" width="1" height="1" fill="#000000"/>
<rect x="22" y="19" width="1" height="1" fill="#000000"/>
<rect x="23" y="19" width="1" height="1" fill="#000000"/>
<rect x="0" y="20" width="1" height="1" fill="#000000"/>
<rect x="2" y="20" width="1" height="1" fill="#000000"/>
<rect x="3" y="20" width="1" height="1" fill="#000000"/>
<rect x="4" y="20" width="1" height="1" fill="#000000"/>
<rect x="6" y="20" width="1" height="1" fill="#000000"/>
<rect x="9" y="20" width="1" height="1" fill="#000000"/>
<rect x="10" y="20" width="1" height="1" fill="#000000"/>
<rect x="16" y="20" width="1" height="1" fill="#000000"/>
<rect x="17" y="20" width="1" height="1" fill="#000000"/>
<rect x="18" y="20" width="1" height="1" fill="#000000"/>
<rect x="19" y="20" width="1" height="1" fill="#000000"/>
<rect x="20" y="20" width="1" height="1" fill="#000000"/>
<rect x="21" y="20" width="1" height="1" fill="#000000"/>
<rect x="24" y="20" width="1" height="1" fill="#000000"/>
<rect x="0" y="21" width="1" height="1" fill="#000000"/>
<rect x="2" y="21" width="1" height="1" fill="#000000"/>
<rect x="3" y="21" width="1" height="1" fill="#000000"/>
<rect x="4" y="21" width="1" height="1" fill="#000000"/>
<rect x="6" y="21" width="1" height="1" fill="#000000"/>
<rect x="8" y="21" width="1" height="1" fill="#000000"/>
<rect x="11" y="21" width="1" height="1" fill="#000000"/>
<rect x="14" y="21" width="1" height="1" fill="#000000"/>
<rect x="15" y="21" width="1" height="1" fill="#000000"/>
<rect x="19" y="21" width="1" height="1" fill="#000000"/>
<rect x="20" y="21" width="1" height="1" fill="#000000"/>
<rect x="21" y="21" width="1" height="1" fill="#000000"/>
<rect x="22" y="21" width="1" height="1" fill="#000000"/>
<rect x="0" y="22" width="1" height="1" fill="#000000"/>
<rect x="2" y="22" width="1" height="1" fill="#000000"/>
<rect x="3" y="22" width="1" height="1" fill="#000000"/>
<rect x="4" y="22" width="1" height="1" fill="#000000"/>
<rect x="6" y="22" width="1" height="1" fill="#000000"/>
<rect x="17" y="22" width="1" height="1" fill="#000000"/>
<rect x="19" y="22" width="1" height="1" fill="#000000"/>
<rect x="20" y="22" width="1" height="1" fill="#000000"/>
<rect x="22" y="22" width="1" height="1" fill="#000000"/>
<rect x="24" y="22" width="1" height="1" fill="#000000"/>
<rect x="0" y="23" width="1" height="1" fill="#000000"/>
<rect x="6" y="23" width="1" height="1" fill="#000000"/>
<rect x="8" y="23" width="1" height="1" fill="#000000"/>
<rect x="9" y="23" width="1" height="1" fill="#000000"/>
<rect x="14" y="23" width="1" height="1" fill="#000000"/>
<rect x="16" y="23" width="1" height="1" fill="#000000"/>
<rect x="21" y="23" width="1" height="1" fill="#000000"/>
<rect x="0" y="24" width="1" height="1" fill="#000000"/>
<rect x="1" y="24" width="1" height="1" fill="#000000"/>
<rect x="2" y="24" width="1" height="1" fill="#000000"/>
<rect x="3" y="24" width="1" height="1" fill="#000000"/>
<rect x="4" y="24" width="1" height="1" fill="#000000"/>
<rect x="5" y="24" width="1" height="1" fill="#000000"/>
<rect x="6" y="24" width="1" height="1" fill="#000000"/>
<rect x="8" y="24" width="1" height="1" fill="#000000"/>
<rect x="9" y="24" width="1" height="1" fill="#000000"/>
<rect x="10" y="24" width="1" height="1" fill="#000000"/>
<rect x="12" y="24" width="1" height="1" fill="#000000"/>
<rect x="15" y="24" width="1" height="1" fill="#000000"/>
<rect x="16" y="24" width="1" height="1" fill="#000000"/>
<rect x="17" y="24" width="1" height="1" fill="#000000"/>
<rect x="19" y="24" width="1" height="1" fill="#000000"/>
<rect x="23" y="24" width="1" height="1" fill="#000000"/>
<rect x="24" y="24" width="1" height="1" fill="#000000"/>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 466 KiB

View File

@ -1 +0,0 @@
/home/indigo/.unison/stm32_buisnesscard.prf