function setting = stm32f4_getlist () setting = []; mcu_list = []; mcu_list.list = []; setting.devices = []; setting.list = []; % Define MCU support list DEVICES_LIST = {... 'STM32F401CBU',... 'STM32F401CCU',... 'STM32F401CDU',... 'STM32F401CEU',... 'STM32F401RBT',... 'STM32F401RCT',... 'STM32F401RDT',... 'STM32F401RET',... 'STM32F401VBT',... 'STM32F401VCT',... 'STM32F401VDT',... 'STM32F401VET',... ... 'STM32F405OEY',... 'STM32F405OGY',... 'STM32F405RGT',... 'STM32F405VGT',... 'STM32F405ZGT',... 'STM32F407IET',... 'STM32F407IGT',... 'STM32F407VET',... 'STM32F407VGT',... 'STM32F407ZET',... 'STM32F407ZGT',... ... 'STM32F415OGY',... 'STM32F415RGT',... 'STM32F415VGT',... 'STM32F415ZGT',... 'STM32F417IET',... 'STM32F417IGT',... 'STM32F417VET',... 'STM32F417VGT',... 'STM32F417ZET',... 'STM32F417ZGT',... ... 'STM32F410C8U',... 'STM32F410CBT',... 'STM32F410R8T',... 'STM32F410RBT',... 'STM32F410T8Y',... 'STM32F410TBY',... 'STM32F411CCU',... 'STM32F411CEU',... 'STM32F411RCT',... 'STM32F411RET',... 'STM32F411VCT',... 'STM32F411VET',... 'STM32F412CEU',... 'STM32F412CGU',... 'STM32F412RET',... 'STM32F412RGT',... 'STM32F412VET',... 'STM32F412VGT',... 'STM32F412ZET',... 'STM32F412ZGT',... ... 'STM32F427AGH',... 'STM32F427AIH',... 'STM32F427IGH',... 'STM32F427IIH',... 'STM32F427VGT',... 'STM32F427VIT',... 'STM32F427ZGT',... 'STM32F427ZIT',... 'STM32F429AGH',... 'STM32F429AIH',... 'STM32F429BET',... 'STM32F429BGT',... 'STM32F429BIT',... 'STM32F429IEH',... 'STM32F429IGH',... 'STM32F429IIH',... 'STM32F429NEH',... 'STM32F429NGH',... 'STM32F429NIH',... 'STM32F429VET',... 'STM32F429VGT',... 'STM32F429VIT',... 'STM32F429ZET',... 'STM32F429ZGT',... 'STM32F429ZIT',... 'STM32F437AIH',... 'STM32F437IGH',... 'STM32F437IIH',... 'STM32F437VGT',... 'STM32F437VIT',... 'STM32F437ZGT',... 'STM32F437ZIT',... 'STM32F439AIH',... 'STM32F439BGT',... 'STM32F439BIT',... 'STM32F439IGH',... 'STM32F439IIH',... 'STM32F439NGH',... 'STM32F439NIH',... 'STM32F439VGT',... 'STM32F439VIT',... 'STM32F439ZGT',... 'STM32F439ZIT',... 'STM32F446MCY',... 'STM32F446MEY',... 'STM32F446RCT',... 'STM32F446RET',... 'STM32F446VCT',... 'STM32F446VET',... 'STM32F446ZCT',... 'STM32F446ZET',... 'STM32F469AEH',... 'STM32F469AGH',... 'STM32F469AIH',... 'STM32F469BET',... 'STM32F469BGT',... 'STM32F469BIT',... 'STM32F469IEH',... 'STM32F469IGH',... 'STM32F469IIH',... 'STM32F469NEH',... 'STM32F469NGH',... 'STM32F469NIH',... 'STM32F469VIT',... 'STM32F469ZIT',... 'STM32F479AGH',... 'STM32F479AIH',... 'STM32F479BGT',... 'STM32F479BIT',... 'STM32F479IGH',... 'STM32F479IIT',... 'STM32F479NGH',... 'STM32F479NIH',... 'STM32F479VIT',... 'STM32F479ZIT'... }; PACKAGE_LIST = {... 'WLCSP36',... 'UFQFPN48',... 'LQFP48',... 'LQFP64',... 'WLCSP81',... 'WLCSP90',... 'LQFP100',... 'LQFP144',... 'BGA169',... 'BGA168',... 'UFBGA169',... 'WLCSP168',... 'BGA176',... 'UFBGA176',... 'LQFP176',... 'LQFP208',... 'BGA216'... }; % MCU package list setting.pkg = []; setting.pkg.WLCSP36 = []; setting.pkg.UFQFPN48 = []; setting.pkg.LQFP48 = []; setting.pkg.LQFP64 = []; setting.pkg.WLCSP81 = []; setting.pkg.WLCSP90 = []; setting.pkg.LQFP100 = []; setting.pkg.LQFP144 = []; setting.pkg.BGA169 = []; setting.pkg.BGA168 = []; setting.pkg.UFBGA169 = []; setting.pkg.WLCSP168 = []; setting.pkg.BGA176 = []; setting.pkg.UFBGA176 = []; setting.pkg.LQFP176 = []; setting.pkg.LQFP208 = []; setting.pkg.BGA216 = []; % I/O pin available for each package % = WLCSP36 = setting.pkg.WLCSP36.IO = {... 'C13','C14','C15','H0','H1','A0','A2','A3','A5',... 'C4','B2','B10','B12',... 'A8','A12','A13','A14','A15','B3','B4','B5','B6',... 'B7','B8','B9'}; % = UFQFPN48 = setting.pkg.UFQFPN48.IO = {... 'C13','C14','C15','H0','H1','A0','A1','A2','A3','A4','A5','A6',... 'A7','C4','B0','B1','B2','B10','B12','B13','B14','B15',... 'A8','A9','A10','A11','A12','A13','A14','A15','B3','B4','B5','B6',... 'B7','B8','B9'}; % = UFQFPN48 = setting.pkg.LQFP48.IO = {... 'C13','C14','C15','H0','H1','A0','A1','A2','A3','A4','A5','A6',... 'A7','C4','B0','B1','B2','B10','B12','B13','B14','B15',... 'A8','A9','A10','A11','A12','A13','A14','A15','B3','B4','B5','B6',... 'B7','B8','B9'}; % = LQFP64 = setting.pkg.LQFP64.IO = {... 'C13','C14','C15','H0','H1','C0','C1','C2','C3','A0','A1','A2','A3','A4','A5','A6',... 'A7','C4','C5','B0','B1','B2','B10','B11','B12','B13','B14','B15','C6','C7','C8','C9',... 'A8','A9','A10','A11','A12','A13','A14','A15','C10','C11','C12','D2','B3','B4','B5','B6',... 'B7','B8','B9'}; % = WLCSP81 = setting.pkg.WLCSP81.IO = {... 'E2','E3','E4','C13','C14','C15','H0','H1','C0','C2','C3','A0','A1',... 'A2','A3','A4','A5','A6','A7','C4','B0','B1','B2','E7','E8','E9','E10',... 'B10','B12','B13','B14','B15','D11','D12','D13',... 'C6','C7','C8','C9','A8','A9','A10','A11','A12','A13','A14','A15','C10','C11',... 'C12','D0','D1','D2','D4','D6','D7','B3','B4','B5','B6','B7','B8','B9'}; % = WLCSP90 = setting.pkg.WLCSP90.IO = {... 'C13','C14','C15','H0','H1','C0','C2','C3','A0','A1','A2','A3','A4','A5','A6','A7',... 'B0','B1','B2','E7','E8','E9','E10','E11','E12','E13','E14','E15','B10','B11','B12','B13',... 'B14','B15','D8','D9','D10','D11','D12','D14','D15','C6','C7','C8','C9','A8','A9','A10',... 'A11','A12','A13','I0','I1','A14','A15','C10','C11','C12','D0','D1','D2','D4','D5','D6',... 'D7','B3','B4','B5','B6','B7','B8','B9'}; % = LQFP100 = setting.pkg.LQFP100.IO = {... 'E2','E3','E4','E5','E6','C13','C14','C15','H0','H1','C0','C1','C2','C3','A0','A1',... 'A2','A3','A4','A5','A6','A7','C4','C5','B0','B1','B2','E7','E8','E9','E10','E11',... 'E12','E13','E14','E15','B10','B11','B12','B13','B14','B15','D8','D9','D10','D11','D12','D13',... 'D14','D15','C6','C7','C8','C9','A8','A9','A10','A11','A12','A13','A14','A15','C10','C11',... 'C12','D0','D1','D2','D3','D4','D5','D6','D7','B3','B4','B5','B6','B7','B8','B9',... 'E0','E1'}; % = LQFP144 = setting.pkg.LQFP144.IO = {... 'E2','E3','E4','E5','E6','C13','C14','C15','F0','F1','F2','F3','F4','F5','F6','F7',... 'F8','F9','F10','H0','H1','C0','C1','C2','C3','A0','A1','A2','A3','A4','A5','A6',... 'A7','C4','C5','B0','B1','B2','F11','F12','F13','F14','F15','G0','G1','E7','E8','E9',... 'E10','E11','E12','E13','E14','E15','B10','B11','B12','B13','B14','B15','D8','D9','D10','D11',... 'D12','D13','D14','D15','G2','G3','G4','G5','G6','G7','G8','C6','C7','C8','C9','A8',... 'A9','A10','A11','A12','A13','A14','A15','C10','C11','C12','D0','D1','D2','D3','D4','D5',... 'D6','D7','G9','G10','G11','G12','G13','G14','G15','B3','B4','B5','B6','B7','B8','B9',... 'E0','E1'}; % = BGA169 = setting.pkg.BGA169.IO = {... 'E2','E3','E4','E5','E6','C13','C14','C15','I9','I10','F0','F1','F2','F3',... 'F4','F5','F10','H0','H1','C0','C1','C2','C3','A0','A1','A2',... 'H2','H3','H4','H5','A3','A4','A5','A6','A7','C4','C5','B0','B1','B2','F11','F12',... 'F13','F14','F15','G0','G1','E7','E8','E9','E10','E11','E12','E13','E14','E15','B10','B11',... 'H6','H7','H8','H9','H10','H11','H12','B12','B13','B14','B15','D8','D9','D10','D11','D12',... 'D13','D14','D15','G2','G4','G5','G6','G7','G8','C6','C7','C8','C9','A8','A9',... 'A10','A11','A12','A13','H13','H14','H15','I0','I1','I2','I3','A14','A15','C10','C11','C12',... 'D0','D1','D2','D3','D4','D5','D6','D7','G10','G11','G12','G15','B3',... 'B4','B5','B6','B7','B8','B9','E0','E1','I4','I5','I6','I7'}; % = BGA168 = setting.pkg.BGA168.IO = setting.pkg.BGA169.IO; % = UFBGA169 = setting.pkg.UFBGA169.IO = setting.pkg.BGA169.IO; % = WLCSP168 = setting.pkg.WLCSP168.IO = setting.pkg.BGA169.IO; % = BGA176 = setting.pkg.BGA176.IO = {... 'E2','E3','E4','E5','E6','I8','C13','C14','C15','I9','I10','I11','F0','F1','F2','F3',... 'F4','F5','F6','F7','F8','F9','F10','H0','H1','C0','C1','C2','C3','A0','A1','A2',... 'H2','H3','H4','H5','A3','A4','A5','A6','A7','C4','C5','B0','B1','B2','F11','F12',... 'F13','F14','F15','G0','G1','E7','E8','E9','E10','E11','E12','E13','E14','E15','B10','B11',... 'H6','H7','H8','H9','H10','H11','H12','B12','B13','B14','B15','D8','D9','D10','D11','D12',... 'D13','D14','D15','G2','G3','G4','G5','G6','G7','G8','C6','C7','C8','C9','A8','A9',... 'A10','A11','A12','A13','H13','H14','H15','I0','I1','I2','I3','A14','A15','C10','C11','C12',... 'D0','D1','D2','D3','D4','D5','D6','D7','G9','G10','G11','G12','G13','G14','G15','B3',... 'B4','B5','B6','B7','B8','B9','E0','E1','I4','I5','I6','I7'}; % = UFBGA176 = setting.pkg.UFBGA176.IO = setting.pkg.BGA176.IO; % = LQFP176 = setting.pkg.LQFP176.IO = setting.pkg.BGA176.IO; % = LQFP208 = setting.pkg.LQFP208.IO = {... 'E2','E3','E4','E5','E6','I8','C13','C14','C15','I9','I10','I11','F0','F1','F2','I12','I13','I14','F3',... 'F4','F5','F6','F7','F8','F9','F10','H0','H1','C0','C1','C2','C3','A0','A1','A2','H2','H3','H4','H5',... 'H2','H3','H4','H5','A3','A4','A5','A6','A7','C4','C5','B0','B1','B2','I15','J0','J1','J2','J3','J4','F11','F12',... 'F13','F14','F15','G0','G1','E7','E8','E9','E10','E11','E12','E13','E14','E15','B10','B11',... 'J5','H6','H7','H8','H9','H10','H11','H12','B12','B13','B14','B15','D8','D9','D10','D11','D12',... 'D13','D14','D15','J6','J7','J8','J9','J10','J11','K0','K1','K2','G2','G3','G4','G5','G6','G7','G8','C6','C7','C8','C9','A8','A9',... 'A10','A11','A12','A13','H13','H14','H15','I0','I1','I2','I3','A14','A15','C10','C11','C12',... 'D0','D1','D2','D3','D4','D5','D6','D7','J12','J13','J14','J15','G9','G10','G11','G12','G13','G14','K3','K4','K5','K6','K7','G15','B3',... 'B4','B5','B6','B7','B8','B9','E0','E1','I4','I5','I6','I7'}; % = BGA216 = setting.pkg.BGA216.IO = {... 'E2','E3','E4','E5','E6','I8','C13','C14','C15','I9','I10','I11','F0','F1','F2','I12','I13','I14','F3',... 'F4','F5','F6','F7','F8','F9','F10','H0','H1','C0','C1','C2','C3','A0','A1','A2','H2','H3','H4','H5',... 'H2','H3','H4','H5','A3','A4','A5','A6','A7','C4','C5','B0','B1','B2','I15','J0','J1','J2','J3','J4','F11','F12',... 'F13','F14','F15','G0','G1','E7','E8','E9','E10','E11','E12','E13','E14','E15','B10','B11',... 'J5','H6','H7','H8','H9','H10','H11','H12','B12','B13','B14','B15','D8','D9','D10','D11','D12',... 'D13','D14','D15','J6','J7','J8','J9','J10','J11','K0','K1','K2','G2','G3','G4','G5','G6','G7','G8','C6','C7','C8','C9','A8','A9',... 'A10','A11','A12','A13','H13','H14','H15','I0','I1','I2','I3','A14','A15','C10','C11','C12',... 'D0','D1','D2','D3','D4','D5','D6','D7','J12','J13','J14','J15','G9','G10','G11','G12','G13','G14','K3','K4','K5','K6','K7','G15','B3',... 'B4','B5','B6','B7','B8','B9','E0','E1','I4','I5','I6','I7'}; % Update packages, basic Peripheral for pkg_idx=1:size(PACKAGE_LIST,2) pkg_str = char(PACKAGE_LIST{pkg_idx}); pkg_io_available = eval(['setting.pkg.' pkg_str '.IO;']); % GPIO port_list = {'A','B','C','D','E','F','G','H','I','J','K'}; for port_idx=1:size(port_list,2) port_str = char(port_list{port_idx}); pin_list = []; for pin_idx=1:16 pin = [port_str num2str(pin_idx-1)]; if ~isempty(find(strcmp(pkg_io_available,pin),1)) pin_list{end+1} = num2str(pin_idx-1); end end eval(['setting.pkg.' pkg_str '.GPIO' port_str '=pin_list;']); end % ADC adc = []; adc{1} = {'A0','A1','A2','A3','A4','A5','A6','A7','B0','B1','C0','C1','C2','C3','C4','C5','Y','Y','Y'}; adc{2} = {'A0','A1','A2','A3','A4','A5','A6','A7','B0','B1','C0','C1','C2','C3','C4','C5'}; adc{3} = {'A0','A1','A2','A3','F6','F7','F8','F9','F10','F3','C0','C1','C2','C3','F4','F5'}; eval(['setting.pkg.' pkg_str '.ADC=[];']); for adc_idx=1:size(adc,2) pin_list = []; for pin_idx=1:size(adc{adc_idx},2) pin = char(adc{adc_idx}{pin_idx}); if ~isempty(find(strcmp(pkg_io_available,pin),1)) ... || strcmp(pin,'Y') pin_list{end+1} = pin; else pin_list{end+1} = []; end end eval(['setting.pkg.' pkg_str '.ADC{' num2str(adc_idx) '}=pin_list;']); end % CAN can =[]; can{1}.tx = {'A12','B9','D1','H13','dd'}; can{1}.rx = {'A11','B8','D0','I9'}; can{2}.tx = {'B6','B13'}; can{2}.rx = {'B5','B12'}; eval(['setting.pkg.' pkg_str '.CAN=[];']); for can_idx=1:size(can,2) % tx pin_list_tx = []; for pin_idx=1:size(can{can_idx}.tx,2) pin = char(can{can_idx}.tx{pin_idx}); if ~isempty(find(strcmp(pkg_io_available,pin),1)) pin_list_tx{end+1} = pin; end end eval(['setting.pkg.' pkg_str '.CAN{' num2str(can_idx) '}.tx=pin_list_tx;']); % rx pin_list_rx = []; for pin_idx=1:size(can{can_idx}.rx,2) pin = char(can{can_idx}.rx{pin_idx}); if ~isempty(find(strcmp(pkg_io_available,pin),1)) pin_list_rx{end+1} = pin; end end eval(['setting.pkg.' pkg_str '.CAN{' num2str(can_idx) '}.rx=pin_list_rx;']); end % DAC dac = []; dac{1} = {'A4'}; dac{2} = {'A5'}; eval(['setting.pkg.' pkg_str '.DAC=[];']); for dac_idx=1:size(dac,2) pin_list = []; for pin_idx=1:size(dac{dac_idx},2) pin = char(dac{dac_idx}{pin_idx}); if ~isempty(find(strcmp(pkg_io_available,pin),1)) pin_list{end+1} = pin; end end eval(['setting.pkg.' pkg_str '.DAC{' num2str(dac_idx) '}=pin_list;']); end % UART uart = []; uart{1}.tx = {'A9','B6'}; uart{1}.rx = {'A10','B7'}; uart{1}.cts = {'A11'}; uart{1}.rts = {'A12'}; uart{2}.tx = {'A2','D5'}; uart{2}.rx = {'A3','D6'}; uart{2}.cts = {'A0','D3'}; uart{2}.rts = {'A1','D4'}; uart{3}.tx = {'B10','C10','D8'}; uart{3}.rx = {'B11','C11','D9'}; uart{3}.cts = {'B13','D11'}; uart{3}.rts = {'B14','D12'}; uart{4}.tx = {'A0','C10'}; uart{4}.rx = {'A1','C11'}; uart{4}.cts = {}; uart{4}.rts = {}; uart{5}.tx = {'C12'}; uart{5}.rx = {'D2'}; uart{5}.cts = {}; uart{5}.rts = {}; uart{6}.tx = {'C6','G14'}; uart{6}.rx = {'C7','G9'}; uart{6}.cts = {'G13','G15'}; uart{6}.rts = {'G8','G12'}; %#ok<*AGROW> eval(['setting.pkg.' pkg_str '.UART=[];']); for uart_idx=1:size(uart,2) % tx pin_list_tx = []; for pin_idx=1:size(uart{uart_idx}.tx,2) pin = char(uart{uart_idx}.tx{pin_idx}); if ~isempty(find(strcmp(pkg_io_available,pin),1)) pin_list_tx{end+1} = pin; %#ok end end eval(['setting.pkg.' pkg_str '.UART{' num2str(uart_idx) '}.tx=pin_list_tx;']); % rx pin_list_rx = []; for pin_idx=1:size(uart{uart_idx}.rx,2) pin = char(uart{uart_idx}.rx{pin_idx}); if ~isempty(find(strcmp(pkg_io_available,pin),1)) pin_list_rx{end+1} = pin; end end eval(['setting.pkg.' pkg_str '.UART{' num2str(uart_idx) '}.rx=pin_list_rx;']); % cts pin_list_cts = []; for pin_idx=1:size(uart{uart_idx}.cts,2) pin = char(uart{uart_idx}.cts{pin_idx}); if ~isempty(find(strcmp(pkg_io_available,pin),1)) pin_list_cts{end+1} = pin; end end eval(['setting.pkg.' pkg_str '.UART{' num2str(uart_idx) '}.cts=pin_list_cts;']); % rts pin_list_rts = []; for pin_idx=1:size(uart{uart_idx}.rts,2) pin = char(uart{uart_idx}.rts{pin_idx}); if ~isempty(find(strcmp(pkg_io_available,pin),1)) pin_list_rts{end+1} = pin; end end eval(['setting.pkg.' pkg_str '.UART{' num2str(uart_idx) '}.rts=pin_list_rts;']); end % I2C i2c = []; i2c{1}.scl = {'B6','B8'}; i2c{1}.sda = {'B7','B9'}; i2c{2}.scl = {'B10','F1','H4'}; i2c{2}.sda = {'B11','F0','H5'}; i2c{3}.scl = {'A8','H7'}; i2c{3}.sda = {'C9','H8'}; eval(['setting.pkg.' pkg_str '.I2C=[];']); for i2c_idx=1:size(i2c,2) % scl pin_list_scl = []; for pin_idx=1:size(i2c{i2c_idx}.scl,2) pin = char(i2c{i2c_idx}.scl{pin_idx}); if ~isempty(find(strcmp(pkg_io_available,pin),1)) pin_list_scl{end+1} = pin; end end eval(['setting.pkg.' pkg_str '.I2C{' num2str(i2c_idx) '}.scl=pin_list_scl;']); % sda pin_list_sda = []; for pin_idx=1:size(i2c{i2c_idx}.sda,2) pin = char(i2c{i2c_idx}.sda{pin_idx}); if ~isempty(find(strcmp(pkg_io_available,pin),1)) pin_list_sda{end+1} = pin; end end eval(['setting.pkg.' pkg_str '.I2C{' num2str(i2c_idx) '}.sda=pin_list_sda;']); end % SPI spi = []; spi{1}.nss = {'A4','A15'}; spi{1}.sck = {'A5','B3'}; spi{1}.miso = {'A6','B4'}; spi{1}.mosi = {'A7','B5'}; spi{2}.nss = {'B9','B12','I0'}; spi{2}.sck = {'B10','B13','I1'}; spi{2}.miso = {'B14','C2','I2'}; spi{2}.mosi = {'B15','C3','I3'}; spi{3}.nss = {'A4','15'}; spi{3}.sck = {'B3','C10'}; spi{3}.miso = {'B4','C11'}; spi{3}.mosi = {'B5','C12'}; spi{4}.nss = {'E4','E11'}; spi{4}.sck = {'E2','E12'}; spi{4}.miso = {'E5','E13'}; spi{4}.mosi = {'E6','E14'}; spi{5}.nss = {'F6','H5'}; spi{5}.sck = {'F7','H6'}; spi{5}.miso = {'F8','H7'}; spi{5}.mosi = {'F9','F11'}; eval(['setting.pkg.' pkg_str '.SPI=[];']); for spi_idx=1:size(spi,2) % nss pin_list_nss = []; for pin_idx=1:size(spi{spi_idx}.nss,2) pin = char(spi{spi_idx}.nss{pin_idx}); if ~isempty(find(strcmp(pkg_io_available,pin),1)) pin_list_nss{end+1} = pin; end end eval(['setting.pkg.' pkg_str '.SPI{' num2str(spi_idx) '}.nss=pin_list_nss;']); % sck pin_list_sck = []; for pin_idx=1:size(spi{spi_idx}.sck,2) pin = char(spi{spi_idx}.sck{pin_idx}); if ~isempty(find(strcmp(pkg_io_available,pin),1)) pin_list_sck{end+1} = pin; end end eval(['setting.pkg.' pkg_str '.SPI{' num2str(spi_idx) '}.sck=pin_list_sck;']); % miso pin_list_miso = []; for pin_idx=1:size(spi{spi_idx}.miso,2) pin = char(spi{spi_idx}.miso{pin_idx}); if ~isempty(find(strcmp(pkg_io_available,pin),1)) pin_list_miso{end+1} = pin; end end eval(['setting.pkg.' pkg_str '.SPI{' num2str(spi_idx) '}.miso=pin_list_miso;']); % mosi pin_list_mosi = []; for pin_idx=1:size(spi{spi_idx}.mosi,2) pin = char(spi{spi_idx}.mosi{pin_idx}); if ~isempty(find(strcmp(pkg_io_available,pin),1)) pin_list_mosi{end+1} = pin; end end eval(['setting.pkg.' pkg_str '.SPI{' num2str(spi_idx) '}.mosi=pin_list_mosi;']); end % TIM timer = []; % TIM1 timer{1}.ch1 = {'A8','E9'}; timer{1}.ch2 = {'A9','E11'}; timer{1}.ch3 = {'A10','E13'}; timer{1}.ch4 = {'A11','E14'}; % TIM2 timer{2}.ch1 = {'A0','A5','A15'}; timer{2}.ch2 = {'A1','B3'}; timer{2}.ch3 = {'A2','B10'}; timer{2}.ch4 = {'A3','B11'}; % TIM3 timer{3}.ch1 = {'A6','B4','C6'}; timer{3}.ch2 = {'A7','B5','C7'}; timer{3}.ch3 = {'B0','C8'}; timer{3}.ch4 = {'B1','C9'}; % TIM4 timer{4}.ch1 = {'B6','D12'}; timer{4}.ch2 = {'B7','D13'}; timer{4}.ch3 = {'B8','D14'}; timer{4}.ch4 = {'B9','D15'}; % TIM5 timer{5}.ch1 = {'A0','H10'}; timer{5}.ch2 = {'A1','H11'}; timer{5}.ch3 = {'A2','H12'}; timer{5}.ch4 = {'A3','I0'}; % TIM6 timer{6}.ch1 = []; timer{6}.ch2 = []; timer{6}.ch3 = []; timer{6}.ch4 = []; % TIM7 timer{7}.ch1 = []; timer{7}.ch2 = []; timer{7}.ch3 = []; timer{7}.ch4 = []; % TIM8 timer{8}.ch1 = {'C6','I5'}; timer{8}.ch2 = {'C7','I6'}; timer{8}.ch3 = {'C8','I7'}; timer{8}.ch4 = {'C9','I2'}; % TIM9 timer{9}.ch1 = {'A2','E5'}; timer{9}.ch2 = {'A3','E6'}; timer{9}.ch3 = {}; timer{9}.ch4 = {}; % TIM10 timer{10}.ch1 = {'B8'}; timer{10}.ch2 = {}; timer{10}.ch3 = {}; timer{10}.ch4 = {}; % TIM11 timer{11}.ch1 = {'B9','F7'}; timer{11}.ch2 = {}; timer{11}.ch3 = {}; timer{11}.ch4 = {}; % TIM12 timer{12}.ch1 = {'B14','H6'}; timer{12}.ch2 = {'B15','H9'}; timer{12}.ch3 = {}; timer{12}.ch4 = {}; % TIM13 timer{13}.ch1 = {'A6','F8'}; timer{13}.ch2 = {}; timer{13}.ch3 = {}; timer{13}.ch4 = {}; % TIM14 timer{14}.ch1 = {'A7','F9'}; timer{14}.ch2 = {}; timer{14}.ch3 = {}; timer{14}.ch4 = {}; eval(['setting.pkg.' pkg_str '.TIM=[];']); for timer_idx=1:size(timer,2) % ch1 pin_list_ch1 = []; for pin_idx=1:size(timer{timer_idx}.ch1,2) pin = char(timer{timer_idx}.ch1{pin_idx}); if ~isempty(find(strcmp(pkg_io_available,pin),1)) pin_list_ch1{end+1} = pin; end end eval(['setting.pkg.' pkg_str '.TIM{' num2str(timer_idx) '}.ch1=pin_list_ch1;']); % ch2 pin_list_ch2 = []; for pin_idx=1:size(timer{timer_idx}.ch2,2) pin = char(timer{timer_idx}.ch2{pin_idx}); if ~isempty(find(strcmp(pkg_io_available,pin),1)) pin_list_ch2{end+1} = pin; end end eval(['setting.pkg.' pkg_str '.TIM{' num2str(timer_idx) '}.ch2=pin_list_ch2;']); % ch3 pin_list_ch3 = []; for pin_idx=1:size(timer{timer_idx}.ch3,2) pin = char(timer{timer_idx}.ch3{pin_idx}); if ~isempty(find(strcmp(pkg_io_available,pin),1)) pin_list_ch3{end+1} = pin; end end eval(['setting.pkg.' pkg_str '.TIM{' num2str(timer_idx) '}.ch3=pin_list_ch3;']); % ch4 pin_list_ch4 = []; for pin_idx=1:size(timer{timer_idx}.ch4,2) pin = char(timer{timer_idx}.ch4{pin_idx}); if ~isempty(find(strcmp(pkg_io_available,pin),1)) pin_list_ch4{end+1} = pin; end end eval(['setting.pkg.' pkg_str '.TIM{' num2str(timer_idx) '}.ch4=pin_list_ch4;']); end end % === MCU Device list === for pn_idx = 1:size(DEVICES_LIST,2) pn = char(DEVICES_LIST{pn_idx}); device.family = []; device.pincount = []; device.package = []; device.flashsize = []; device.ramsize = []; device.mcuname = []; mcu = char(pn(1:9)); pcnt = char(pn(10)); flsh = char(pn(11)); pkg = char(pn(12)); % === Flash size === flash_code = {'8','B','C','D','E','G','I'}; flahs_size_kb = [64,128,256,384,512,1024,2048]; idx = find(strcmp (flash_code,flsh)); if isempty(idx) error('Invalid flash size code.'); else device.flashsize = flahs_size_kb(idx); end % === Pin count === pincount_code = {'T','C','R','M','O','V','Z','I','A','B','N'}; pincount_num = {'36','48','64','81','90','100','144','176','168','208','216'}; idx = find(strcmp (pincount_code,pcnt), 1); if isempty(idx) error ('Invlalid pin count code.'); else device.pincount = char(pincount_num(idx)); end % === Package === package_code = {'H','I','J','T','U','Y'}; package_str = {'BGA','UFBGA','UFBGA','LQFP','UFQFPN','WLCSP'}; idx = find(strcmp (package_code,pkg), 1); if isempty(idx) error ('Invalid package code.'); else device.package = char(package_str(idx)); end % mcu name device.mcuname = [mcu pcnt flsh ' (' device.package device.pincount ')']; % if strcmp(device.mcuname,'STM32F417IG (LQFP176)') % device.mcuname = [device.mcuname '; FiO2']; % end device.mcuid = [mcu pcnt flsh device.package device.pincount]; device.package = [device.package device.pincount]; % Family switch mcu % ===================================================================== % === STM32F40_41xxx === % ===================================================================== case {'STM32F405', 'STM32F407', 'STM32F415', 'STM32F417'} device.family = 'STM32F40_41xxx'; device.ramsize = 128; % ===================================================================== % === STM32F427_437xx === % ===================================================================== % ===================================================================== % === STM32F429_439xx === % ===================================================================== case {'STM32F429', 'STM32F439','STM32F427', 'STM32F437'} if ~isempty(find(strcmp({'STM32F429', 'STM32F439'}, mcu),1)) device.family = 'STM32F429_439xx'; else device.family = 'STM32F427_437xx'; end device.ramsize = 192; % ===================================================================== % STM32F401xx % ===================================================================== case 'STM32F401' device.family = 'STM32F401xx'; if device.flashsize < 384 device.ramsize = 64; else device.ramsize = 96; end % ===================================================================== % STM32F410xx % ===================================================================== case 'STM32F410' device.family = 'STM32F410xx'; device.ramsize = 32; % ===================================================================== % STM32F411xx % ===================================================================== case 'STM32F411' device.family = 'STM32F411xE'; device.ramsize = 128; % ===================================================================== % STM32F412xx % ===================================================================== case 'STM32F412' device.family = 'STM32F412xG'; device.ramsize = 256; % ===================================================================== % STM32F446xx % ===================================================================== case 'STM32F446' device.family = 'STM32F446xx'; device.ramsize = 128; % ===================================================================== % STM32F469_479xx % ===================================================================== case {'STM32F469', 'STM32F479'} device.family = 'STM32F469_479xx'; device.ramsize = 384; % Invalid otherwise error ('Invalid or unsupported device name.'); end % Flash size device.compilers = []; device.compilers.gnuarm = []; device.compilers.mdkarm = []; device.compilers.ewarm = []; % FLASH_ORIGIN device.compilers.gnuarm.FLASH_ORIGIN = '0x8000000'; device.compilers.mdkarm.FLASH_ORIGIN = '0x08000000'; device.compilers.ewarm.FLASH_ORIGIN = '0x08000000'; % FLASH_LENGTH device.compilers.gnuarm.FLASH_LENGTH = sprintf('%dk',device.flashsize); device.compilers.mdkarm.FLASH_LENGTH = sprintf('0x%X',(device.flashsize*1024)); device.compilers.ewarm.FLASH_LENGTH = sprintf('0x%X',(device.flashsize*1024)); % RAM_ORIGIN device.compilers.gnuarm.RAM_ORIGIN = '0x20000000'; device.compilers.mdkarm.RAM_ORIGIN = '0x20000000'; device.compilers.ewarm.RAM_ORIGIN = '0x20000000'; % RAM_LENGTHs device.compilers.gnuarm.RAM_LENGTH = sprintf('%dk',device.ramsize); device.compilers.mdkarm.RAM_LENGTH = sprintf('0x%X',(device.ramsize*1024)); device.compilers.ewarm.RAM_LENGTH = sprintf('0x%X',(device.ramsize*1024)); % eval(['setting.devices.' device.mcuid '=device;']); eval(['setting.list{end+1}=''' device.mcuname ''';']); end