component
STM32G0B1KCT6
Public Made by Adomby adom
STMicroelectronics Microcontrollers (MCU/MPU/SOC), LQFP-32(7x7). Pinout checked against ST's open pin data, KiCad symbol/footprint/3D.
main
"""Exact-part symbol from the existing design; ST LQFP32 example footprint.
Project extraction is not a claim of native validation or manufacturer CAD.
"""
import sys,copy,json
from pathlib import Path
p=Path(__file__).parent;root=p.parents[1];sys.path.insert(0,str(root/'tools'));import sexp
mpn='STM32G0B1KCT6';slug=mpn.lower()
sch=sexp.parse((root/'kicad/digital.kicad_sch').read_text());s=copy.deepcopy(next(x for x in sexp.find(sexp.first(sch,'lib_symbols'),'symbol') if x[1]=='Load:'+mpn));s[1]=mpn
for x in sexp.find(s,'symbol'):x[1]=x[1].replace('Load:','')
for prop in sexp.find(s,'property'):
if prop[1]=='Footprint':prop[2]=mpn+':STM32G0B1KCT6_ST_LQFP32'
if prop[1]=='Datasheet':prop[2]='https://www.st.com/resource/en/datasheet/stm32g0b1kc.pdf'
for key,value in [('Manufacturer','STMicroelectronics'),('Mouser','511-STM32G0B1KCT6'),('Adom Wiki','https://wiki.adom.inc/adom/'+slug)]:
for old in sexp.find(s,'property'):
if old[1]==key:s.remove(old)
s.append(sexp.parse(f'(property "{key}" "{value}" (at 0 0 0) (hide yes) (effects (font (size 1.27 1.27))))'))
names={2:'PC14/OSC32_IN',3:'PC15/OSC32_OUT',4:'VDD/VDDA',5:'VSS/VSSA',6:'PF2/NRST',19:'PA9',21:'PA10',22:'PA11/PA9',23:'PA12/PA10',25:'PA14/BOOT0'}
for unit in sexp.find(s,'symbol'):
for pin in sexp.find(unit,'pin'):
n=int(sexp.first(pin,'number')[1])
if n in names:sexp.first(pin,'name')[1]=names[n]
(p/(slug+'.kicad_sym')).write_text('(kicad_symbol_lib (version 20231120) (generator "adom-component-audit")\n'+sexp.dump(s)+'\n)\n')
pads=[]
for n in range(1,33):
if n<=8:x,y,dx,dy=-4.3,(n-4.5)*.8,1.2,.45
elif n<=16:x,y,dx,dy=(n-12.5)*.8,4.3,.45,1.2
elif n<=24:x,y,dx,dy=4.3,(20.5-n)*.8,1.2,.45
else:x,y,dx,dy=(28.5-n)*.8,-4.3,.45,1.2
pads.append(dict(number=str(n),x=x,y=y,dx=dx,dy=dy,shape='rect',type='smd'))
fp={'footprintName':'STM32G0B1KCT6_ST_LQFP32','description':'ST DS13560 Rev6 Fig40: 1.2x0.45 mm pads, 0.8 pitch, inner7.4 outer9.8 mm; process qualification pending.','pads':pads,'body':{'x1':-3.5,'y1':-3.5,'x2':3.5,'y2':3.5},'courtyard':{'x1':-5.2,'y1':-5.2,'x2':5.2,'y2':5.2}}
(p/'footprint-input.json').write_text(json.dumps(fp,indent=2)+'\n')