Skip to content

Instantly share code, notes, and snippets.

@tzarc
Last active May 28, 2023 18:01
Show Gist options
  • Save tzarc/167d69870d6f6ff6dcf40e506da766e1 to your computer and use it in GitHub Desktop.
Save tzarc/167d69870d6f6ff6dcf40e506da766e1 to your computer and use it in GitHub Desktop.

USB:

STM32F0xx STM32F1xx STM32F37x STM32F3xx STM32G0xx STM32G4xx STM32L0xx STM32L1xx STM32L4xx STM32L5xx STM32WBxx
STM32F042x6 STM32F101xE STM32F373xC STM32F302x8 STM32G0B1xx STM32G431xx STM32L052xx STM32L100xB STM32L422xx STM32L552xx STM32WB55xx
STM32F048xx STM32F101xG STM32F302xC STM32G0C1xx STM32G441xx STM32L053xx STM32L100xBA STM32L432xx
STM32F070x6 STM32F103x6 STM32F302xE STM32G473xx STM32L062xx STM32L100xC STM32L433xx
STM32F070xB STM32F103xB STM32F303xC STM32G474xx STM32L063xx STM32L151xB STM32L443xx
STM32F072xB STM32F103xE STM32F303xE STM32G483xx STM32L072xx STM32L151xBA STM32L452xx
STM32F078xx STM32F103xG STM32F358xC STM32G484xx STM32L073xx STM32L151xC
STM32G491xx STM32L151xCA
STM32L151xD
STM32L151xDX
STM32L151xE
STM32L152xB
STM32L152xBA
STM32L152xC
STM32L152xCA
STM32L152xD
STM32L162xC
STM32L162xCA
STM32L162xD
STM32L162xDX
STM32L162xE

OTG:

STM32F1xx STM32F4xx STM32F7xx STM32H7xx STM32L4xx STM32L4xx+
STM32F105xC STM32F205xx STM32F722xx STM32H723xx STM32L475xx STM32L4P5xx
STM32F107xC STM32F207xx STM32F723xx STM32H725xx STM32L476xx STM32L4Q5xx
STM32F215xx STM32F732xx STM32H730xx STM32L486xx STM32L4R5xx
STM32F217xx STM32F733xx STM32H733xx STM32L496xx STM32L4R7xx
STM32F401xC STM32F745xx STM32H735xx STM32L4A6xx STM32L4R9xx
STM32F401xE STM32F746xx STM32H743xx STM32L4S5xx
STM32F401xx STM32F756xx STM32H745xx STM32L4S7xx
STM32F405xx STM32F765xx STM32H747xx STM32L4S9xx
STM32F407xx STM32F767xx STM32H750xx
STM32F411xE STM32F769xx STM32H753xx
STM32F411xx STM32F777xx STM32H755xx
STM32F412Cx STM32F779xx STM32H757xx
STM32F412Rx STM32H7A3xx
STM32F412Vx STM32H7A3xxQ
STM32F412Zx STM32H7B0xx
STM32F412xx STM32H7B3xx
STM32F413xx STM32H7B3xxQ
STM32F415xx
STM32F417xx
STM32F427xx
STM32F429xx
STM32F437xx
STM32F439xx
STM32F446xx
STM32F469xx
STM32F479xx
#!/bin/bash
# Copyright 2018-2023 Nick Brassel (@tzarc)
# SPDX-License-Identifier: GPL-2.0-or-later
umask 022
this_script="$(realpath "${BASH_SOURCE[0]}")"
script_dir="$(realpath "$(dirname "$this_script")")"
function searcher() {
local search=$1
local replace=$2
pushd "$script_dir/qmk_firmware" >/dev/null
find "lib/chibios" -name stm32_registry.h |
while read file; do
grep -Po1 'defined\((STM32[^_][^\)]+)' "$file" |
grep STM32 |
grep -v 'F2XX' |
grep -v 'MP' |
grep -v '_' |
cut -d'(' -f2 |
sort |
uniq |
while read chip; do
echo -e "#define $chip\n#include \"$file\"\n#ifndef $search\n#define $search FALSE\n#endif\n::: $search :::" |
arm-none-eabi-gcc -E - 2>&1 |
grep ':::' |
awk '{print $2}' |
xargs echo $(basename $(dirname $file)) $chip |
grep TRUE |
sed -e 's@TRUE@'$replace'@g' |
sort |
uniq
done |
sort |
uniq
done
popd >/dev/null
}
function all_targets() {
{
searcher STM32_HAS_USB USB
searcher STM32_HAS_OTG1 OTG
searcher STM32_HAS_OTG2 OTG
} | sort | uniq | column -t
}
if [[ ! -f "$script_dir/stm32_usb.txt" ]]; then
all_targets >"$script_dir/stm32_usb.txt"
fi
function peripheral_targets() {
local peripheral_type="$1"
local families=$(cat "$script_dir/stm32_usb.txt" | awk "/${peripheral_type}\$/ {print \$1}" | sort | uniq)
for family in $(echo $families | sort | uniq); do
local re_family=$(echo $family | sed -e 's@+@\\+@g')
local chips=$(cat "$script_dir/stm32_usb.txt" | awk "/${peripheral_type}\$/" | awk "/^${re_family} / {print \$2}" | sort | uniq)
for chip in $chips; do
echo "$family: $chip"
done
done
}
function markdown_table() {
# Accepts lines in format "family: chip" and transposes them into a table
local -A families
local -A chips
while read line; do
local family="$(echo "$line" | cut -d: -f1 | xargs echo)"
local chip="$(echo "$line" | cut -d: -f2 | xargs echo)"
families[$family]=1
chips[$family]="${chips[$family]} $chip"
done < <(cat -)
local maxlen=0
for family in "${!families[@]}"; do
local thislen=$(echo ${chips[$family]} | wc -w)
if [[ $maxlen -lt $thislen ]]; then maxlen=$thislen; fi
done
echo -n "|"
for family in $(echo "${!families[@]}" | tr ' ' '\n' | sort | uniq); do echo -n " $family |"; done
echo
echo -n "|"
for family in $(echo "${!families[@]}" | tr ' ' '\n' | sort | uniq); do echo -n " ---- |"; done
echo
for ((i = 1; i <= $maxlen; i++)); do
echo -n "|"
for family in $(echo "${!families[@]}" | tr ' ' '\n' | sort | uniq); do
local thislen=$(echo ${chips[$family]} | wc -w)
if [[ $thislen -lt $i ]]; then
echo -n " |"
continue
fi
local chip=$(echo ${chips[$family]} | cut -d' ' -f$i)
echo -n " $chip |"
done
echo
done
}
{
echo "### USB:"
echo
peripheral_targets USB | markdown_table
echo
echo "### OTG:"
echo
peripheral_targets OTG | markdown_table
} | tee "$script_dir/stm32_usb.md"
@wanesty
Copy link

wanesty commented May 13, 2023

madman actaually impressive tho

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment