From c514bec6356869c6e70e96dd0619ea7b93272d34 Mon Sep 17 00:00:00 2001 From: Ivar Bjerling Date: Wed, 2 Apr 2025 16:47:17 +0200 Subject: [PATCH] boards: add support for IAR STM32F429II-ACA Adds support for the IAR STM32F429II-ACA evaluation board Signed-off-by: Ivar Bjerling --- boards/iar/index.rst | 10 + .../stm32f429ii_aca/Kconfig.stm32f429ii_aca | 6 + boards/iar/stm32f429ii_aca/board.cmake | 10 + boards/iar/stm32f429ii_aca/board.yml | 6 + .../doc/img/stm32f429ii_aca.webp | Bin 0 -> 39394 bytes boards/iar/stm32f429ii_aca/doc/index.rst | 138 +++++++++ .../iar/stm32f429ii_aca/stm32f429ii_aca.dts | 277 ++++++++++++++++++ .../iar/stm32f429ii_aca/stm32f429ii_aca.yaml | 15 + .../stm32f429ii_aca/stm32f429ii_aca_defconfig | 10 + .../iar/stm32f429ii_aca/support/openocd.cfg | 17 ++ dts/bindings/vendor-prefixes.txt | 1 + 11 files changed, 490 insertions(+) create mode 100644 boards/iar/index.rst create mode 100644 boards/iar/stm32f429ii_aca/Kconfig.stm32f429ii_aca create mode 100644 boards/iar/stm32f429ii_aca/board.cmake create mode 100644 boards/iar/stm32f429ii_aca/board.yml create mode 100644 boards/iar/stm32f429ii_aca/doc/img/stm32f429ii_aca.webp create mode 100644 boards/iar/stm32f429ii_aca/doc/index.rst create mode 100644 boards/iar/stm32f429ii_aca/stm32f429ii_aca.dts create mode 100644 boards/iar/stm32f429ii_aca/stm32f429ii_aca.yaml create mode 100644 boards/iar/stm32f429ii_aca/stm32f429ii_aca_defconfig create mode 100644 boards/iar/stm32f429ii_aca/support/openocd.cfg diff --git a/boards/iar/index.rst b/boards/iar/index.rst new file mode 100644 index 000000000000..3cc895fdb555 --- /dev/null +++ b/boards/iar/index.rst @@ -0,0 +1,10 @@ +.. _boards-iar: + +IAR +### + +.. toctree:: + :maxdepth: 1 + :glob: + + **/* diff --git a/boards/iar/stm32f429ii_aca/Kconfig.stm32f429ii_aca b/boards/iar/stm32f429ii_aca/Kconfig.stm32f429ii_aca new file mode 100644 index 000000000000..f04f3979a7ea --- /dev/null +++ b/boards/iar/stm32f429ii_aca/Kconfig.stm32f429ii_aca @@ -0,0 +1,6 @@ +# Copyright (c) 2016 Linaro Limited. +# Copyright (c) 2025 IAR Systems. +# SPDX-License-Identifier: Apache-2.0 + +config BOARD_STM32F429II_ACA + select SOC_STM32F429XX diff --git a/boards/iar/stm32f429ii_aca/board.cmake b/boards/iar/stm32f429ii_aca/board.cmake new file mode 100644 index 000000000000..1d0b4be283d6 --- /dev/null +++ b/boards/iar/stm32f429ii_aca/board.cmake @@ -0,0 +1,10 @@ +# SPDX-License-Identifier: Apache-2.0 + +board_runner_args(jlink "--device=STM32F429II" "--speed=4000") +board_runner_args(pyocd "--target=stm32f429xi") +board_runner_args(pyocd "--flash-opt=-O reset_type=hw") +board_runner_args(pyocd "--flash-opt=-O connect_mode=under-reset") + +include(${ZEPHYR_BASE}/boards/common/jlink.board.cmake) +include(${ZEPHYR_BASE}/boards/common/openocd.board.cmake) +include(${ZEPHYR_BASE}/boards/common/pyocd.board.cmake) diff --git a/boards/iar/stm32f429ii_aca/board.yml b/boards/iar/stm32f429ii_aca/board.yml new file mode 100644 index 000000000000..67419bb50680 --- /dev/null +++ b/boards/iar/stm32f429ii_aca/board.yml @@ -0,0 +1,6 @@ +board: + name: stm32f429ii_aca + full_name: STM32F429II-ACA + vendor: iar + socs: + - name: stm32f429xx diff --git a/boards/iar/stm32f429ii_aca/doc/img/stm32f429ii_aca.webp b/boards/iar/stm32f429ii_aca/doc/img/stm32f429ii_aca.webp new file mode 100644 index 0000000000000000000000000000000000000000..1ce5bb76c168f9dda19721ceba6fc63eb004e914 GIT binary patch literal 39394 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 literal 0 HcmV?d00001 diff --git a/boards/iar/stm32f429ii_aca/doc/index.rst b/boards/iar/stm32f429ii_aca/doc/index.rst new file mode 100644 index 000000000000..cc95c94a0ff5 --- /dev/null +++ b/boards/iar/stm32f429ii_aca/doc/index.rst @@ -0,0 +1,138 @@ +.. zephyr:board:: stm32f429ii_aca + +Overview +******** + +The IAR STM32F429II-ACA evaluation board features an ARM Cortex-M4 based STM32F429II MCU. +Here are some highlights of the STM32F429II-ACA board: + +- STM32 microcontroller in LQFP144 package +- JTAG/SWD debugger/programmer interface +- Flexible board power supply + + - JTAG/SWD connector + - USB HS connector + +- 3x user push-buttons and 1x RESET push-button +- Open-close switch and on-auto-off switch +- 2x capacitive touch panels +- USB OTG with mini-USB connector +- Small speaker +- Trimmer potentiometer +- Nine LEDs + + - 1x power LED + - 3x car traffic light LEDs + - 2x pedestrian traffic light LEDs + - 1x car interior light LED + - 2x user LEDs + +Schematics for the board can be found `here `_ + +Hardware +******** + +The STM32F429II-ACA evaluation board provides the following hardware components: + +- STM32F429II in LQFP144 package +- ARM |reg| 32-bit Cortex |reg| -M4 CPU with FPU +- 180 MHz max CPU frequency +- VDD from 1.8 V to 3.6 V +- 2 MB Internal Flash +- 4 Mbit External Flash +- 256+4 KB SRAM including 64-KB of core coupled memory +- GPIO with external interrupt capability +- 12-bit ADC +- 12-bit DAC +- RTC +- General Purpose Timers +- I2C +- SPI +- USB 2.0 OTG HS/FS with dedicated DMA, on-chip full-speed PHY and ULPI +- CRC calculation unit +- True random number generator +- DMA Controller + +More information about STM32F429II can be found here: + +- `STM32F429II on www.st.com`_ +- `STM32F429 Reference Manual`_ + +Supported Features +================== + +.. zephyr:board-supported-hw:: + +Default Zephyr Peripheral Mapping: +---------------------------------- +- I2C_1_SCL : PB8 +- I2C_1_SDA : PB7 +- I2C_2_SCL : PH4 +- I2C_2_SDA : PH5 +- SPI_5_NSS : PF6 +- SPI_5_SCK : PF7 +- SPI_5_MISO : PF8 +- SPI_5_MOSI : PF9 +- OTG_HS_ID : PB12 +- OTG_HS_DM : PB14 +- OTG_HS_DP : PB15 + +Serial Port +=========== + +By default, the STM32F429II-ACA evaluation board has no physical serial port available. +The board has up to 8 UARTs, of which none are used. + +USB Port +======== + +The STM32F429II-ACA evaluation board has a USB HS capable Mini-USB port. It is connected to the on-chip +OTG_HS peripheral. + +Programming and Debugging +************************* + +Applications for the ``stm32f429ii_aca`` board configuration can be built +and flashed in the usual way (see :ref:`build_an_application` and +:ref:`application_run` for more details). + +Flashing +======== + +In order to flash this board using west, an external debug probe such as a Segger J-Link +has to be connected through the JTAG/SWD connector on the board. +By default, the board is set to be flashed using the jlink runner. +Alternatively, openocd, or pyocd can also be used as runners to flash the board using +the ``--runner`` (or ``-r``) option: + +.. code-block:: console + + $ west flash --runner openocd + $ west flash --runner pyocd + +First, connect the STM32F429II-ACA evaluation board to your host computer using +your debug probe through the JTAG/SWD connector to prepare it for flashing. +Then build and flash your application. + +Here is an example for the :zephyr:code-sample:`blinky` application. + +.. zephyr-app-commands:: + :zephyr-app: samples/basic/blinky + :board: stm32f429ii_aca + :goals: build flash + +LED0 should then begin to blink continuously with a 1-second delay. + +References +********** + +.. target-notes:: + +.. _stm32f429ii-aca-schematics: + https://iar.my.salesforce.com/sfc/p/#30000000YATY/a/Qx000000vZVh/EzlIqYKIBVXN8PN4Q8MgtowSZrR_vZarwLiNJXw7UJw + +.. _STM32F429II on www.st.com: + https://www.st.com/en/microcontrollers-microprocessors/stm32f429ii.html + +.. _STM32F429 Reference Manual: + https://www.st.com/content/ccc/resource/technical/document/reference_manual/3d/6d/5a/66/b4/99/40/d4/DM00031020.pdf/files/DM00031020.pdf/jcr:content/translations/en.DM00031020.pdf diff --git a/boards/iar/stm32f429ii_aca/stm32f429ii_aca.dts b/boards/iar/stm32f429ii_aca/stm32f429ii_aca.dts new file mode 100644 index 000000000000..ff7635b676d3 --- /dev/null +++ b/boards/iar/stm32f429ii_aca/stm32f429ii_aca.dts @@ -0,0 +1,277 @@ +/* + * Copyright (c) 2017 Linaro Limited + * Copyright (c) 2024 STMicroelectronics + * Copyright (c) 2025 IAR Systems + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/dts-v1/; +#include +#include +#include + +/ { + model = "IAR STM32F429II-ACA board"; + compatible = "iar,stm32f429ii-aca"; + + chosen { + zephyr,sram = &sram0; + zephyr,flash = &flash0; + zephyr,ccm = &ccm0; + }; + + sdram2: sdram@d0000000 { + compatible = "zephyr,memory-region", "mmio-sram"; + device_type = "memory"; + reg = <0xd0000000 DT_SIZE_M(8)>; + zephyr,memory-region = "SDRAM2"; + }; + + leds { + compatible = "gpio-leds"; + + traffic_red_led: led_0 { + gpios = <&gpioa 4 GPIO_ACTIVE_LOW>; + label = "LED0"; + }; + + traffic_yellow_led: led_1 { + gpios = <&gpiod 4 GPIO_ACTIVE_LOW>; + label = "LED1"; + }; + + traffic_green_led: led_2 { + gpios = <&gpiod 5 GPIO_ACTIVE_LOW>; + label = "LED2"; + }; + + car_led: led_3 { + gpios = <&gpiod 6 GPIO_ACTIVE_LOW>; + label = "LED3"; + }; + + pedestrian_red_led: led_4 { + gpios = <&gpiod 7 GPIO_ACTIVE_LOW>; + label = "LED4"; + }; + + pedestrian_green_led: led_5 { + gpios = <&gpiod 11 GPIO_ACTIVE_LOW>; + label = "LED5"; + }; + + user_led_1: led_6 { + gpios = <&gpiod 12 GPIO_ACTIVE_LOW>; + label = "LED6"; + }; + + user_led_2: led_7 { + gpios = <&gpiod 13 GPIO_ACTIVE_LOW>; + label = "LED7"; + }; + }; + + gpio_keys { + compatible = "gpio-keys"; + + button0: button_0 { + label = "BUT0"; + gpios = <&gpioa 0 GPIO_ACTIVE_LOW>; + zephyr,code = ; + }; + + button1: button_1 { + label = "BUT1"; + gpios = <&gpioc 13 GPIO_ACTIVE_LOW>; + zephyr,code = ; + }; + + button2: button_2 { + label = "BUT2"; + gpios = <&gpiog 9 GPIO_ACTIVE_LOW>; + zephyr,code = ; + }; + + open_close_switch: switch_0 { + label = "OPEN/CLOSE SWITCH"; + gpios = <&gpioi 11 GPIO_ACTIVE_HIGH>; + zephyr,code = ; + }; + + interior_light_switch_on: switch_1 { + label = "ON"; + gpios = <&gpioi 10 GPIO_ACTIVE_LOW>; + zephyr,code = ; + }; + + interior_light_switch_auto: switch_2 { + label = "AUTO"; + gpios = <&gpioi 9 GPIO_ACTIVE_LOW>; + zephyr,code = ; + }; + + interior_light_switch_off: switch_3 { + label = "OFF"; + gpios = <&gpioi 8 GPIO_ACTIVE_LOW>; + zephyr,code = ; + }; + + cap_button0: cap_button_0 { + label = "CAP_BUT0"; + gpios = <&gpioh 6 GPIO_ACTIVE_LOW>; + zephyr,code = ; + }; + + cap_button1: cap_button_1 { + label = "CAP_BUT1"; + gpios = <&gpioh 7 GPIO_ACTIVE_LOW>; + zephyr,code = ; + }; + }; + + aliases { + led0 = &traffic_red_led; + led1 = &traffic_yellow_led; + led2 = &traffic_green_led; + led3 = &car_led; + led4 = &pedestrian_red_led; + led5 = &pedestrian_green_led; + led6 = &user_led_1; + led7 = &user_led_2; + sw0 = &button0; + sw1 = &button1; + sw2 = &button2; + sw3 = &open_close_switch; + sw4 = &interior_light_switch_on; + sw5 = &interior_light_switch_auto; + sw6 = &interior_light_switch_off; + sw7 = &cap_button0; + sw8 = &cap_button1; + }; +}; + +&clk_lsi { + status = "okay"; +}; + +&clk_hse { + clock-frequency = ; + status = "okay"; +}; + +&pll { + div-m = <8>; + mul-n = <336>; + div-p = <2>; + div-q = <7>; + clocks = <&clk_hse>; + status = "okay"; +}; + +&rcc { + clocks = <&pll>; + clock-frequency = ; + ahb-prescaler = <1>; + apb1-prescaler = <4>; + apb2-prescaler = <2>; +}; + +&rtc { + clocks = <&rcc STM32_CLOCK_BUS_APB1 0x10000000>, + <&rcc STM32_SRC_LSI RTC_SEL(2)>; + status = "okay"; +}; + +&i2c1 { + pinctrl-0 = <&i2c1_scl_pb8 &i2c1_sda_pb7>; + pinctrl-names = "default"; + status = "okay"; + clock-frequency = ; +}; + +&i2c2 { + pinctrl-0 = <&i2c2_scl_ph4 &i2c2_sda_ph5>; + pinctrl-names = "default"; + status = "okay"; + clock-frequency = ; +}; + + +&spi5 { + pinctrl-0 = <&spi5_nss_pf6 &spi5_sck_pf7 + &spi5_miso_pf8 &spi5_mosi_pf9>; + pinctrl-names = "default"; + status = "okay"; + cs-gpios = <&gpioc 2 GPIO_ACTIVE_LOW>; +}; + +&fmc { + status = "okay"; + pinctrl-0 = <&fmc_nbl0_pe0 &fmc_nbl1_pe1 + &fmc_sdclk_pg8 &fmc_sdnwe_pc0 &fmc_sdcke0_pc3 + &fmc_sdne0_pc2 &fmc_sdnras_pf11 &fmc_sdncas_pg15 + &fmc_a0_pf0 &fmc_a1_pf1 &fmc_a2_pf2 &fmc_a3_pf3 + &fmc_a4_pf4 &fmc_a5_pf5 &fmc_a6_pf12 &fmc_a7_pf13 + &fmc_a8_pf14 &fmc_a9_pf15 &fmc_a10_pg0 &fmc_a11_pg1 + &fmc_a12_pg2 &fmc_a13_pg3 &fmc_a14_pg4 &fmc_a15_pg5 + &fmc_d0_pd14 &fmc_d1_pd15 &fmc_d2_pd0 &fmc_d3_pd1 + &fmc_d4_pe7 &fmc_d5_pe8 &fmc_d6_pe9 &fmc_d7_pe10 + &fmc_d8_pe11 &fmc_d9_pe12 &fmc_d10_pe13 &fmc_d11_pe14 + &fmc_d12_pe15 &fmc_d13_pd8 &fmc_d14_pd9 &fmc_d15_pd10>; + pinctrl-names = "default"; + + sdram { + status = "okay"; + + power-up-delay = <100>; + num-auto-refresh = <1>; + mode-register = <0>; + refresh-rate = <1386>; + + bank@1 { + reg = <1>; + + st,sdram-control = ; + st,sdram-timing = <2 7 4 7 2 2 2>; + }; + }; +}; + +&adc2 { + compatible = "st,stm32f4-adc", "st,stm32-adc"; + pinctrl-0 = <&adc2_in6_pa6>; + pinctrl-names = "default"; + st,adc-prescaler = <2>; + status = "okay"; + + #address-cells = <1>; + #size-cells = <0>; + + channel@6 { + reg = <6>; + zephyr,gain = "ADC_GAIN_1"; + zephyr,reference = "ADC_REF_INTERNAL"; + zephyr,acquisition-time = ; + zephyr,resolution = <12>; + }; +}; + +&dac1 { + pinctrl-0 = <&dac_out2_pa5>; + pinctrl-names = "default"; + status = "okay"; +}; + +zephyr_udc0: &usbotg_hs { + pinctrl-0 = <&usb_otg_hs_dm_pb14 &usb_otg_hs_dp_pb15 &usb_otg_hs_id_pb12>; + pinctrl-names = "default"; + status = "okay"; +}; diff --git a/boards/iar/stm32f429ii_aca/stm32f429ii_aca.yaml b/boards/iar/stm32f429ii_aca/stm32f429ii_aca.yaml new file mode 100644 index 000000000000..b430c8f5d9bf --- /dev/null +++ b/boards/iar/stm32f429ii_aca/stm32f429ii_aca.yaml @@ -0,0 +1,15 @@ +identifier: stm32f429ii_aca +name: IAR STM32F429II ACA +type: mcu +arch: arm +toolchain: + - zephyr + - gnuarmemb + - iar +ram: 192 +flash: 2048 +supported: + - counter + - i2c + - spi +vendor: iar diff --git a/boards/iar/stm32f429ii_aca/stm32f429ii_aca_defconfig b/boards/iar/stm32f429ii_aca/stm32f429ii_aca_defconfig new file mode 100644 index 000000000000..75a3154c8fb1 --- /dev/null +++ b/boards/iar/stm32f429ii_aca/stm32f429ii_aca_defconfig @@ -0,0 +1,10 @@ +# SPDX-License-Identifier: Apache-2.0 + +# Enable MPU +CONFIG_ARM_MPU=y + +# Enable HW stack protection +CONFIG_HW_STACK_PROTECTION=y + +# Enable GPIO +CONFIG_GPIO=y diff --git a/boards/iar/stm32f429ii_aca/support/openocd.cfg b/boards/iar/stm32f429ii_aca/support/openocd.cfg new file mode 100644 index 000000000000..fa1360a71432 --- /dev/null +++ b/boards/iar/stm32f429ii_aca/support/openocd.cfg @@ -0,0 +1,17 @@ +source [find interface/cmsis-dap.cfg] + +set CHIPNAME STM32F429IITx +set BOARDNAME STM32F429II-ACA + +source [find target/stm32f4x.cfg] + +$_TARGETNAME configure -event gdb-attach { + echo "Debugger attaching: halting execution" + reset halt + gdb_breakpoint_override hard +} + +$_TARGETNAME configure -event gdb-detach { + echo "Debugger detaching: resuming execution" + resume +} diff --git a/dts/bindings/vendor-prefixes.txt b/dts/bindings/vendor-prefixes.txt index 7e26498a36b3..b40ecf0cb863 100644 --- a/dts/bindings/vendor-prefixes.txt +++ b/dts/bindings/vendor-prefixes.txt @@ -303,6 +303,7 @@ hynitron Hynitron hyundai Hyundai Technology hzgrow Hangzhou Grow Technology Co., Ltd. i2se I2SE GmbH +iar IAR Systems AB ibm International Business Machines (IBM) icplus IC Plus Corp. idt Integrated Device Technologies, Inc.