kywwilson11 opened a new pull request, #16746:
URL: https://github.com/apache/nuttx/pull/16746

   ## Summary
   
   This commit adds full support for the on‑die digital temperature sensor 
(DTS) in the STM32H5 family:
   
   - **Driver**: Implements `stm32h5_dts` low‑level driver 
(`chip/stm32_dts.[ch]`) with:
     - Software trigger, CFGR1 configuration (sample time, reference clock, 
trigger source)
     - Raw → frequency → °C conversion using factory calibration registers
     - Interrupt support for end‑of‑measurement, high/low threshold (both 
synchronous and LSE‑only asynchronous wakeup)
     - `get_info()` updated with realistic sensor parameters
     - Currently no support for HW Triggers. set_interval not developed. Need 
LP Timer support first. 
   - **Kconfig**: New options under `Drivers → Sensors → STM32H5 DTS`:
     - `CONFIG_STM32H5_DTS` to enable the driver
     - `CONFIG_STM32H5_DTS_REFCLK_LSE` to select LSE vs PCLK
     - `CONFIG_STM32H5_DTS_SMP_TIME` for TS1_SMP_TIME
     - Interrupt‑enable flags for ITEF/ITLF/ITHF and AITEF/AITLF/AITHF
   - **Build**: Updated `Kconfig` and `Make.defs` so the peripheral clock 
(APB1HENR DTSEN) and driver files are included when enabled
   - **uORB**: Exposes `/dev/uorb/sensor_tempN` via the NuttX sensors framework
   
   ## Impact
   
   - **New functionality**: Enables temperature sensing on with DTS 
STM32H5‑based boards (e.g., NUCLEO‑H563ZI)
   - **Build-time**: Zero impact unless `CONFIG_STM32H5_DTS=y`
   - **Runtime**: Negligible idle overhead; active only during measurements or 
threshold events
   - **Compatibility**: No changes to other families; coexists with existing 
sensors drivers
   
   ## Testing
   Modes: PCLK and LSE
   Interupts: Did not test hardware trigger mode. But enabled interrupts while 
in SW trigger mode. isr was accessed and fetch was not affected. 
   Samples: Tested number of samples. Verified with debugger. 
   Wrote a very simple external app to test. See below. 
   Not shown here but I heated and cooled the chip and watched changes. Below 
output is with 125MHz PCLK1. 
   
   Example Output:
   ```console
   NuttShell (NSH) NuttX-12.10.0
   nsh> dts
   Time: 2550000 µs  Temp: 29.39 °C
   nsh> dts
   Time: 3840000 µs  Temp: 29.39 °C
   nsh> dts
   Time: 4950000 µs  Temp: 29.39 °C
   nsh> dts
   Time: 6060000 µs  Temp: 29.26 °C
   nsh> dts
   Time: 7740000 µs  Temp: 29.39 °C
   nsh> 
   ```
   
   Kconfig options:
   <img width="723" height="318" alt="dts_kconfig" 
src="https://github.com/user-attachments/assets/3c91eb84-5c2c-476a-95e3-e1a3b6635590";
 />
   
   External Test Application:
   ```
   #include <stdio.h>
   #include <fcntl.h>
   #include <unistd.h>
   #include <nuttx/sensors/ioctl.h>
   #include <nuttx/sensors/sensor.h>
   #include <nuttx/uorb.h>
   
   int main(void)
   {
     int usfd = open("/dev/usensor", O_RDWR);
     if (usfd < 0)
     {
       perror("open /dev/usensor");
       return 1;
     }
   
     struct sensor_reginfo_s reginfo =
     {
       .path   = "/dev/uorb/sensor_temp",  /* note: no trailing ‘0’ */
       .esize  = sizeof(struct sensor_temp),
       .nbuffer= 1
     };
   
     if (ioctl(usfd, SNIOC_REGISTER, (unsigned long)&reginfo) < 0)
     {
     }
   
     close(usfd);
   
     int fd = open("/dev/uorb/sensor_temp0", O_RDONLY | O_NONBLOCK);
     if (fd < 0) { perror("open"); return 1; }
   
     struct sensor_temp report;
     for (int i = 0; i < 1; i++)
       {
         if (read(fd, &report, sizeof(report)) != sizeof(report))
         {
           perror("read");
           break;
         }
         printf("Time: %llu µs  Temp: %.2f °C\n",
                (unsigned long long)report.timestamp,
                report.temperature);
       }
     close(fd);
     return 0;
   }
   ```
   
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscr...@nuttx.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org

Reply via email to