littlebot
Published on 2025-04-12 / 1 Visits
0

【源码】基于C语言的Disk91 IoT SDK

项目简介

本项目是一个底层软件开发工具包(SDK),具备硬件抽象层,专为物联网项目设计。其目标是快速创建能通过LPWAN(如LoRaWAn、Sigfox等)进行通信的物联网设备,既适用于快速原型开发,也可将固件投入生产,且所需组件开箱即用。SDK可通过头文件进行全面配置,在软件实现和MCU执行之间提供抽象层,便于将固件移植到不同平台。目前,该SDK已实现STM32L架构,借助抽象层可快速添加新平台。

项目的主要特性和功能

支持的MCU功能

具备定期自动唤醒功能的低功耗切换,支持LPUART、UART、GPIO唤醒;带校准功能的RTC;用于配置备份的EEPROM;看门狗;带校准功能的定时器(硬件和软件);GPIO、SPI、I2C抽象;时间更新;通用中断处理程序(与硬件无关)。

支持的高级特性

任务调度器;状态机;包括Segger RTT在内的多个串行控制台日志记录器;具备NVM存储功能的错误日志记录器;安全的调试与配置控制台;EEPROM中用于密钥的安全存储;Sigfox和LoRaWan的端到端加密;制造过程中通过串口进行ID配置;加速度计抽象层;GNSS抽象层。

通信协议接口

Sigfox(明文、AES128 - CTR、SPECK32、Sigfox - EAS128 - CTR - 加密);LoRaWan(LoRaWan - 加密、EAS128 - CTR、SPECK32),支持加入、上行链路、下行链路和确认。

支持/测试的平台

STM32L011、STM32L053、STM32L072、STM32L052、MURATA CMWX1ZZABZ。

支持的驱动程序

EEPROM:m95640;Sigfox:s2lp(在RCZ1测试)、murata cmwx1zzabz(sx1276)(在RCZ1和RCZ2测试);LoRaWan:murata cmwx1zzabz(sx1276);温度/湿度/压力传感器:bosh bme280和bmp280、omron 2smpb - 02B、infineon DPS422;光传感器:Maxim Max44009;电流/电池组传感器:Maxim Max17205 / Max17201;NFC:ST25DV - 块访问、通过FTM和内存的串行控制台;霍尔效应传感器:sl353;加速度计:STM - LIS2DH12;GNSS:Quectel L80 / L86、MediaTek 3333。

支持的协议栈

LoRaWan:semtech栈;Sigfox:sigfox栈。

安装使用步骤

假设用户已下载本项目的源码文件,以下是安装和使用的步骤:

配置项目骨架

使用Cube Mx配置项目骨架,具体配置如下: - Sys Clock Mux:HSI16 - Watchdog:使用LSI 37KHz配置IWDG,IWDG_WINDOW值设为4095,IWDG_PRESCALER值设为256 - Rtc timer:启用TIM21,时钟源设为内部用于校准 - LowPower: - LPUART1/USART1/USART2(异步9600 - 8/N/1)用于唤醒,时钟设置为HSI,最大速度为9600 - RTC WakeUp:激活时钟源、日历、内部唤醒,时钟配置为LSI,RTC/NVIC中断激活,异步预分频设为127,同步预分频设为255 - GPIO WakeUp:将GPIO设为外部中断,设置上拉/下拉和上升/下降沿触发,激活NVIC EXI1_15 - adc:选择一个ADC用于温度和Vcc测量以获取所需头文件

生成项目时: - 代码生成器:选择将外设初始化代码生成为.c/.h文件,将所有空闲引脚设为模拟引脚 - 高级设置:勾选ADC的Not Generated Function Call

