boards/stm32h7: Add button support to nucleo-h743zi2

This patch adds support for the user button on nuclo-h743zi2 board
(and nucleo-h753zi2 which is also a MB1364 board design) and enables
button support and example in nucleo-h743zi2:jumbo configuration selector.

Signed-off-by: Peter Barada <peter.barada@gmail.com>
This commit is contained in:
Peter Barada
2026-02-20 15:06:55 -05:00
committed by Mateusz Szafoni
parent 966be68259
commit c4d6b728a0
8 changed files with 396 additions and 83 deletions
@@ -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] [<cmd>]
. 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] [<cmd>]
. 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:~$
```
+1
View File
@@ -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.
@@ -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
@@ -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()
@@ -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
@@ -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)
@@ -49,6 +49,10 @@
#include "nucleo-h743zi2.h"
#ifdef CONFIG_INPUT_BUTTONS
# include <nuttx/input/buttons.h>
#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
@@ -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 <nuttx/config.h>
#include <stddef.h>
#include <errno.h>
#include <nuttx/irq.h>
#include <nuttx/board.h>
#include "stm32_gpio.h"
#include "nucleo-h743zi2.h"
#include <arch/board/board.h>
#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 */