Парсер закончен, теперь у ClockTree есть информация с ограничениями
частот:
[name: kHsiFrequencyHz, type: fixed_src, signal: [ref: HSI_VALUE, default_value: 16000000, max_value: 16000000, min_value: 16000000], input: None, output: ['SysClkSource', 'PLLSource', 'MCO1Mult', 'FMPI2C1Mult', 'LPTIM1Mult']] [name: kHseFrequencyHz, type: varied_src, signal: [ref: HSE_VALUE, default_value: 25000000, max_value: 50000000, min_value: 1000000], input: None, output: ['SysClkSource', 'HSERTCDevisor', 'PLLSource', 'MCO1Mult', 'MCO2Mult']] [name: kLsiFrequencyHz, type: fixed_src, signal: [ref: LSI_VALUE, default_value: 32000, max_value: 32000, min_value: 32000], input: None, output: ['IWDGOutput', 'RTCClkSource', 'LPTIM1Mult']] [name: kLseFrequencyHz, type: varied_src, signal: [ref: LSE_VALUE, default_value: 32768, max_value: 32768, min_value: 32768], input: None, output: ['RTCClkSource', 'MCO1Mult', 'LPTIM1Mult']] [name: kRtcClkSource, type: mux, signal: [ref: RTCFreq_Value, default_value: 32000, max_value: 1000000, min_value: 0], input: ['HSERTCDevisor', 'LSEOSC', 'LSIRC'], output: ['RTCOutput']] [name: kRtcClkHz, type: out, signal: None, input: ['RTCClkSource'], output: None] [name: kIwdgClkHz, type: out, signal: None, input: ['LSIRC'], output: None] [name: kPllN, type: mul, signal: [ref: VCOOutputFreq_Value, default_value: 192000000, max_value: 432000000, min_value: 100000000], input: ['PLLM'], output: ['PLLQ', 'PLLP', 'PLLR']] [name: kPllP, type: div, signal: [ref: PLLCLKFreq_Value, default_value: 96000000, max_value: 100000000, min_value: 24000000], input: ['PLLN'], output: ['SysClkSource', 'MCO1Mult', 'MCO2Mult']] [name: kPllQ, type: div, signal: [ref: VCOQOutputFreq_Value, default_value: 192000000, max_value: 75000000, min_value: None], input: ['PLLN'], output: ['USBOTGOutput']] [name: kPllR, type: div, signal: [ref: VCOROutputFreq_Value, default_value: 192000000, max_value: 100000000, min_value: 24000000], input: ['PLLN'], output: ['I2SSrc', 'MCO2Mult']]
Осталось дописать кодогенератор и шаблон для него.