导入SDK

  1. 将本仓库复制到项目根目录。
  2. 对调试和发布配置都进行以下配置:
    • 在项目属性 >> C/C++ General >> Path&Symbol >> Source location中添加ItSdk Src目录。
    • 在项目属性 >> C/C++ Build >> Settings >> Tool Settings >> MCU GCC Compiler >> Includes Path中添加ItSdk Inc目录。
    • 在项目属性 >> C/C++ Build >> Settings >> Tool Settings >> MCU GCC Assembler >> Includes Path中添加ItSdk Inc目录。
  3. 在C/C++ Build / Settings / Build Step / pre - build steps中可添加命令 touch "${workspace_loc:/${ProjName}/stm32-it-sdk/Src/it_sdk/console/console.c}",以在每次构建时更新编译日期。
  4. 可添加post - build step arm-none-eabi-size --format=sysV ${BuildArtifactFileName} 查看构建生成代码的大小。

配置SDK

  1. ItSdk/Src/project_main.c.template 文件复制到 Core/Src/project_main.c,并按需修改。
  2. ItSdk/Inc/it_sdk/config.h.template 文件复制到 Core/Inc/it_sdk/config.h
  3. 若使用某些驱动程序,将 ItSdk/Inc/it_sdk/configDrivers.h.template 文件复制到 Core/Inc/it_sdk/configDrivers.h
  4. 若使用sigfox驱动程序,将 ItSdk/Inc/it_sdk/configSigfox.h.template 文件复制到 Core/Inc/it_sdk/configSigfox.h
  5. 若使用LoRaWAn驱动程序,将 ItSdk/Inc/it_sdk/configLoRaWan.h.template 文件复制到 Core/Inc/it_sdk/configLoRaWan.h
  6. 编辑这些文件,根据环境和选择填写不同设置。

修改Cube Mx骨架

Gpio.c

  • 深度睡眠期间,未在 _ITSDK_LOWPOWER_GPIO_X_KEEP_ 中列出的所有GPIO将切换为模拟模式。连接到设备(I2C、SPI等)的GPIO在设备重新激活时会重新配置,但标准GPIO需要重新配置。
  • 默认唤醒过程调用CubeMX创建的 void MX_GPIO_Init(void) 函数,若默认设置合适可保留,但需移除GPIO的SET和RESET函数。
  • 更好的解决方案是创建 void stm32l_lowPowerRestoreGpioConfig() 函数: ```C void stm32l_lowPowerRestoreGpioConfig() { / GPIO Ports Clock Enable / __HAL_RCC_GPIOA_CLK_ENABLE(); __HAL_RCC_GPIOB_CLK_ENABLE(); __HAL_RCC_GPIOC_CLK_ENABLE(); __HAL_RCC_GPIOH_CLK_ENABLE();

    // 重新配置深度睡眠时切换为模拟模式的GPIO ...

    // 重新激活所需的中断线 HAL_NVIC_SetPriority(EXTI0_1_IRQn, 0, 0); HAL_NVIC_EnableIRQ(EXTI0_1_IRQn); ... HAL_NVIC_SetPriority(EXTI4_15_IRQn, 0, 0); HAL_NVIC_EnableIRQ(EXTI4_15_IRQn); ```

Main.c

  • 包含头文件: ```C / USER CODE BEGIN Includes /

include

include

/ USER CODE END Includes / - 主函数:C MX_IWDG_Init(); / USER CODE BEGIN 2 / itsdk_setup(); / USER CODE END 2 /

/ Infinite loop / / USER CODE BEGIN WHILE / while (1) { / USER CODE END WHILE / / USER CODE BEGIN 3 / itsdk_loop(); } / USER CODE END 3 / ```

其他修改(每次CubeMx项目重新生成时都需进行): - GPIO(在gpio.c中):Cube Mx在初始化时会设置/重置GPIO状态,需手动注释gpio.c中的相关行,以避免MCU唤醒时引脚被修改。另一种方法是保持GPIO初始化不变,并添加 void stm32l_lowPowerRestoreGpioConfig() 函数,在唤醒后重新配置GPIO。 - ADC:若不使用 ADC_OPTIMIZED_CODE_FOR_SIZE,则移除生成的adc.c/h文件,并在main.c中移除ADC引用。

下载地址

点击下载 【提取码: 4003】【解压密码: www.makuang.net】