diff --git a/Documentation/platforms/arm/stm32h7/boards/nucleo-h743zi2/index.rst b/Documentation/platforms/arm/stm32h7/boards/nucleo-h743zi2/index.rst index f09e8747273..f390092265e 100644 --- a/Documentation/platforms/arm/stm32h7/boards/nucleo-h743zi2/index.rst +++ b/Documentation/platforms/arm/stm32h7/boards/nucleo-h743zi2/index.rst @@ -11,7 +11,7 @@ memory and 1MByte SRAM. The board features: - On-board ST-LINK/V2 for programming and debugging, - 3 user LEDs -- Two pushbuttons (user and reset) +- Two pushbuttons (user[B1] and reset) - 32.768 kHz crystal oscillator - USB OTG FS with Micro-AB connectors - Ethernet connector compliant with IEEE-802.3-2002 @@ -113,54 +113,60 @@ Some highlights: .. - NuttShell (NSH) NuttX-10.0.1 + ADE + telnetd [6:100] + + NuttShell (NSH) + nsh> nsh> uname -a - NuttX 10.0.1 3ab35e48ff-dirty Mar 28 2021 15:35:29 arm nucleo-h743zi2 + NuttX 0.0.0 643f33934e-dirty Feb 20 2026 14:50:28 arm nucleo-h743zi2 nsh> ? help usage: help [-v] [] - - . cd dmesg hexdump mkrd reboot telnetd xd - [ cp echo ifconfig mh rm time - ? cmp env irqinfo mount rmdir true - addroute dirname exec kill mv route uname - arp date exit ls mw set umount - basename dd false mb nslookup sleep unset - break delroute free mkdir ps source usleep - cat df help mkfatfs pwd test wget - + + . cp expr mkrd route truncate + [ cmp false mount set uname + ? dirname fdinfo mv kill umount + addroute date free nslookup pkill unset + alias delroute help pidof sleep uptime + unalias df hexdump printf usleep watch + arp dmesg ifconfig ps source wget + basename echo irqinfo pwd test xd + break env ls reboot top wait + cat exec mkdir rm time + cd exit mkfatfs rmdir true + Builtin Apps: - fstest getprime nsh ostest ping renew sh + dd hidkbd nsh renew telnetd + fstest iperf ostest sh + getprime netcat ping tc nsh> ps - PID PRI POLICY TYPE NPX STATE EVENT SIGMASK STACK USED FILLED CPU COMMAND - 0 0 FIFO Kthread N-- Ready 00000000 001024 000472 46.0% 100.0% Idle Task - 1 224 RR Kthread --- Waiting Signal 00000000 002036 000456 22.3% 0.0% hpwork - 2 100 RR Kthread --- Waiting Signal 00000000 002036 000680 33.3% 0.0% lpwork - 3 100 RR Task --- Running 00000000 004084 001304 31.9% 0.0% init - 4 100 RR Kthread --- Waiting Semaphore 00000000 002036 000752 36.9% 0.0% usbhost - 5 50 RR Kthread --- Waiting Signal 00000000 004076 000472 11.5% 0.0% USB Monitor - 6 100 RR Task --- Waiting Semaphore 00000000 002012 000648 32.2% 0.0% Telnet daemon 0x38005600 + TID PID PPID PRI POLICY TYPE NPX STATE EVENT SIGMASK STACK USED FILLED CPU COMMAND + 0 0 0 0 FIFO Kthread - Ready 0000000000000000 0001000 0000544 54.4% 100.0% Idle_Task + 1 0 0 224 RR Kthread - Waiting Semaphore 0000000000000000 0001976 0000592 29.9% 0.0% hpwork 0x24000120 0x24000168 + 2 0 0 100 RR Kthread - Waiting Semaphore 0000000000000000 0001976 0000592 29.9% 0.0% lpwork 0x240000bc 0x24000104 + 3 3 0 100 RR Task - Running 0000000000000000 0004048 0001768 43.6% 0.0% nsh_main + 4 0 0 100 RR Kthread - Waiting Semaphore 0000000000000000 0002008 0000856 42.6% 0.0% usbhost + 5 0 0 50 RR Kthread - Waiting Signal 0000000000000000 0004048 0000536 13.2% 0.0% USB_Monitor + 6 6 0 100 RR Task - Waiting Semaphore 0000000000000000 0002008 0000880 43.8% 0.0% telnetd nsh> free - total used free largest - Umem: 944336 159520 784816 451712 + total used free maxused maxfree nused nfree name + 956604 158372 798232 158768 464552 62 5 Umem nsh> irqinfo IRQ HANDLER ARGUMENT COUNT RATE TIME - 3 080011ed 00000000 1599 20.405 0 - 15 08004e0d 00000000 7836 100.000 10000 - 55 08000799 24000000 1122 14.318 0 - 77 0800580b 00000000 14 0.178 0 - 117 0802c6f1 00000000 1372 17.544 0 - nsh> date; sleep 2; date - Thu, Jan 01 00:01:50 1970 - Thu, Jan 01 00:01:52 1970 + 11 080012c1 00000000 1757 19.719 0 + 15 0800804d 00000000 8910 100.000 1 + 55 080007a1 24000000 2338 26.240 5 + 77 0800849d 00000000 30 0.336 1 + 117 0803bbb1 00000000 206 2.316 21558 nsh> ifconfig - eth0 Link encap:Ethernet HWaddr 46:fd:66:78:aa:54 at UP + eth0 Link encap:Ethernet HWaddr ea:63:b9:20:1d:46 at RUNNING mtu 1486 inet addr:10.0.0.2 DRaddr:10.0.0.1 Mask:255.255.255.0 - - lo Link encap:Local Loopback at UP + + lo Link encap:Local Loopback at RUNNING mtu 1518 inet addr:127.0.0.1 DRaddr:127.0.0.1 Mask:255.0.0.0 - + IPv4 TCP UDP ICMP - Received 0004 0000 0004 0000 + Received 000a 0000 000a 0000 Dropped 0000 0000 0000 0000 IPv4 VHL: 0000 Frg: 0000 Checksum 0000 0000 0000 ---- @@ -170,46 +176,52 @@ Some highlights: Sent 0000 0000 0000 0000 Rexmit ---- 0000 ---- ---- nsh> renew eth0 + nsh> ifconfig eth0 + eth0 Link encap:Ethernet HWaddr ea:63:b9:20:1d:46 at RUNNING mtu 1486 + inet addr:192.168.3.120 DRaddr:192.168.3.1 Mask:255.255.255.0 + + nsh> # telnet to board here nsh> ifconfig - eth0 Link encap:Ethernet HWaddr 46:fd:66:78:aa:54 at UP - inet addr:192.168.86.249 DRaddr:192.168.86.1 Mask:255.255.255.0 - - lo Link encap:Local Loopback at UP + eth0 Link encap:Ethernet HWaddr ea:63:b9:20:1d:46 at RUNNING mtu 1486 + inet addr:192.168.3.120 DRaddr:192.168.3.1 Mask:255.255.255.0 + + lo Link encap:Local Loopback at RUNNING mtu 1518 inet addr:127.0.0.1 DRaddr:127.0.0.1 Mask:255.0.0.0 - + IPv4 TCP UDP ICMP - Received 0007 0000 0007 0000 + Received 004b 0037 0013 0001 Dropped 0000 0000 0000 0000 IPv4 VHL: 0000 Frg: 0000 Checksum 0000 0000 0000 ---- TCP ACK: 0000 SYN: 0000 RST: 0000 0000 Type 0000 ---- ---- 0000 - Sent 0002 0000 0002 0000 + Sent 0039 0036 0002 0001 Rexmit ---- 0000 ---- ---- nsh> ping www.google.com - PING 172.217.14.196 56 bytes of data - 56 bytes from 172.217.14.196: icmp_seq=0 time=10 ms - 56 bytes from 172.217.14.196: icmp_seq=1 time=0 ms - 56 bytes from 172.217.14.196: icmp_seq=2 time=0 ms - 56 bytes from 172.217.14.196: icmp_seq=3 time=0 ms - 56 bytes from 172.217.14.196: icmp_seq=4 time=0 ms - 56 bytes from 172.217.14.196: icmp_seq=5 time=0 ms - 56 bytes from 172.217.14.196: icmp_seq=6 time=0 ms - 56 bytes from 172.217.14.196: icmp_seq=7 time=0 ms - 56 bytes from 172.217.14.196: icmp_seq=8 time=0 ms - 56 bytes from 172.217.14.196: icmp_seq=9 time=0 ms + PING 142.250.191.4 56 bytes of data + 56 bytes from 142.250.191.4: icmp_seq=0 time=20.0 ms + 56 bytes from 142.250.191.4: icmp_seq=1 time=10.0 ms + 56 bytes from 142.250.191.4: icmp_seq=2 time=10.0 ms + 56 bytes from 142.250.191.4: icmp_seq=3 time=10.0 ms + 56 bytes from 142.250.191.4: icmp_seq=4 time=10.0 ms + 56 bytes from 142.250.191.4: icmp_seq=5 time=10.0 ms + 56 bytes from 142.250.191.4: icmp_seq=6 time=10.0 ms + 56 bytes from 142.250.191.4: icmp_seq=7 time=10.0 ms + 56 bytes from 142.250.191.4: icmp_seq=8 time=10.0 ms + 56 bytes from 142.250.191.4: icmp_seq=9 time=20.0 ms 10 packets transmitted, 10 received, 0% packet loss, time 10100 ms - nsh> + rtt min/avg/max/mdev = 10.000/12.000/20.000/4.000 ms nsh> ls /dev /dev: console + kmsg null - ramlog rammtd sda telnet ttyS0 + zero nsh> ls /mnt /mnt: lfs/ @@ -220,40 +232,191 @@ Some highlights: nsh> echo "This will stay on the USB drive" > /mnt/sda/afile nsh> ls /mnt/sda /mnt/sda: + GARMIN/ afile - nsh> reboot - - NuttShell (NSH) NuttX-10.0.1 - nsh> mount -t vfat /dev/sda /mnt/sda + nsh> rebootADE + telnetd [6:100] + + NuttShell (NSH) nsh> ls /mnt/lfs /mnt/lfs: . .. + nsh> ls /mnt + /mnt: + lfs/ + nsh> mount -t vfat /dev/sda /mnt/sda nsh> ls /mnt/sda /mnt/sda: + GARMIN/ afile nsh> cat /mnt/sda/afile This will stay on the USB drive - nsh> - ``` - - ``` - ❯ telnet 192.168.86.249 - Trying 192.168.86.249... - Connected to 192.168.86.249. - Escape character is '^]'. - - NuttShell (NSH) NuttX-10.0.1 + nsh> buttons + nsh: buttons: command not found + nsh> ADE + ADE + telnetd [6:100] + + NuttShell (NSH) + nsh> uname -a + NuttX 0.0.0 d147177c62 Feb 20 2026 15:18:50 arm nucleo-h743zi2 + nsh> ? + help usage: help [-v] [] + + . cp expr mkrd route truncate + [ cmp false mount set uname + ? dirname fdinfo mv kill umount + addroute date free nslookup pkill unset + alias delroute help pidof sleep uptime + unalias df hexdump printf usleep watch + arp dmesg ifconfig ps source wget + basename echo irqinfo pwd test xd + break env ls reboot top wait + cat exec mkdir rm time + cd exit mkfatfs rmdir true + + Builtin Apps: + buttons getprime netcat ping tc + dd hidkbd nsh renew telnetd + fstest iperf ostest sh + nsh> ls + /: + dev/ + mnt/ + proc/ + nsh> free + total used free maxused maxfree nused nfree name + 956492 158452 798040 158848 464440 64 5 Umem + nsh> irqinfo + IRQ HANDLER ARGUMENT COUNT RATE TIME + 11 080012f1 00000000 1073 10.277 0 + 15 0800807d 00000000 10440 100.000 1 + 55 080007a1 24000000 1380 13.218 5 + 77 080084cd 00000000 36 0.344 1 + 117 0803c4ed 00000000 206 1.976 21558 + nsh> ifconfig + eth0 Link encap:Ethernet HWaddr ea:63:b9:20:1d:46 at RUNNING mtu 1486 + inet addr:10.0.0.2 DRaddr:10.0.0.1 Mask:255.255.255.0 + + lo Link encap:Local Loopback at RUNNING mtu 1518 + inet addr:127.0.0.1 DRaddr:127.0.0.1 Mask:255.0.0.0 + + IPv4 TCP UDP ICMP + Received 000d 0000 000d 0000 + Dropped 0000 0000 0000 0000 + IPv4 VHL: 0000 Frg: 0000 + Checksum 0000 0000 0000 ---- + TCP ACK: 0000 SYN: 0000 + RST: 0000 0000 + Type 0000 ---- ---- 0000 + Sent 0000 0000 0000 0000 + Rexmit ---- 0000 ---- ---- + nsh> renew eth0 + nsh> ifconfig eth0 + eth0 Link encap:Ethernet HWaddr ea:63:b9:20:1d:46 at RUNNING mtu 1486 + inet addr:192.168.3.120 DRaddr:192.168.3.1 Mask:255.255.255.0 + + nsh> ping www.google.com + PING 142.250.217.132 56 bytes of data + 56 bytes from 142.250.217.132: icmp_seq=0 time=20.0 ms + 56 bytes from 142.250.217.132: icmp_seq=1 time=10.0 ms + 56 bytes from 142.250.217.132: icmp_seq=2 time=10.0 ms + 56 bytes from 142.250.217.132: icmp_seq=3 time=10.0 ms + 56 bytes from 142.250.217.132: icmp_seq=4 time=10.0 ms + 56 bytes from 142.250.217.132: icmp_seq=5 time=20.0 ms + 56 bytes from 142.250.217.132: icmp_seq=6 time=10.0 ms + 56 bytes from 142.250.217.132: icmp_seq=7 time=10.0 ms + 56 bytes from 142.250.217.132: icmp_seq=8 time=10.0 ms + 56 bytes from 142.250.217.132: icmp_seq=9 time=10.0 ms + 10 packets transmitted, 10 received, 0% packet loss, time 10100 ms + rtt min/avg/max/mdev = 10.000/12.000/20.000/4.000 ms + nsh> ls /dev + /dev: + buttons + console + kmsg + null + rammtd + sda + telnet + ttyS0 + zero + nsh> ls /mnt + /mnt: + lfs/ + nsh> echo "This will go away on reboot." > /mnt/lfs/afile + nsh> cat /mnt/lfs/afile + This will go away on reboot. + nsh> mount -t vfat /dev/sda /mnt/sda + nsh> echo "This will stay on the USB drive" > /mnt/sda/afile + nsh> ls /mnt/sda + /mnt/sda: + GARMIN/ + afile + nsh> rebootADE + telnetd [6:100] + + NuttShell (NSH) + nsh> ls /mnt/lfs + /mnt/lfs: + . + .. + nsh> ls /mnt + /mnt: + lfs/ + nsh> mount -t vfat /dev/sda /mnt/sda + nsh> ls /mnt/sda + /mnt/sda: + GARMIN/ + afile + nsh> cat /mnt/sda/afile + This will stay on the USB drive + nsh> buttons + buttons_main: Starting the button_daemon + buttons_main: button_daemon started + button_daemon: Running + button_daemon: Opening /dev/buttons + button_daemon: Supported BUTTONs 0x01 + nsh> B1 was pressed + B1 was released + B1 was pressed + B1 was released + nsh> ps - PID PRI POLICY TYPE NPX STATE EVENT SIGMASK STACK USED FILLED CPU COMMAND - 0 0 FIFO Kthread N-- Ready 00000000 001024 000472 46.0% 100.0% Idle Task - 1 224 RR Kthread --- Waiting Signal 00000000 002036 000456 22.3% 0.0% hpwork - 2 100 RR Kthread --- Waiting Signal 00000000 002036 000680 33.3% 0.0% lpwork - 3 100 RR Task --- Waiting Semaphore 00000000 004084 001304 31.9% 0.0% init - 4 100 RR Kthread --- Waiting Semaphore 00000000 002036 000752 36.9% 0.0% usbhost - 5 50 RR Kthread --- Waiting Signal 00000000 004076 000472 11.5% 0.0% USB Monitor - 6 100 RR Task --- Waiting Semaphore 00000000 002012 000648 32.2% 0.0% Telnet daemon 0x38005600 - 9 100 RR Kthread --- Waiting Semaphore 00000000 001004 000448 44.6% 0.0% telnet_io - 10 100 RR Task --- Running 00000000 002028 001328 65.4% 0.0% Telnet session + TID PID PPID PRI POLICY TYPE NPX STATE EVENT SIGMASK STACK USED FILLED CPU COMMAND + 0 0 0 0 FIFO Kthread - Ready 0000000000000000 0001000 0000544 54.4% 100.0% Idle_Task + 1 0 0 224 RR Kthread - Waiting Semaphore 0000000000000000 0001976 0000592 29.9% 0.0% hpwork 0x24000120 0x24000168 + 2 0 0 100 RR Kthread - Waiting Semaphore 0000000000000000 0001976 0000592 29.9% 0.0% lpwork 0x240000bc 0x24000104 + 3 3 0 100 RR Task - Running 0000000000000000 0004048 0001768 43.6% 0.0% nsh_main + 4 0 0 100 RR Kthread - Waiting Semaphore 0000000000000000 0002008 0000856 42.6% 0.0% usbhost + 5 0 0 50 RR Kthread - Waiting Signal 0000000000000000 0004048 0000816 20.1% 0.0% USB_Monitor + 6 6 0 100 RR Task - Waiting Semaphore 0000000000000000 0002008 0000880 43.8% 0.0% telnetd + 8 8 0 100 RR Task - Waiting Signal 0000000000000000 0004048 0000712 17.5% 0.0% button_daemon nsh> ``` + + ``` + peter@legion:~$ telnet 192.168.3.120 + Trying 192.168.3.120... + Connected to 192.168.3.120. + Escape character is '^]'. + + NuttShell (NSH) + nsh> ps + nsh: &ps: command not found + nsh> ps + TID PID PPID PRI POLICY TYPE NPX STATE EVENT SIGMASK STACK USED FILLED CPU COMMAND + 0 0 0 0 FIFO Kthread - Ready 0000000000000000 0001000 0000544 54.4% 100.0% Idle_Task + 1 0 0 224 RR Kthread - Waiting Semaphore 0000000000000000 0001976 0000592 29.9% 0.0% hpwork 0x24000120 0x24000168 + 2 0 0 100 RR Kthread - Waiting Semaphore 0000000000000000 0001976 0000592 29.9% 0.0% lpwork 0x240000bc 0x24000104 + 3 3 0 100 RR Task - Waiting Semaphore 0000000000000000 0004048 0001384 34.1% 0.0% nsh_main + 4 0 0 100 RR Kthread - Waiting Semaphore 0000000000000000 0002008 0000856 42.6% 0.0% usbhost + 5 0 0 50 RR Kthread - Waiting Signal 0000000000000000 0004048 0000536 13.2% 0.0% USB_Monitor + 6 6 0 100 RR Task - Waiting Semaphore 0000000000000000 0002008 0000880 43.8% 0.0% telnetd + 8 8 0 100 RR Task - Running 0000000000000000 0002000 0001864 93.2%! 0.0% Telnet_session + nsh> ^] + telnet> quit + Connection closed. + peter@legion:~$ + ``` diff --git a/boards/Kconfig b/boards/Kconfig index e84a90b2d57..470dd1052f1 100644 --- a/boards/Kconfig +++ b/boards/Kconfig @@ -1921,6 +1921,7 @@ config ARCH_BOARD_NUCLEO_H743ZI2 depends on ARCH_CHIP_STM32H743ZI select ARCH_HAVE_LEDS select ARCH_HAVE_BUTTONS + select ARCH_HAVE_IRQBUTTONS ---help--- STMicro Nucleo H743ZI2 board based on the STMicro STM32H743ZI MCU. diff --git a/boards/arm/stm32h7/nucleo-h743zi2/configs/jumbo/defconfig b/boards/arm/stm32h7/nucleo-h743zi2/configs/jumbo/defconfig index 047abf376a9..c80b8e44ed2 100644 --- a/boards/arm/stm32h7/nucleo-h743zi2/configs/jumbo/defconfig +++ b/boards/arm/stm32h7/nucleo-h743zi2/configs/jumbo/defconfig @@ -11,10 +11,12 @@ CONFIG_ARCH="arm" CONFIG_ARCH_BOARD="nucleo-h743zi2" CONFIG_ARCH_BOARD_NUCLEO_H743ZI2=y +CONFIG_ARCH_BUTTONS=y CONFIG_ARCH_CHIP="stm32h7" CONFIG_ARCH_CHIP_STM32H743ZI=y CONFIG_ARCH_CHIP_STM32H7=y CONFIG_ARCH_CHIP_STM32H7_CORTEXM7=y +CONFIG_ARCH_IRQBUTTONS=y CONFIG_ARCH_STACKDUMP=y CONFIG_ARMV7M_DCACHE=y CONFIG_ARMV7M_DCACHE_WRITETHROUGH=y @@ -32,6 +34,10 @@ CONFIG_DEBUG_USB_WARN=y CONFIG_DEFAULT_TASK_STACKSIZE=4096 CONFIG_DHCPC_RENEW_STACKSIZE=2048 CONFIG_ETH0_PHY_LAN8742A=y +CONFIG_EXAMPLES_BUTTONS=y +CONFIG_EXAMPLES_BUTTONS_NAME0="B1" +CONFIG_EXAMPLES_BUTTONS_NAMES=y +CONFIG_EXAMPLES_BUTTONS_QTD=1 CONFIG_EXAMPLES_HIDKBD=y CONFIG_EXAMPLES_TOUCHSCREEN=y CONFIG_EXAMPLES_TOUCHSCREEN_DEVPATH="/dev/mouse0" @@ -44,6 +50,8 @@ CONFIG_FS_PROCFS_REGISTER=y CONFIG_HAVE_CXX=y CONFIG_HAVE_CXXINITIALIZE=y CONFIG_INIT_ENTRYPOINT="nsh_main" +CONFIG_INPUT_BUTTONS=y +CONFIG_INPUT_BUTTONS_LOWER=y CONFIG_INTELHEX_BINARY=y CONFIG_LIBM=y CONFIG_LINE_MAX=64 diff --git a/boards/arm/stm32h7/nucleo-h743zi2/src/CMakeLists.txt b/boards/arm/stm32h7/nucleo-h743zi2/src/CMakeLists.txt index c273c83da7c..c8ef998d0f2 100644 --- a/boards/arm/stm32h7/nucleo-h743zi2/src/CMakeLists.txt +++ b/boards/arm/stm32h7/nucleo-h743zi2/src/CMakeLists.txt @@ -56,6 +56,10 @@ if(CONFIG_BOARDCTL_RESET) list(APPEND SRCS stm32_reset.c) endif() +if(CONFIG_ARCH_BUTTONS) + list(APPEND SRCS stm32_buttons.c) +endif() + target_sources(board PRIVATE ${SRCS}) set_property(GLOBAL PROPERTY LD_SCRIPT "${NUTTX_BOARD_DIR}/scripts/flash.ld") @@ -64,6 +68,5 @@ if(NOT CONFIG_BUILD_FLAT) add_subdirectory(${NUTTX_BOARD_DIR}/kernel) set_property( GLOBAL PROPERTY LD_SCRIPT_USER ${NUTTX_BOARD_DIR}/scripts/memory.ld - ${NUTTX_BOARD_DIR}/scripts/user-space.ld) + ${NUTTX_BOARD_DIR}/scripts/user-space.ld) endif() - diff --git a/boards/arm/stm32h7/nucleo-h743zi2/src/Makefile b/boards/arm/stm32h7/nucleo-h743zi2/src/Makefile index c8e508792c1..92e776d490e 100644 --- a/boards/arm/stm32h7/nucleo-h743zi2/src/Makefile +++ b/boards/arm/stm32h7/nucleo-h743zi2/src/Makefile @@ -34,6 +34,10 @@ else CSRCS += stm32_userleds.c endif +ifeq ($(CONFIG_ARCH_BUTTONS),y) +CSRCS += stm32_buttons.c +endif + ifeq ($(CONFIG_STM32H7_OTGFS),y) CSRCS += stm32_usb.c endif diff --git a/boards/arm/stm32h7/nucleo-h743zi2/src/nucleo-h743zi2.h b/boards/arm/stm32h7/nucleo-h743zi2/src/nucleo-h743zi2.h index db4af07cdc4..ad98bd39fd3 100644 --- a/boards/arm/stm32h7/nucleo-h743zi2/src/nucleo-h743zi2.h +++ b/boards/arm/stm32h7/nucleo-h743zi2/src/nucleo-h743zi2.h @@ -88,6 +88,19 @@ #define GPIO_LED_ORANGE GPIO_LD2 #define GPIO_LED_RED GPIO_LD3 +/* BUTTONS + * + * The Blue pushbutton B1, labeled "User", is connected to GPIO PC13. + * A high value will be sensed when the button is depressed. + * Note: + * 1) That the EXTI is included in the definition to enable an interrupt + * on this IO. + * 2) The following definitions assume the default Solder Bridges are + * installed. + */ + +#define GPIO_BTN_USER (GPIO_INPUT | GPIO_FLOAT | GPIO_EXTI | GPIO_PORTC | GPIO_PIN13) + #define GPIO_OTGFS_VBUS (GPIO_INPUT|GPIO_FLOAT|GPIO_SPEED_100MHz| \ GPIO_OPENDRAIN|GPIO_PORTA|GPIO_PIN9) diff --git a/boards/arm/stm32h7/nucleo-h743zi2/src/stm32_bringup.c b/boards/arm/stm32h7/nucleo-h743zi2/src/stm32_bringup.c index 2f1afe47443..e461b646093 100644 --- a/boards/arm/stm32h7/nucleo-h743zi2/src/stm32_bringup.c +++ b/boards/arm/stm32h7/nucleo-h743zi2/src/stm32_bringup.c @@ -49,6 +49,10 @@ #include "nucleo-h743zi2.h" +#ifdef CONFIG_INPUT_BUTTONS +# include +#endif + /**************************************************************************** * Private Functions ****************************************************************************/ @@ -157,6 +161,16 @@ int stm32_bringup(void) } #endif +#if defined(CONFIG_INPUT_BUTTONS_LOWER) + /* Register the BUTTON driver */ + + ret = btn_lower_initialize("/dev/buttons"); + if (ret < 0) + { + syslog(LOG_ERR, "ERROR: btn_lower_initialize() failed: %d\n", ret); + } +#endif /* CONFIG_INPUT_BUTTONS */ + #ifdef HAVE_USBHOST /* Initialize USB host operation. stm32_usbhost_initialize() * starts a thread will monitor for USB connection and diff --git a/boards/arm/stm32h7/nucleo-h743zi2/src/stm32_buttons.c b/boards/arm/stm32h7/nucleo-h743zi2/src/stm32_buttons.c new file mode 100644 index 00000000000..0e162a52383 --- /dev/null +++ b/boards/arm/stm32h7/nucleo-h743zi2/src/stm32_buttons.c @@ -0,0 +1,107 @@ +/**************************************************************************** + * boards/arm/stm32h7/nucleo-h743zi2/src/stm32_buttons.c + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. The + * ASF licenses this file to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the + * License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + * + ****************************************************************************/ + +/**************************************************************************** + * Included Files + ****************************************************************************/ + +#include + +#include +#include + +#include +#include + +#include "stm32_gpio.h" +#include "nucleo-h743zi2.h" +#include + +#ifdef CONFIG_ARCH_BUTTONS + +/**************************************************************************** + * Public Functions + ****************************************************************************/ + +/**************************************************************************** + * Name: board_button_initialize + * + * Description: + * board_button_initialize() must be called to initialize button resources. + * After that, board_buttons() may be called to collect the current state + * of all buttons or board_button_irq() may be called to register button + * interrupt handlers. + * + ****************************************************************************/ + +uint32_t board_button_initialize(void) +{ + stm32_configgpio(GPIO_BTN_USER); + return NUM_BUTTONS; +} + +/**************************************************************************** + * Name: board_buttons + ****************************************************************************/ + +uint32_t board_buttons(void) +{ + return stm32_gpioread(GPIO_BTN_USER) ? 1 : 0; +} + +/**************************************************************************** + * Button support. + * + * Description: + * board_button_initialize() must be called to initialize button resources. + * After that, board_buttons() may be called to collect the current state + * of all buttons or board_button_irq() may be called to register button + * interrupt handlers. + * + * After board_button_initialize() has been called, board_buttons() may be + * called to collect the state of all buttons. board_buttons() returns a + * 32-bit bit set with each bit associated with a button. See the + * BUTTON_*_BIT definitions in board.h for the meaning of each bit. + * + * board_button_irq() may be called to register an interrupt handler that + * will be called when a button is depressed or released. The ID value is + * a button enumeration value that uniquely identifies a button resource. + * See the BUTTON_* definitions in board.h for the meaning of enumeration + * value. + * + ****************************************************************************/ + +#ifdef CONFIG_ARCH_IRQBUTTONS +int board_button_irq(int id, xcpt_t irqhandler, void *arg) +{ + int ret = -EINVAL; + + if (id == BUTTON_USER) + { + ret = stm32_gpiosetevent(GPIO_BTN_USER, true, true, true, + irqhandler, arg); + } + + return ret; +} +#endif +#endif /* CONFIG_ARCH_BUTTONS */