From da5884920acecf71266d89b7e689999cdd8a409c Mon Sep 17 00:00:00 2001 From: Winfred LIN Date: Tue, 31 Mar 2020 17:48:27 +1100 Subject: [PATCH] added lorawan example in IAR, and added support for LIS3MDL and LPS22HB sensors 1. modified the HTS221: removed magic numbers, added a sensor_tempnhumi_t struct to accommodate temperature and humidity data 2. added .h and .c files for LIS3MDL magnetic sensor 3. added .h and .c files for LPS22HB pressure sensor 3. added IAR (EWARM) project for lorawan example 4. added bsp.c and bsp.h to manager the sensors --- .gitignore | 2 + .../BSP/HardWare/Common/bsp.c | 35 + .../BSP/HardWare/Common/bsp.h | 89 + .../BSP/HardWare/HTS221/HTS221.c | 54 +- .../BSP/HardWare/HTS221/HTS221.h | 39 +- .../BSP/HardWare/LIS3MDL/LIS3MDL.c | 136 + .../BSP/HardWare/LIS3MDL/LIS3MDL.h | 93 + .../BSP/HardWare/LPS22HB/LPS22HB.c | 79 + .../BSP/HardWare/LPS22HB/LPS22HB.h | 68 + board/NUCLEO_STM32L073RZ/BSP/Src/lora_demo.c | 120 +- .../IAR/hello_world/TencentOS_tiny.ewd | 2889 +++++++++-------- .../IAR/hello_world/TencentOS_tiny.ewp | 60 +- .../IAR/hello_world/TencentOS_tiny.ewt | 1383 ++++++++ .../IAR/lorawan/TencentOS_tiny.ewd | 1476 +++++++++ .../IAR/lorawan/TencentOS_tiny.ewp | 1291 ++++++++ .../IAR/lorawan/TencentOS_tiny.ewt | 1425 ++++++++ .../IAR/lorawan/TencentOS_tiny.eww | 8 + .../IAR/lorawan/startup_stm32l073xx.s | 346 ++ devices/rhf76_lora/RHF76.h | 2 +- 19 files changed, 8101 insertions(+), 1494 deletions(-) create mode 100644 board/NUCLEO_STM32L073RZ/BSP/HardWare/Common/bsp.c create mode 100644 board/NUCLEO_STM32L073RZ/BSP/HardWare/Common/bsp.h create mode 100644 board/NUCLEO_STM32L073RZ/BSP/HardWare/LIS3MDL/LIS3MDL.c create mode 100644 board/NUCLEO_STM32L073RZ/BSP/HardWare/LIS3MDL/LIS3MDL.h create mode 100644 board/NUCLEO_STM32L073RZ/BSP/HardWare/LPS22HB/LPS22HB.c create mode 100644 board/NUCLEO_STM32L073RZ/BSP/HardWare/LPS22HB/LPS22HB.h create mode 100644 board/NUCLEO_STM32L073RZ/IAR/hello_world/TencentOS_tiny.ewt create mode 100644 board/NUCLEO_STM32L073RZ/IAR/lorawan/TencentOS_tiny.ewd create mode 100644 board/NUCLEO_STM32L073RZ/IAR/lorawan/TencentOS_tiny.ewp create mode 100644 board/NUCLEO_STM32L073RZ/IAR/lorawan/TencentOS_tiny.ewt create mode 100644 board/NUCLEO_STM32L073RZ/IAR/lorawan/TencentOS_tiny.eww create mode 100644 board/NUCLEO_STM32L073RZ/IAR/lorawan/startup_stm32l073xx.s diff --git a/.gitignore b/.gitignore index 3940a2cc..dfb805f2 100644 --- a/.gitignore +++ b/.gitignore @@ -32,3 +32,5 @@ board/*/MDK-ARM/*.uvguix.* board/*/MDK-ARM/EventRecorderStub.scvd board/*/MDK-ARM/*/*.htm board/*/MDK-ARM/*/*.build_log.htm +Obj/* +Debug/* diff --git a/board/NUCLEO_STM32L073RZ/BSP/HardWare/Common/bsp.c b/board/NUCLEO_STM32L073RZ/BSP/HardWare/Common/bsp.c new file mode 100644 index 00000000..57f6df9c --- /dev/null +++ b/board/NUCLEO_STM32L073RZ/BSP/HardWare/Common/bsp.c @@ -0,0 +1,35 @@ +/** + ****************************************************************************** + * @file bsp.c + * @author jieranzhi + * @brief provide high level interfaces to manage the sensors on the + * application, this is a modified version of the official api + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "bsp.h" + +void BSP_Sensor_Init(void) +{ + /* Initialize sensors */ + HTS221_Init(); + LPS22HB_Init(); + LIS3MDL_Init(); +} + +void BSP_Sensor_Read(sensor_data_t *sensor_data) +{ + sensor_tempnhumi_t tempnhumi_sensor; + sensor_press_t press_sensor; + sensor_magn_t magn_sensor; + + HTS221_Get_TemperatureAndHumidity(&tempnhumi_sensor); + LPS22HB_Get_Press(&press_sensor); + LIS3MDL_Get_Magn(&magn_sensor); + + sensor_data->sensor_press = press_sensor; + sensor_data->sensor_tempnhumi = tempnhumi_sensor; + sensor_data->sensor_magn = magn_sensor; +} + diff --git a/board/NUCLEO_STM32L073RZ/BSP/HardWare/Common/bsp.h b/board/NUCLEO_STM32L073RZ/BSP/HardWare/Common/bsp.h new file mode 100644 index 00000000..c9f515ae --- /dev/null +++ b/board/NUCLEO_STM32L073RZ/BSP/HardWare/Common/bsp.h @@ -0,0 +1,89 @@ +/* + / _____) _ | | +( (____ _____ ____ _| |_ _____ ____| |__ + \____ \| ___ | (_ _) ___ |/ ___) _ \ + _____) ) ____| | | || |_| ____( (___| | | | +(______/|_____)_|_|_| \__)_____)\____)_| |_| + (C)2013 Semtech + +Description: contains all hardware driver + +License: Revised BSD License, see LICENSE.TXT file include in the project + +Maintainer: Miguel Luis and Gregory Cristian +*/ +/** + ****************************************************************************** + * @file bsp.h + * @author MCD Application Team + * @brief contains all hardware driver + ****************************************************************************** + * @attention + * + *

© Copyright (c) 2018 STMicroelectronics. + * All rights reserved.

+ * + * This software component is licensed by ST under Ultimate Liberty license + * SLA0044, the "License"; You may not use this file except in compliance with + * the License. You may obtain a copy of the License at: + * www.st.com/SLA0044 + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __BSP_H__ +#define __BSP_H__ + +#ifdef __cplusplus +extern "C" { +#endif +/* Includes ------------------------------------------------------------------*/ +#include +#include "HTS221.h" +#include "LPS22HB.h" +#include "LIS3MDL.h" + +/* Exported types ------------------------------------------------------------*/ +typedef struct +{ + sensor_press_t sensor_press; /* pressure sensor */ + sensor_tempnhumi_t sensor_tempnhumi; /* temperature and humidity */ + sensor_magn_t sensor_magn; /* magnetometer */ + + //--------------------------- accelerator and gyroscope -------------------// + int16_t accel_x; /* in g */ + int16_t accel_y; /* in g */ + int16_t accel_z; /* in g */ + int16_t gyro_x; /* in degree/s */ + int16_t gyro_y; /* in degree/s */ + int16_t gyro_z; /* in degree/s */ + +} sensor_data_t; + +/* Exported constants --------------------------------------------------------*/ +/* External variables --------------------------------------------------------*/ +/* Exported macros -----------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ +/** + * @brief initialises the sensor + * + * @note + * @retval None + */ +void BSP_Sensor_Init(void); + +/** + * @brief sensor read. + * + * @note none + * @retval sensor_data + */ +void BSP_Sensor_Read(sensor_data_t *sensor_data); + +#ifdef __cplusplus +} +#endif + +#endif /* __BSP_H__ */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/board/NUCLEO_STM32L073RZ/BSP/HardWare/HTS221/HTS221.c b/board/NUCLEO_STM32L073RZ/BSP/HardWare/HTS221/HTS221.c index 58854aac..5415544d 100644 --- a/board/NUCLEO_STM32L073RZ/BSP/HardWare/HTS221/HTS221.c +++ b/board/NUCLEO_STM32L073RZ/BSP/HardWare/HTS221/HTS221.c @@ -2,7 +2,8 @@ * @breif HTS221驱动文件 * @author Mculover666(www.mculover666.cn) * @date 2019-12-27 - * @version 1.0.0 + * @modified by jieranzhi 2020/03/23 + * @version 1.0.1 ********************************************/ #include @@ -15,7 +16,7 @@ void HTS221_Init() //设置分辨率 cmd = 0x3F; - HAL_I2C_Mem_Write(&hi2c1, HTS221_ADDR_WR, 0x10, I2C_MEMADD_SIZE_8BIT, &cmd, 1, 0xFFFF); + HAL_I2C_Mem_Write(&hi2c1, HTS221_ADDR_WR, HTS221_AV_CONF, I2C_MEMADD_SIZE_8BIT, &cmd, 1, 0xFFFF); //设置电源、数据块更新模式、数据输出速率 cmd = 0x84; @@ -57,11 +58,11 @@ uint8_t HTS221_Get_Temperature(int16_t* temperature) int32_t tmp32; /*1. 读取T0_degC_x8 和 T1_degC_x8 校验值 */ - HAL_I2C_Mem_Read(&hi2c1, HTS221_ADDR_RD, 0x32, I2C_MEMADD_SIZE_8BIT, &T0_degC_x8, 1, 0xFFFF); - HAL_I2C_Mem_Read(&hi2c1, HTS221_ADDR_RD, 0x33, I2C_MEMADD_SIZE_8BIT, &T1_degC_x8, 1, 0xFFFF); + HAL_I2C_Mem_Read(&hi2c1, HTS221_ADDR_RD, HTS221_T0_degC_x8, I2C_MEMADD_SIZE_8BIT, &T0_degC_x8, 1, 0xFFFF); + HAL_I2C_Mem_Read(&hi2c1, HTS221_ADDR_RD, HTS221_T1_degC_x8, I2C_MEMADD_SIZE_8BIT, &T1_degC_x8, 1, 0xFFFF); /*2. 读取T1_degC 和 T0_degC 的最高位*/ - HAL_I2C_Mem_Read(&hi2c1, HTS221_ADDR_RD, 0x35, I2C_MEMADD_SIZE_8BIT, &tmp, 1, 0xFFFF); + HAL_I2C_Mem_Read(&hi2c1, HTS221_ADDR_RD, HTS221_T1_T0_msb, I2C_MEMADD_SIZE_8BIT, &tmp, 1, 0xFFFF); // 计算T0_degC and T1_degC 值 */ T0_degC_x8_u16 = (((uint16_t)(tmp & 0x03)) << 8) | ((uint16_t)T0_degC_x8); @@ -70,10 +71,10 @@ uint8_t HTS221_Get_Temperature(int16_t* temperature) T1_degC = T1_degC_x8_u16>>3; /*3. 读取 T0_OUT 和 T1_OUT 值 */ - HAL_I2C_Mem_Read(&hi2c1, HTS221_ADDR_RD, 0x3C, I2C_MEMADD_SIZE_8BIT, &buffer[0], 1, 0xFFFF); - HAL_I2C_Mem_Read(&hi2c1, HTS221_ADDR_RD, 0x3D, I2C_MEMADD_SIZE_8BIT, &buffer[1], 1, 0xFFFF); - HAL_I2C_Mem_Read(&hi2c1, HTS221_ADDR_RD, 0x3E, I2C_MEMADD_SIZE_8BIT, &buffer[0], 1, 0xFFFF); - HAL_I2C_Mem_Read(&hi2c1, HTS221_ADDR_RD, 0x3F, I2C_MEMADD_SIZE_8BIT, &buffer[1], 1, 0xFFFF); + HAL_I2C_Mem_Read(&hi2c1, HTS221_ADDR_RD, HTS221_T0_OUT_L, I2C_MEMADD_SIZE_8BIT, &buffer[0], 1, 0xFFFF); + HAL_I2C_Mem_Read(&hi2c1, HTS221_ADDR_RD, HTS221_T0_OUT_H, I2C_MEMADD_SIZE_8BIT, &buffer[1], 1, 0xFFFF); + HAL_I2C_Mem_Read(&hi2c1, HTS221_ADDR_RD, HTS221_T1_OUT_L, I2C_MEMADD_SIZE_8BIT, &buffer[0], 1, 0xFFFF); + HAL_I2C_Mem_Read(&hi2c1, HTS221_ADDR_RD, HTS221_T1_OUT_H, I2C_MEMADD_SIZE_8BIT, &buffer[1], 1, 0xFFFF); T0_out = (((uint16_t)buffer[1])<<8) | (uint16_t)buffer[0]; T1_out = (((uint16_t)buffer[3])<<8) | (uint16_t)buffer[2]; @@ -90,8 +91,8 @@ uint8_t HTS221_Get_Temperature(int16_t* temperature) T_out = (((uint16_t)buffer[1])<<8) | (uint16_t)buffer[0]; /* 5. 使用线性插值法计算当前对应的温度值 */ - tmp32 = ((int32_t)(T_out - T0_out)) * ((int32_t)(T1_degC - T0_degC)*10); - *temperature = tmp32 /(T1_out - T0_out) + T0_degC*10; + tmp32 = ((int32_t)(T_out - T0_out)) * ((int32_t)(T1_degC - T0_degC)); + *temperature = tmp32*10 /(T1_out - T0_out) + T0_degC*10; return 0; } @@ -108,24 +109,24 @@ uint8_t HTS221_Get_Humidity(int16_t* humidity) /* 1. 读取H0_rH and H1_rH 校验值 */ - HAL_I2C_Mem_Read(&hi2c1, HTS221_ADDR_RD, 0x30, I2C_MEMADD_SIZE_8BIT, &buffer[0], 1, 0xFFFF); - HAL_I2C_Mem_Read(&hi2c1, HTS221_ADDR_RD, 0x31, I2C_MEMADD_SIZE_8BIT, &buffer[1], 1, 0xFFFF); + HAL_I2C_Mem_Read(&hi2c1, HTS221_ADDR_RD, HTS221_H0_rH_x2, I2C_MEMADD_SIZE_8BIT, &buffer[0], 1, 0xFFFF); + HAL_I2C_Mem_Read(&hi2c1, HTS221_ADDR_RD, HTS221_H1_rH_x2, I2C_MEMADD_SIZE_8BIT, &buffer[1], 1, 0xFFFF); H0_rh = buffer[0] >> 1; H1_rh = buffer[1] >> 1; /*2. 读取 H0_T0_OUT 校验值 */ - HAL_I2C_Mem_Read(&hi2c1, HTS221_ADDR_RD, 0x36, I2C_MEMADD_SIZE_8BIT, &buffer[0], 1, 0xFFFF); - HAL_I2C_Mem_Read(&hi2c1, HTS221_ADDR_RD, 0x37, I2C_MEMADD_SIZE_8BIT, &buffer[1], 1, 0xFFFF); + HAL_I2C_Mem_Read(&hi2c1, HTS221_ADDR_RD, HTS221_H0_T0_OUT_L, I2C_MEMADD_SIZE_8BIT, &buffer[0], 1, 0xFFFF); + HAL_I2C_Mem_Read(&hi2c1, HTS221_ADDR_RD, HTS221_H0_T0_OUT_H, I2C_MEMADD_SIZE_8BIT, &buffer[1], 1, 0xFFFF); H0_T0_out = (((uint16_t)buffer[1])<<8) | (uint16_t)buffer[0]; /*3. 读取 H1_T0_OUT 校验值 */ - HAL_I2C_Mem_Read(&hi2c1, HTS221_ADDR_RD, 0x3A, I2C_MEMADD_SIZE_8BIT, &buffer[0], 1, 0xFFFF); - HAL_I2C_Mem_Read(&hi2c1, HTS221_ADDR_RD, 0x3B, I2C_MEMADD_SIZE_8BIT, &buffer[1], 1, 0xFFFF); + HAL_I2C_Mem_Read(&hi2c1, HTS221_ADDR_RD, HTS221_H1_T0_OUT_L, I2C_MEMADD_SIZE_8BIT, &buffer[0], 1, 0xFFFF); + HAL_I2C_Mem_Read(&hi2c1, HTS221_ADDR_RD, HTS221_H1_T0_OUT_H, I2C_MEMADD_SIZE_8BIT, &buffer[1], 1, 0xFFFF); H1_T0_out = (((uint16_t)buffer[1])<<8) | (uint16_t)buffer[0]; /*4. 启动转换,等待完成后读取转换后的值 */ HTS221_Start(); - while(status_dat != 0x03) + while(status_dat != (HTS221_T_DA|HTS221_H_DA)) { HAL_I2C_Mem_Read(&hi2c1, HTS221_ADDR_RD, HTS221_STATUS_REG, I2C_MEMADD_SIZE_8BIT, &status_dat, 1, 0xFFFF); } @@ -145,3 +146,20 @@ uint8_t HTS221_Get_Humidity(int16_t* humidity) return 0; } + +/* 读取HT221的所有sensor的数据 */ +uint8_t HTS221_Get_TemperatureAndHumidity(sensor_tempnhumi_t* tempnhumi_sensor) +{ + int16_t temperature; + int16_t humidity; + + HTS221_Get_Temperature(&temperature); + HTS221_Get_Humidity(&humidity); + + tempnhumi_sensor->temp_sensitivity = 64; + tempnhumi_sensor->temperature = temperature; + tempnhumi_sensor->humi_sensitivity = 256; + tempnhumi_sensor->humidity = humidity; + + return 0; +} diff --git a/board/NUCLEO_STM32L073RZ/BSP/HardWare/HTS221/HTS221.h b/board/NUCLEO_STM32L073RZ/BSP/HardWare/HTS221/HTS221.h index 2d0377c0..b81e6f8b 100644 --- a/board/NUCLEO_STM32L073RZ/BSP/HardWare/HTS221/HTS221.h +++ b/board/NUCLEO_STM32L073RZ/BSP/HardWare/HTS221/HTS221.h @@ -10,6 +10,7 @@ #define HTS221_CTRL_REG2 0x21 #define HTS221_CTRL_REG3 0x22 +#define HTS221_AV_CONF 0x10 #define HTS221_STATUS_REG 0x27 #define HTS221_HUMIDITY_OUT_L 0x28 @@ -17,9 +18,45 @@ #define HTS221_TEMP_OUT_L 0x2A #define HTS221_TEMP_OUT_H 0x2B -void HTS221_Init(void); +#define HTS221_H0_rH_x2 0x30 +#define HTS221_H1_rH_x2 0x31 +#define HTS221_H0_T0_OUT_L 0x36 +#define HTS221_H0_T0_OUT_H 0x37 +#define HTS221_H1_T0_OUT_L 0x3A +#define HTS221_H1_T0_OUT_H 0x3B +#define HTS221_T0_degC_x8 0x32 +#define HTS221_T1_degC_x8 0x33 +#define HTS221_T1_T0_msb 0x35 +#define HTS221_T0_OUT_L 0x3C +#define HTS221_T0_OUT_H 0x3D +#define HTS221_T1_OUT_L 0x3E +#define HTS221_T1_OUT_H 0x3F + +/** + * @brief temperature & humidity sensor structures definition + * added by jieranzhi, 2020/03/29 + */ +typedef struct +{ + uint8_t temp_sensitivity; + int16_t temperature; + uint16_t humi_sensitivity; + int16_t humidity; +}sensor_tempnhumi_t; + +/** + * @brief STATUS structures definition + */ +typedef enum +{ + HTS221_T_DA = 0x01U, /*!< temperature data available */ + HTS221_H_DA = 0x02U, /*!< humidity data available */ +}HTS221_StatusTypeDef; + +void HTS221_Init(void); uint8_t HTS221_Get_Temperature(int16_t* temperature); uint8_t HTS221_Get_Humidity(int16_t* humidity); +uint8_t HTS221_Get_TemperatureAndHumidity(sensor_tempnhumi_t* tempnhumi_sensor); #endif /* _HTS221_H_ */ diff --git a/board/NUCLEO_STM32L073RZ/BSP/HardWare/LIS3MDL/LIS3MDL.c b/board/NUCLEO_STM32L073RZ/BSP/HardWare/LIS3MDL/LIS3MDL.c new file mode 100644 index 00000000..adffac7b --- /dev/null +++ b/board/NUCLEO_STM32L073RZ/BSP/HardWare/LIS3MDL/LIS3MDL.c @@ -0,0 +1,136 @@ +/** + ****************************************************************************** + * @file LIS3MDL.c + * @author jieranzhi + * @update 2020/03/23 19:00 CST + * @brief This file provides code for the LIS3MDL Initialization + * and data output codes. + ****************************************************************************** + * @attention + * + * 1. this code is used as one of the examples in TencentOS_tiny project, it's + * just a simple implementation of the sensor functionalities, to implement + * more functions, please refer to the datasheet or the official software + * package provided by ST (STM32CubeExpansion_LRWAN_V1.3.1) + * + * 2. in this file the host MCU will to read the output persistently, which is + * NOT of power efficient. + * + ****************************************************************************** + */ + +#include +#include + +// initialization of LIS3MDL +void LIS3MDL_Init() +{ + uint8_t cmd = 0; + + // enable temperature sensor(temperature compensation);X and Y axes operative + // mode(Medium-performance); Output data rate(10Hz); disable high data rate + // disable Self-test + cmd = 0xB0; + HAL_I2C_Mem_Write(&hi2c1, LIS3MDL_ADDR_WR, LIS3MDL_CTRL_REG1, I2C_MEMADD_SIZE_8BIT, &cmd, 1, 0xFFFF); + + // Full-scale:+/-4gauss; Reboot memory(normal) + cmd = 0x00; + HAL_I2C_Mem_Write(&hi2c1, LIS3MDL_ADDR_WR, LIS3MDL_CTRL_REG2, I2C_MEMADD_SIZE_8BIT, &cmd, 1, 0xFFFF); + + // disable lowpower mode; Operating mode (continuous mode) + cmd = 0x00; + HAL_I2C_Mem_Write(&hi2c1, LIS3MDL_ADDR_WR, LIS3MDL_CTRL_REG3, I2C_MEMADD_SIZE_8BIT, &cmd, 1, 0xFFFF); + + // Z-axis operative mode (Medium-performance) + cmd = 0x04; + HAL_I2C_Mem_Write(&hi2c1, LIS3MDL_ADDR_WR, LIS3MDL_CTRL_REG4, I2C_MEMADD_SIZE_8BIT, &cmd, 1, 0xFFFF); + + // disable FAST READ; data block update(continuous) + cmd = 0x40; + HAL_I2C_Mem_Write(&hi2c1, LIS3MDL_ADDR_WR, LIS3MDL_CTRL_REG5, I2C_MEMADD_SIZE_8BIT, &cmd, 1, 0xFFFF); +} + +// get fullscale configuration +LIS3MDL_FullScaleTypeDef LIS3MDL_Get_FullScale() +{ + uint8_t fullscale; + HAL_I2C_Mem_Read(&hi2c1, LIS3MDL_ADDR_RD, LIS3MDL_CTRL_REG2, I2C_MEMADD_SIZE_8BIT, &fullscale, 1, 0xFFFF); + fullscale = (fullscale<<1)>>6; + return (LIS3MDL_FullScaleTypeDef)fullscale; +} + +// set fullscale of the sensor +void LIS3MDL_Set_FullScale(LIS3MDL_FullScaleTypeDef fullscale) +{ + uint8_t ctrl_reg2_value; + uint8_t fullscale_config = (uint8_t)fullscale; + HAL_I2C_Mem_Read(&hi2c1, LIS3MDL_ADDR_RD, LIS3MDL_CTRL_REG2, I2C_MEMADD_SIZE_8BIT, &ctrl_reg2_value, 1, 0xFFFF); + fullscale_config = (ctrl_reg2_value&0x9F)|(fullscale_config<<5); + HAL_I2C_Mem_Write(&hi2c1, LIS3MDL_ADDR_WR, LIS3MDL_CTRL_REG2, I2C_MEMADD_SIZE_8BIT, &fullscale_config, 1, 0xFFFF); +} + +// calculate the sensitivity per fullscale +uint16_t LIS3MDL_Get_Sensitivity(LIS3MDL_FullScaleTypeDef fullscale) +{ + uint16_t sensitivity = 1; + switch(fullscale) + { + case FULLSCALE_4:{ + sensitivity = 6842; + break; + } + case FULLSCALE_8:{ + sensitivity = 3421; + break; + } + case FULLSCALE_12:{ + sensitivity = 2281; + break; + } + case FULLSCALE_16:{ + sensitivity = 1711; + break; + } + default:{ + sensitivity = 1; + } + } + return sensitivity; +} + +// start a new acquisition by enabling the one-shot bit in the LIS3MDL_CTRL_REG2 +// and read the magnetic field from the sensor +uint8_t LIS3MDL_Get_Magn(sensor_magn_t* magn_sensor) +{ + uint8_t status_dat = 0; + uint8_t magn_x_out_l = 0; + uint8_t magn_x_out_h = 0; + uint8_t magn_y_out_l = 0; + uint8_t magn_y_out_h = 0; + uint8_t magn_z_out_l = 0; + uint8_t magn_z_out_h = 0; + + // get fullscale and sensitivity + LIS3MDL_FullScaleTypeDef fullscale = LIS3MDL_Get_FullScale(); + magn_sensor->fullscale = (uint8_t)fullscale; + magn_sensor->sensitivity = LIS3MDL_Get_Sensitivity(fullscale); + + // wait until the data is ready + while((status_dat&LIS3MDL_ZYXDA) != LIS3MDL_ZYXDA) + { + HAL_I2C_Mem_Read(&hi2c1, LIS3MDL_ADDR_RD, LIS3MDL_STATUS_REG, I2C_MEMADD_SIZE_8BIT, &status_dat, 1, 0xFFFF); + } + + HAL_I2C_Mem_Read(&hi2c1, LIS3MDL_ADDR_RD, LIS3MDL_X_OUT_L, I2C_MEMADD_SIZE_8BIT, &magn_x_out_l, 1, 0xFFFF); + HAL_I2C_Mem_Read(&hi2c1, LIS3MDL_ADDR_RD, LIS3MDL_X_OUT_H, I2C_MEMADD_SIZE_8BIT, &magn_x_out_h, 1, 0xFFFF); + HAL_I2C_Mem_Read(&hi2c1, LIS3MDL_ADDR_RD, LIS3MDL_Y_OUT_L, I2C_MEMADD_SIZE_8BIT, &magn_y_out_l, 1, 0xFFFF); + HAL_I2C_Mem_Read(&hi2c1, LIS3MDL_ADDR_RD, LIS3MDL_Y_OUT_H, I2C_MEMADD_SIZE_8BIT, &magn_y_out_h, 1, 0xFFFF); + HAL_I2C_Mem_Read(&hi2c1, LIS3MDL_ADDR_RD, LIS3MDL_Z_OUT_L, I2C_MEMADD_SIZE_8BIT, &magn_z_out_l, 1, 0xFFFF); + HAL_I2C_Mem_Read(&hi2c1, LIS3MDL_ADDR_RD, LIS3MDL_Z_OUT_H, I2C_MEMADD_SIZE_8BIT, &magn_z_out_h, 1, 0xFFFF); + + magn_sensor->magn_x = (uint16_t)magn_x_out_h<<8|magn_x_out_l; + magn_sensor->magn_y = (uint16_t)magn_y_out_h<<8|magn_y_out_l; + magn_sensor->magn_z = (uint16_t)magn_z_out_h<<8|magn_z_out_l; + + return 0; +} diff --git a/board/NUCLEO_STM32L073RZ/BSP/HardWare/LIS3MDL/LIS3MDL.h b/board/NUCLEO_STM32L073RZ/BSP/HardWare/LIS3MDL/LIS3MDL.h new file mode 100644 index 00000000..f61302c6 --- /dev/null +++ b/board/NUCLEO_STM32L073RZ/BSP/HardWare/LIS3MDL/LIS3MDL.h @@ -0,0 +1,93 @@ +/** + ****************************************************************************** + * @file LIS3MDL.h + * @author jieranzhi (the developer) + * @update 2020/03/23 19:00 CST + * @brief This file contains basic functions prototypes and pre-definitions + * of the register addresses + ****************************************************************************** + * @attention + * + * 1. the temperature sensor embedded in the LIS3MDL is intended to be embedded + * temperature compensation. Therefore, in this file we DO NOT include the + * temperature output + * + * 2. on the P-NUCLEO-LRWAN3, the SDO/SA0 pad is connected to voltage supply( + * via a resistor), LSb is ‘1’ (address 1011101b) + * + * 3. for more information, please refer to the datasheet + * (https://www.st.com/resource/en/datasheet/lis3mdl.pdf) + * + ****************************************************************************** + */ +#ifndef _LIS3MDL_H_ +#define _LIS3MDL_H_ + +#include + +/* Registers -----------------------------------------------------------------*/ +#define LIS3MDL_ADDR_WR 0x3C +#define LIS3MDL_ADDR_RD 0x3D + +#define LIS3MDL_CTRL_REG1 0x20 +#define LIS3MDL_CTRL_REG2 0x21 +#define LIS3MDL_CTRL_REG3 0x22 +#define LIS3MDL_CTRL_REG4 0x23 +#define LIS3MDL_CTRL_REG5 0x24 + +#define LIS3MDL_STATUS_REG 0x27 + +#define LIS3MDL_X_OUT_L 0x28 +#define LIS3MDL_X_OUT_H 0x29 +#define LIS3MDL_Y_OUT_L 0x2A +#define LIS3MDL_Y_OUT_H 0x2B +#define LIS3MDL_Z_OUT_L 0x2C +#define LIS3MDL_Z_OUT_H 0x2D + +/* Enumeration ---------------------------------------------------------------*/ +/** + * @brief STATUS structures definition + */ +typedef enum +{ + LIS3MDL_ZYXOR = 0x80U, /*!< XYZ-axis data overrun */ + LIS3MDL_ZOR = 0x40U, /*!< Z-axis data overrun */ + LIS3MDL_YOR = 0x20U, /*!< Y-axis data overrun */ + LIS3MDL_XOR = 0x10U, /*!< X-axis data overrun */ + LIS3MDL_ZYXDA = 0x08U, /*!< XYZ-axis data available */ + LIS3MDL_ZDA = 0x04U, /*!< Z-axis data available */ + LIS3MDL_YDA = 0x02U, /*!< Y-axis data available */ + LIS3MDL_XDA = 0x01U, /*!< X-axis data available */ +}LIS3MDL_StatusTypeDef; + +/** + * @brief STATUS structures definition + */ +typedef enum +{ + FULLSCALE_4 = 0x00U, + FULLSCALE_8 = 0x01U, + FULLSCALE_12 = 0x02U, + FULLSCALE_16 = 0x03U +}LIS3MDL_FullScaleTypeDef; + +/** + * @brief magnetic sensor structures definition + */ +typedef struct +{ + uint8_t fullscale; // fullscale of magnetometer + uint16_t sensitivity; // sensitivity per fullscale + uint16_t magn_x; // X-magnetic value in LSB + uint16_t magn_y; // Y-magnetic value in LSB + uint16_t magn_z; // Z-magnetic value in LSB +}sensor_magn_t; + +/* Functions -----------------------------------------------------------------*/ +void LIS3MDL_Init(void); +void LIS3MDL_Set_FullScale(LIS3MDL_FullScaleTypeDef fullscale); +LIS3MDL_FullScaleTypeDef LIS3MDL_Get_FullScale(void); +uint16_t LIS3MDL_Get_Sensitivity(LIS3MDL_FullScaleTypeDef fullscale); +uint8_t LIS3MDL_Get_Magn(sensor_magn_t* magn_sensor); + +#endif /* _LIS3MDL_H_ */ diff --git a/board/NUCLEO_STM32L073RZ/BSP/HardWare/LPS22HB/LPS22HB.c b/board/NUCLEO_STM32L073RZ/BSP/HardWare/LPS22HB/LPS22HB.c new file mode 100644 index 00000000..86b3c108 --- /dev/null +++ b/board/NUCLEO_STM32L073RZ/BSP/HardWare/LPS22HB/LPS22HB.c @@ -0,0 +1,79 @@ +/** + ****************************************************************************** + * @file LPS22HB.c + * @author jieranzhi + * @update 2020/03/23 19:00 CST + * @brief This file provides code for the LPS22HB Initialization + * and data output codes. + ****************************************************************************** + * @attention + * + * 1. this code is used as one of the examples in TencentOS_tiny project, it's + * just a simple implementation of the sensor functionalities, to implement + * more functions, please refer to the datasheet or the official software + * package provided by ST (STM32CubeExpansion_LRWAN_V1.3.1) + * + * 2. in this file the host MCU need to read the output persistently, which is + * not of power efficient, to achieve better power consumption performance, + * it is recommended to use FIFO. + * + ****************************************************************************** + */ + +#include +#include + +// initialization of LPS22HB +void LPS22HB_Init() +{ + uint8_t cmd = 0; + + // reset the Low-power mode configuration + cmd = 0x00; + HAL_I2C_Mem_Write(&hi2c1, LPS22HB_ADDR_WR, LPS22HB_RES_CONF_REG, I2C_MEMADD_SIZE_8BIT, &cmd, 1, 0xFFFF); + + // setup data rate(power down, 000); disable lowpass filter (we use one-shot in this case); Block data update(continuous) + cmd = 0x00; + HAL_I2C_Mem_Write(&hi2c1, LPS22HB_ADDR_WR, LPS22HB_CTRL_REG1, I2C_MEMADD_SIZE_8BIT, &cmd, 1, 0xFFFF); + + // reboot mode(normal); disable FIFO; enable IF_ADD_INC; enable I2C; software reset mode(normal); one-shot mode(idle) + cmd = 0x10; + HAL_I2C_Mem_Write(&hi2c1, LPS22HB_ADDR_WR, LPS22HB_CTRL_REG2, I2C_MEMADD_SIZE_8BIT, &cmd, 1, 0xFFFF); + + // interupt control: set to default value (0x00) + cmd = 0x00; + HAL_I2C_Mem_Write(&hi2c1, LPS22HB_ADDR_WR, LPS22HB_CTRL_REG3, I2C_MEMADD_SIZE_8BIT, &cmd, 1, 0xFFFF); +} + +// enable one-shot to start a new acquisition (conversion) +static void LPS22HB_Start() +{ + uint8_t cmd = 0; + HAL_I2C_Mem_Read(&hi2c1, LPS22HB_ADDR_RD, LPS22HB_CTRL_REG2, I2C_MEMADD_SIZE_8BIT, &cmd, 1, 0xFFFF); + cmd |= 0x01; + HAL_I2C_Mem_Write(&hi2c1, LPS22HB_ADDR_WR, LPS22HB_CTRL_REG2, I2C_MEMADD_SIZE_8BIT, &cmd, 1, 0xFFFF); +} + +// start a new acquisition by enabling the one-shot bit in the LPS22HB_CTRL_REG2 +// and read the pressure from the sensor +uint8_t LPS22HB_Get_Press(sensor_press_t* press_sensor) +{ + uint8_t status_dat = 0; + uint8_t pressure_out_l = 0; + uint8_t pressure_out_h = 0; + uint8_t pressure_out_xl = 0; + press_sensor->sensitivity = 4096; + + LPS22HB_Start(); + while((status_dat&LPS22HB_P_DA) != LPS22HB_P_DA) + { + HAL_I2C_Mem_Read(&hi2c1, LPS22HB_ADDR_RD, LPS22HB_STATUS_REG, I2C_MEMADD_SIZE_8BIT, &status_dat, 1, 0xFFFF); + } + + HAL_I2C_Mem_Read(&hi2c1, LPS22HB_ADDR_RD, LPS22HB_PRESS_OUT_XL, I2C_MEMADD_SIZE_8BIT, &pressure_out_xl, 1, 0xFFFF); + HAL_I2C_Mem_Read(&hi2c1, LPS22HB_ADDR_RD, LPS22HB_PRESS_OUT_L, I2C_MEMADD_SIZE_8BIT, &pressure_out_l, 1, 0xFFFF); + HAL_I2C_Mem_Read(&hi2c1, LPS22HB_ADDR_RD, LPS22HB_PRESS_OUT_H, I2C_MEMADD_SIZE_8BIT, &pressure_out_h, 1, 0xFFFF); + + press_sensor->pressure = (((uint32_t)pressure_out_h<<16) | ((uint16_t)pressure_out_l<<8) | pressure_out_xl); + return 0; +} diff --git a/board/NUCLEO_STM32L073RZ/BSP/HardWare/LPS22HB/LPS22HB.h b/board/NUCLEO_STM32L073RZ/BSP/HardWare/LPS22HB/LPS22HB.h new file mode 100644 index 00000000..fbb2d265 --- /dev/null +++ b/board/NUCLEO_STM32L073RZ/BSP/HardWare/LPS22HB/LPS22HB.h @@ -0,0 +1,68 @@ +/** + ****************************************************************************** + * @file LPS22HB.h + * @author jieranzhi (the developer) + * @update 2020/03/23 19:00 CST + * @brief This file contains basic functions prototypes and pre-definitions + * of the register addresses + ****************************************************************************** + * @attention + * + * 1. the temperature sensor embedded in the LPS22HB is intended to be embedded + * temperature compensation. Therefore, in this file we DO NOT include the + * temperature output + * + * 2. on the P-NUCLEO-LRWAN3, the SDO/SA0 pad is connected to voltage supply( + * via a resistor), LSb is ‘1’ (address 1011101b) + * + * 3. for more information, please refer to the datasheet + * (https://www.st.com/resource/en/datasheet/dm00140895.pdf) + * + ****************************************************************************** + */ +#ifndef _LPS22HB_H_ +#define _LPS22HB_H_ + +#include + +/* Registers -----------------------------------------------------------------*/ +#define LPS22HB_ADDR_WR 0xBA +#define LPS22HB_ADDR_RD 0xBB + +#define LPS22HB_CTRL_REG1 0x10 +#define LPS22HB_CTRL_REG2 0x11 +#define LPS22HB_CTRL_REG3 0x12 + +#define LPS22HB_RES_CONF_REG 0x1A +#define LPS22HB_STATUS_REG 0x27 + +#define LPS22HB_PRESS_OUT_XL 0x28 +#define LPS22HB_PRESS_OUT_L 0x29 +#define LPS22HB_PRESS_OUT_H 0x2A + +/* Enumeration ---------------------------------------------------------------*/ +/** + * @brief STATUS structures definition + */ +typedef enum +{ + LPS22HB_T_OR = 0x20, /*!< temperature overrun */ + LPS22HB_P_OR = 0x10, /*!< pressure overrun */ + LPS22HB_T_DA = 0x02, /*!< new temperature data available */ + LPS22HB_P_DA = 0x01, /*!< new pressure data available */ +}LPS22HB_StatusTypeDef; + +/** + * @brief pressure sensor structures definition + */ +typedef struct +{ + uint16_t sensitivity; // sensitivity per fullscale + uint32_t pressure; // X-magnetic value in LSB +}sensor_press_t; + +/* Functions -----------------------------------------------------------------*/ +void LPS22HB_Init(void); +uint8_t LPS22HB_Get_Press(sensor_press_t* press_sensor); + +#endif /* _LPS22HB_H_ */ diff --git a/board/NUCLEO_STM32L073RZ/BSP/Src/lora_demo.c b/board/NUCLEO_STM32L073RZ/BSP/Src/lora_demo.c index accc7323..475d14a3 100644 --- a/board/NUCLEO_STM32L073RZ/BSP/Src/lora_demo.c +++ b/board/NUCLEO_STM32L073RZ/BSP/Src/lora_demo.c @@ -1,6 +1,7 @@ #include "lora_demo.h" -#include "HTS221.h" #include "RHF76.h" +#include +#include "bsp.h" /* ================================================================================== @@ -54,9 +55,18 @@ uint16_t report_period = 10; typedef struct device_data_st { - uint8_t temperature; - uint8_t humidity; + uint8_t magn_fullscale; // fullscale of magnetometer + uint8_t temp_sensitivity; + uint16_t humi_sensitivity; + uint16_t press_sensitivity; + uint16_t magn_sensitivity; // sensitivity per fullscale + int16_t temperature; + int16_t humidity; + int16_t magn_x; // X-magnetic value in LSB + int16_t magn_y; // Y-magnetic value in LSB + int16_t magn_z; // Z-magnetic value in LSB uint16_t period; + uint32_t pressure; } __PACKED__ dev_data_t; typedef struct device_data_wrapper_st { @@ -86,29 +96,103 @@ void recv_callback(uint8_t *data, uint8_t len) printf("report_period: %d\n", report_period); } +void print_to_screen(sensor_data_t sensor_data) +{ + float pressure = sensor_data.sensor_press.pressure*1.0/sensor_data.sensor_press.sensitivity; + float altitude = (pow(1013.25/pressure,1.0/5.257) - 1)*((int16_t)sensor_data.sensor_tempnhumi.temperature/10.0+273.15)/0.0065; + printf("temperature: %2.2f\n", (int16_t)sensor_data.sensor_tempnhumi.temperature / 10.0); + printf("humidity : %2.2f\n", sensor_data.sensor_tempnhumi.humidity / 10.0); + printf("pressure : %2.2f,\t altitude: %2.2f\n", pressure, altitude); + printf("magn : %2.3f, %2.3f, %2.3f\n", + (int16_t)sensor_data.sensor_magn.magn_x*1.0/sensor_data.sensor_magn.sensitivity, + (int16_t)sensor_data.sensor_magn.magn_y*1.0/sensor_data.sensor_magn.sensitivity, + (int16_t)sensor_data.sensor_magn.magn_z*1.0/sensor_data.sensor_magn.sensitivity); +} + +/** + * @brief application entry + * @modified by jieranzhi 2020/03/31 + * @note following javascript code snippet demonstrate how to correctly + * decode the data passed to Tencent cloud + ****************************** CODE START ***************************** + function RawToProtocol(fPort, bytes) + { + var data ={ + "method": "report", + "clientToken": new Date(), + "params": {} + } + var magnFullscale = bytes[0]; + switch(magnFullscale) + { + case 0: + data.params.magnFullscale = 4; + break; + case 1: + data.params.magnFullscale = 8; + break; + case 2: + data.params.magnFullscale = 12; + break; + case 3: + data.params.magnFullscale = 16; + break; + } + var tempSensitivity = bytes[1]; + var humiSensitivity = bytes[2] | (bytes[3]<<8); + var presSensitivity = bytes[4] | (bytes[5]<<8); + var magnSensitivity = bytes[6] | (bytes[7]<<8); + + data.params.temperature = (convertToInt16(bytes[8] | (bytes[9]<<8))*1.0/10).toFixed(2); + data.params.humidity = ((bytes[10] | (bytes[11]<<8))*1.0/10).toFixed(2); + data.params.magnX = (convertToInt16(bytes[12] | (bytes[13]<<8))*1.0/magnSensitivity).toFixed(2); + data.params.magnY = (convertToInt16(bytes[14] | (bytes[15]<<8))*1.0/magnSensitivity).toFixed(2); + data.params.magnZ = (convertToInt16(bytes[16] | (bytes[17]<<8))*1.0/magnSensitivity).toFixed(2); + data.params.period = bytes[18] | (bytes[19]<<8); + data.params.pressure = ((bytes[20] | (bytes[21]<<8) | (bytes[22]<<16) | (bytes[23]<<24))*1.0/presSensitivity).toFixed(2); + data.params.altitude = ((Math.pow(1017.92/data.params.pressure,1.0/5.257) - 1)*(data.params.temperature/10.0+273.15)/0.0065).toFixed(2); + data.params.fPort = fPort; + return data; + } + + function convertToInt16(num) + { + var intNum = num; + if ((num & 0x8000) > 0) { + intNum = num - 0x10000; + } + return intNum; + } + ****************************** CODE END ***************************** + */ void application_entry(void *arg) { - int16_t temperature; - int16_t humidity; + sensor_data_t sensor_data; - HTS221_Init(); + // initialization of sensors + BSP_Sensor_Init(); rhf76_lora_init(HAL_UART_PORT_1); tos_lora_module_recvcb_register(recv_callback); - - tos_lora_module_join_otaa("8cf957200000fa57", "8cf957200000fa572059aaaaad204a72"); + tos_lora_module_join_otaa("8cf957200000f53c", "8cf957200000f52c6d09aaaaad205a72"); while (1) { - HTS221_Get_Temperature(&temperature); - HTS221_Get_Humidity(&humidity); - - printf("temperature: %2.1f\n", temperature / 10.0); - printf("humidity : %2.1f\n", humidity / 10.0); - - dev_data_wrapper.u.dev_data.temperature = temperature / 10; - dev_data_wrapper.u.dev_data.humidity = humidity / 10; - dev_data_wrapper.u.dev_data.period = report_period; - + BSP_Sensor_Read(&sensor_data); + print_to_screen(sensor_data); + // generate data frame + dev_data_wrapper.u.dev_data.magn_fullscale = (uint8_t)(sensor_data.sensor_magn.fullscale); + dev_data_wrapper.u.dev_data.temp_sensitivity = (uint8_t)(sensor_data.sensor_tempnhumi.temp_sensitivity); + dev_data_wrapper.u.dev_data.humi_sensitivity = (uint16_t)(sensor_data.sensor_tempnhumi.humi_sensitivity); + dev_data_wrapper.u.dev_data.press_sensitivity = (uint16_t)(sensor_data.sensor_press.sensitivity); + dev_data_wrapper.u.dev_data.magn_sensitivity = (uint16_t)(sensor_data.sensor_magn.sensitivity); + dev_data_wrapper.u.dev_data.temperature = (int16_t)(sensor_data.sensor_tempnhumi.temperature); + dev_data_wrapper.u.dev_data.humidity = (int16_t)(sensor_data.sensor_tempnhumi.humidity); + dev_data_wrapper.u.dev_data.magn_x = (int16_t)(sensor_data.sensor_magn.magn_x); + dev_data_wrapper.u.dev_data.magn_y = (int16_t)(sensor_data.sensor_magn.magn_y); + dev_data_wrapper.u.dev_data.magn_z = (int16_t)(sensor_data.sensor_magn.magn_z); + dev_data_wrapper.u.dev_data.pressure = (uint32_t)(sensor_data.sensor_press.pressure); + dev_data_wrapper.u.dev_data.period = report_period; + // send data to the server (via gateway) tos_lora_module_send(dev_data_wrapper.u.serialize, sizeof(dev_data_t)); tos_task_delay(report_period * 1000); } diff --git a/board/NUCLEO_STM32L073RZ/IAR/hello_world/TencentOS_tiny.ewd b/board/NUCLEO_STM32L073RZ/IAR/hello_world/TencentOS_tiny.ewd index d77ea578..9fb31acd 100644 --- a/board/NUCLEO_STM32L073RZ/IAR/hello_world/TencentOS_tiny.ewd +++ b/board/NUCLEO_STM32L073RZ/IAR/hello_world/TencentOS_tiny.ewd @@ -1,1419 +1,1476 @@ - 3 - - TencentOS_tiny - - ARM - - 1 - - C-SPY - 2 - - 29 - 1 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ARMSIM_ID - 2 - - 1 - 1 - 1 - - - - - - - - CADI_ID - 2 - - 0 - 1 - 1 - - - - - - - - - CMSISDAP_ID - 2 - - 4 - 1 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - GDBSERVER_ID - 2 - - 0 - 1 - 1 - - - - - - - - - - - IJET_ID - 2 - - 8 - 1 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - JLINK_ID - 2 - - 16 - 1 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - LMIFTDI_ID - 2 - - 2 - 1 - 1 - - - - - - - - - - PEMICRO_ID - 2 - - 3 - 1 - 1 - - - - - - - - STLINK_ID - 2 - - 4 - 1 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - THIRDPARTY_ID - 2 - - 0 - 1 - 1 - - - - - - - - TIFET_ID - 2 - - 1 - 1 - 1 - - - - - - - - - - - - - - - - - - - XDS100_ID - 2 - - 6 - 1 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin - 0 - - - $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin - 0 - - - $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin - 0 - - - $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin.ENU.ewplugin - 0 - - - $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin - 0 - - - $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin - 0 - - - $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin - 0 - - - $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin - 0 - - - $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin - 0 - - - $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin - 0 - - - $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin - 0 - - - $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin - 1 - - - $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin - 0 - - - $EW_DIR$\common\plugins\TargetAccessServer\TargetAccessServer.ENU.ewplugin - 0 - - - $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin - 0 - - - + 3 + + TencentOS_tiny + + ARM + + 1 + + C-SPY + 2 + + 30 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + CADI_ID + 2 + + 0 + 1 + 1 + + + + + + + + + CMSISDAP_ID + 2 + + 4 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IJET_ID + 2 + + 8 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 16 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + NULINK_ID + 2 + + 0 + 1 + 1 + + + + + + + PEMICRO_ID + 2 + + 3 + 1 + 1 + + + + + + + + STLINK_ID + 2 + + 5 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + TIFET_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + + + XDS100_ID + 2 + + 8 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\FreeRtos\FreeRtosArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin2.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm8.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm8BE.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\TargetAccessServer\TargetAccessServer.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + diff --git a/board/NUCLEO_STM32L073RZ/IAR/hello_world/TencentOS_tiny.ewp b/board/NUCLEO_STM32L073RZ/IAR/hello_world/TencentOS_tiny.ewp index b793626e..b77c05a0 100644 --- a/board/NUCLEO_STM32L073RZ/IAR/hello_world/TencentOS_tiny.ewp +++ b/board/NUCLEO_STM32L073RZ/IAR/hello_world/TencentOS_tiny.ewp @@ -66,7 +66,7 @@