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 000000000000..1ce5bb76c168 Binary files /dev/null and b/boards/iar/stm32f429ii_aca/doc/img/stm32f429ii_aca.webp differ 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.