diff --git a/.gitignore b/.gitignore index e61cc6a..a57a797 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,6 @@ EWARM/micro_climate/ EWARM/settings/ frt_protocol.c -README.md 软件框架图.vsdx 软件流程图.vsdx 赛联-微气象传感器软件设计说明书.docx diff --git a/App/Src/anemometer_dev.c b/App/Src/anemometer_dev.c index 863cee0..18416ea 100644 --- a/App/Src/anemometer_dev.c +++ b/App/Src/anemometer_dev.c @@ -94,17 +94,10 @@ float32_t find_maxValPosition_by_sinInterpolation(float32_t a,float32_t b,float3 float32_t RSSI; -/*****************测试滤波器函数**********/ -//int16_t firFilterTestData[1024]={ -//2041,2047,2047,2045,2044,2045,2048,2050,2052,2049,2047,2046,2048,2050,2049,2048,2047,2045,2046,2045,2046,2045,2045,2043,2042,2044,2044,2044,2042,2042,2043,2042,2043,2042,2041,2040,2041,2043,2043,2042,2040,2041,2041,2042,2041,2041,2041,2041,2041,2041,2041,2043,2041,2039,2040,2042,2042,2041,2040,2042,2112,2097,1898,2011,2062,2081,2090,2010,1993,2055,2042,2012,2044,2051,2049,2062,2054,2038,2039,2027,2023,2054,2095,2070,1965,1966,2107,2125,2031,1971,2009,2076,2070,2017,2023,2065,2058,2033,2035,2048,2045,2035,2029,2041,2053,2048,2040,2047,2048,2031,2026,2039,2050,2054,2044,2035,2039,2041,2038,2037,2039,2044,2045,2045,2044,2038,2032,2038,2049,2051,2041,2032,2033,2043,2049,2048,2042,2039,2038,2040,2040,2039,2039,2043,2045,2044,2042,2039,2036,2039,2044,2048,2041,2036,2036,2039,2045,2046,2043,2040,2039,2038,2041,2043,2043,2042,2041,2039,2040,2039,2039,2042,2045,2045,2040,2036,2038,2043,2043,2043,2039,2038,2040,2042,2042,2043,2040,2040,2042,2043,2042,2038,2038,2042,2043,2040,2035,2033,2036,2041,2051,2060,2066,2067,2061,2046,2018,1987,1967,1966,1992,2039,2102,2163,2202,2199,2144,2041,1916,1807,1752,1778,1883,2051,2245,2412,2497,2457,2285,2015,1723,1492,1397,1478,1723,2081,2465,2765,2884,2769,2436,1968,1491,1145,1035,1199,1601,2143,2685,3069,3180,2975,2508,1895,1310,919,829,1067,1575,2220,2830,3227,3299,3023,2480,1814,1212,838,790,1082,1634,2213,2849,3460,3311,2814,2336,1803,1272,859,765,1159,1794,2352,2851,3207,3212,2868,2319,1701,1192,912,752,1280,2049,2424,2711,3073,3207,2907,2238,1551,1189,1031,998,1296,1885,2480,2906,3100,3019,2686,2153,1573,1163,1025,1132,1465,1979,2519,2904,3027,2875,2522,2051,1577,1234,1124,1264,1608,2062,2506,2811,2902,2763,2432,1996,1577,1293,1229,1396,1727,2120,2483,2723,2783,2640,2331,1947,1606,1395,1365,1512,1794,2141,2455,2649,2675,2529,2247,1913,1633,1479,1482,1627,1873,2161,2413,2558,2562,2423,2181,1906,1680,1561,1578,1717,1936,2176,2375,2477,2456,2323,2122,1911,1740,1654,1672,1791,1977,2172,2323,2392,2366,2254,2091,1921,1789,1727,1754,1858,2008,2159,2268,2313,2289,2202,2074,1938,1836,1795,1824,1911,2028,2141,2221,2251,2227,2154,2052,1951,1880,1859,1890,1957,2039,2118,2177,2198,2176,2116,2038,1966,1920,1912,1938,1987,2047,2104,2142,2152,2130,2087,2034,1985,1956,1950,1969,2006,2050,2091,2116,2119,2101,2068,2031,1999,1980,1978,1992,2020,2053,2080,2096,2096,2081,2056,2031,2009,1998,1997,2008,2031,2055,2074,2080,2075,2063,2047,2031,2017,2009,2099,2054,1896,2039,2085,2107,2106,2016,1999,2047,2017,1991,2031,2042,2053,2074,2069,2055,2054,2033,2024,2049,2080,2048,1944,1974,2120,2129,2036,1984,2029,2086,2061,2002,2011,2052,2045,2028,2041,2059,2058,2049,2041,2045,2046,2033,2025,2035,2039,2030,2034,2053,2067,2067,2051,2036,2032,2027,2023,2026,2035,2047,2055,2059,2058,2048,2037,2037,2041,2038,2028,2021,2030,2046,2058,2059,2055,2049,2043,2039,2033,2029,2028,2034,2041,2045,2048,2050,2050,2051,2051,2045,2034,2024,2024,2032,2041,2047,2049,2052,2051,2048,2045,2041,2036,2033,2030,2032,2037,2042,2048,2054,2056,2053,2043,2035,2032,2034,2034,2034,2036,2041,2048,2052,2052,2049,2044,2039,2037,2036,2032,2031,2036,2045,2050,2050,2047,2046,2044,2042,2037,2035,2033,2035,2038,2043,2045,2047,2048,2048,2045,2041,2036,2034,2035,2038,2042,2043,2044,2045,2046,2046,2045,2041,2038,2037,2038,2040,2040,2041,2043,2045,2045,2044,2042,2041,2041,2040,2039,2039,2040,2041,2042,2044,2043,2042,2041,2042,2041,2040,2040,2041,2041,2041,2040,2042,2042,2042,2042,2042,2042,2042,2043,2041,2039,2040,2041,2041,2040,2040,2041,1944,2038,2255,2036,1891,1992,2101,2125,2033,1959,2050,2117,2026,1990,2041,2058,2040,2040,2042,2056,2055,1872,2109,2287,2028,1843,1969,2146,2166,2019,1940,2064,2119,2012,1977,2039,2061,2045,2038,2050,2067,2048,2009,2018,2052,2044,2019,2035,2065,2071,2050,2024,2028,2040,2042,2042,2045,2045,2040,2040,2043,2040,2042,2047,2051,2047,2035,2024,2031,2048,2055,2047,2036,2034,2043,2050,2046,2037,2036,2040,2043,2040,2036,2038,2043,2047,2050,2051,2043,2030,2030,2037,2048,2048,2041,2037,2039,2042,2048,2050,2047,2037,2033,2033,2037,2043,2044,2043,2045,2046,2045,2039,2039,2041,2041,2039,2037,2038,2042,2044,2044,2045,2045,2043,2041,2039,2038,2037,2038,2041,2045,2044,2042,2040,2044,2047,2044,2038,2036,2037,2040,2043,2043,2042,2042,2045,2046,2044,2040,2036,2036,2039,2043,2041,2039,2039,2043,2046,2046,2044,2039,2037,2038,2038,2040,2040,2041,2043,2045,2045,2042,2041,2041,2041,2039,2038,2038,2041,2043,2044,2045,2044,2041,2041,2042,2041,2039,2038,2039,2041,2044,2042,2043,2042,2041,2042,2043,2041,2038,2037,2038,2042,2044,2043,2041,2040,2043,2045,2043,2041,2037,2114,2093,1893,1999,2066,2106,2091,1996,1990,2062,2047,2006,2037,2054,2057,2058,2048,2039,2044,2029,2025,2058,2098,2063,1949,1983,2122,2114,2017,1971,2022,2084,2062,2011,2031,2069,2052,2029,2035,2048,2045,2035,2031,2045,2053,2047,2042,2049,2045,2027,2024,2039,2053,2056,2043,2036,2040,2042,2039,2037,2038,2043,2044,2046,2044,2038,2034,2040,2052,2052,2040,2030,2032,2043,2048,2048,2043,2039,2039,2040,2040,2041,2041,2044,2044,2039,2039,2039,2037,2040,2046,2048,2043,2036,2036,2041,2046,2043,2039,2039,2039,2039,2041,2043,2044,2043,2041,2040,2039,2037,2039,2043,2047,2046,2041,2037,2039,2044,2044,2042}; - -//int16_t firFilterTestOutData[1024]; - +/*****************滤波器BUFF**********/ float32_t buf[1024]; float32_t buf2[1024]; - -/*****************测试滤波器函数**********/ - +/*****************滤波器BUFF**********/ float32_t cal_tof(q15_t* x,uint32_t len) { q15_t max_val,dc_offset; @@ -120,7 +113,6 @@ float32_t cal_tof(q15_t* x,uint32_t len) arm_offset_q15(x,-dc_offset,x,len); /*****************滤波器**********/ - // arm_mean_q15(x,50,&dc_offset); // // 信号减去直流分量 // arm_offset_q15(x,-dc_offset,x,len); @@ -131,15 +123,14 @@ float32_t cal_tof(q15_t* x,uint32_t len) { buf[i] = (float32_t)x[i]; } + firBPFFilter(buf,buf2,len); // // 数据转换有异常 无法还原成整数 // arm_float_to_q15(buf2,firFilterTestOutData,len); - for(i= 0 ;iCNT; + run_time_us = __HAL_TIM_GET_COUNTER(&htim16) * 100;// htim16).Instance->CNT; speedx[speedi] = weather_info.wind_velocity_x; speedy[speedi] = weather_info.wind_velocity_y; @@ -509,7 +500,7 @@ void wind_task(void const * argument) av_speed = 0; av_angle = 0; } - term_printf("x:%.2f y:%.2f win_speed %.2f m/s angle %.2f \r\n",av_speedx,av_speedy,av_speed,av_angle); +// term_printf("x:%.2f y:%.2f win_speed %.2f m/s angle %.2f \r\n",av_speedx,av_speedy,av_speed,av_angle); } ///term_printf("win_speed %.2f \r\n",weather_info.wind_velocity); diff --git a/Core/Src/system_stm32l4xx.c b/Core/Src/system_stm32l4xx.c index a24222d..5162ccc 100644 --- a/Core/Src/system_stm32l4xx.c +++ b/Core/Src/system_stm32l4xx.c @@ -1,3 +1,6 @@ +#define REMOTE_UPDATE // ǷԶ + +#ifdef REMOTE_UPDATE /** ****************************************************************************** * @file system_stm32l4xx.c @@ -353,3 +356,345 @@ void SystemCoreClockUpdate(void) */ /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ + +#else + +/** + ****************************************************************************** + * @file system_stm32l4xx.c + * @author MCD Application Team + * @brief CMSIS Cortex-M4 Device Peripheral Access Layer System Source File + * + * This file provides two functions and one global variable to be called from + * user application: + * - SystemInit(): This function is called at startup just after reset and + * before branch to main program. This call is made inside + * the "startup_stm32l4xx.s" file. + * + * - SystemCoreClock variable: Contains the core clock (HCLK), it can be used + * by the user application to setup the SysTick + * timer or configure other parameters. + * + * - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must + * be called whenever the core clock is changed + * during program execution. + * + * After each device reset the MSI (4 MHz) is used as system clock source. + * Then SystemInit() function is called, in "startup_stm32l4xx.s" file, to + * configure the system clock before to branch to main program. + * + * This file configures the system clock as follows: + *============================================================================= + *----------------------------------------------------------------------------- + * System Clock source | MSI + *----------------------------------------------------------------------------- + * SYSCLK(Hz) | 4000000 + *----------------------------------------------------------------------------- + * HCLK(Hz) | 4000000 + *----------------------------------------------------------------------------- + * AHB Prescaler | 1 + *----------------------------------------------------------------------------- + * APB1 Prescaler | 1 + *----------------------------------------------------------------------------- + * APB2 Prescaler | 1 + *----------------------------------------------------------------------------- + * PLL_M | 1 + *----------------------------------------------------------------------------- + * PLL_N | 8 + *----------------------------------------------------------------------------- + * PLL_P | 7 + *----------------------------------------------------------------------------- + * PLL_Q | 2 + *----------------------------------------------------------------------------- + * PLL_R | 2 + *----------------------------------------------------------------------------- + * PLLSAI1_P | NA + *----------------------------------------------------------------------------- + * PLLSAI1_Q | NA + *----------------------------------------------------------------------------- + * PLLSAI1_R | NA + *----------------------------------------------------------------------------- + * PLLSAI2_P | NA + *----------------------------------------------------------------------------- + * PLLSAI2_Q | NA + *----------------------------------------------------------------------------- + * PLLSAI2_R | NA + *----------------------------------------------------------------------------- + * Require 48MHz for USB OTG FS, | Disabled + * SDIO and RNG clock | + *----------------------------------------------------------------------------- + *============================================================================= + ****************************************************************************** + * @attention + * + *

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

+ * + * This software component is licensed by ST under 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: + * opensource.org/licenses/Apache-2.0 + * + ****************************************************************************** + */ + +/** @addtogroup CMSIS + * @{ + */ + +/** @addtogroup stm32l4xx_system + * @{ + */ + +/** @addtogroup STM32L4xx_System_Private_Includes + * @{ + */ + +#include "stm32l4xx.h" + +#if !defined (HSE_VALUE) + #define HSE_VALUE 8000000U /*!< Value of the External oscillator in Hz */ +#endif /* HSE_VALUE */ + +#if !defined (MSI_VALUE) + #define MSI_VALUE 4000000U /*!< Value of the Internal oscillator in Hz*/ +#endif /* MSI_VALUE */ + +#if !defined (HSI_VALUE) + #define HSI_VALUE 16000000U /*!< Value of the Internal oscillator in Hz*/ +#endif /* HSI_VALUE */ + +/** + * @} + */ + +/** @addtogroup STM32L4xx_System_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32L4xx_System_Private_Defines + * @{ + */ + +/************************* Miscellaneous Configuration ************************/ +/*!< Uncomment the following line if you need to relocate your vector Table in + Internal SRAM. */ +/* #define VECT_TAB_SRAM */ +#define VECT_TAB_OFFSET 0x00 /*!< Vector Table base offset field. + This value must be a multiple of 0x200. */ +/******************************************************************************/ +/** + * @} + */ + +/** @addtogroup STM32L4xx_System_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32L4xx_System_Private_Variables + * @{ + */ + /* The SystemCoreClock variable is updated in three ways: + 1) by calling CMSIS function SystemCoreClockUpdate() + 2) by calling HAL API function HAL_RCC_GetHCLKFreq() + 3) each time HAL_RCC_ClockConfig() is called to configure the system clock frequency + Note: If you use this function to configure the system clock; then there + is no need to call the 2 first functions listed above, since SystemCoreClock + variable is updated automatically. + */ + uint32_t SystemCoreClock = 4000000U; + + const uint8_t AHBPrescTable[16] = {0U, 0U, 0U, 0U, 0U, 0U, 0U, 0U, 1U, 2U, 3U, 4U, 6U, 7U, 8U, 9U}; + const uint8_t APBPrescTable[8] = {0U, 0U, 0U, 0U, 1U, 2U, 3U, 4U}; + const uint32_t MSIRangeTable[12] = {100000U, 200000U, 400000U, 800000U, 1000000U, 2000000U, \ + 4000000U, 8000000U, 16000000U, 24000000U, 32000000U, 48000000U}; +/** + * @} + */ + +/** @addtogroup STM32L4xx_System_Private_FunctionPrototypes + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32L4xx_System_Private_Functions + * @{ + */ + +/** + * @brief Setup the microcontroller system. + * @param None + * @retval None + */ + +void SystemInit(void) +{ + /* FPU settings ------------------------------------------------------------*/ + #if (__FPU_PRESENT == 1) && (__FPU_USED == 1) + SCB->CPACR |= ((3UL << 10*2)|(3UL << 11*2)); /* set CP10 and CP11 Full Access */ + #endif + + /* Reset the RCC clock configuration to the default reset state ------------*/ + /* Set MSION bit */ + RCC->CR |= RCC_CR_MSION; + + /* Reset CFGR register */ + RCC->CFGR = 0x00000000U; + + /* Reset HSEON, CSSON , HSION, and PLLON bits */ + RCC->CR &= 0xEAF6FFFFU; + + /* Reset PLLCFGR register */ + RCC->PLLCFGR = 0x00001000U; + + /* Reset HSEBYP bit */ + RCC->CR &= 0xFFFBFFFFU; + + /* Disable all interrupts */ + RCC->CIER = 0x00000000U; + + /* Configure the Vector Table location add offset address ------------------*/ +#ifdef VECT_TAB_SRAM + SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */ +#else + SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */ +#endif +} + +/** + * @brief Update SystemCoreClock variable according to Clock Register Values. + * The SystemCoreClock variable contains the core clock (HCLK), it can + * be used by the user application to setup the SysTick timer or configure + * other parameters. + * + * @note Each time the core clock (HCLK) changes, this function must be called + * to update SystemCoreClock variable value. Otherwise, any configuration + * based on this variable will be incorrect. + * + * @note - The system frequency computed by this function is not the real + * frequency in the chip. It is calculated based on the predefined + * constant and the selected clock source: + * + * - If SYSCLK source is MSI, SystemCoreClock will contain the MSI_VALUE(*) + * + * - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(**) + * + * - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(***) + * + * - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(***) + * or HSI_VALUE(*) or MSI_VALUE(*) multiplied/divided by the PLL factors. + * + * (*) MSI_VALUE is a constant defined in stm32l4xx_hal.h file (default value + * 4 MHz) but the real value may vary depending on the variations + * in voltage and temperature. + * + * (**) HSI_VALUE is a constant defined in stm32l4xx_hal.h file (default value + * 16 MHz) but the real value may vary depending on the variations + * in voltage and temperature. + * + * (***) HSE_VALUE is a constant defined in stm32l4xx_hal.h file (default value + * 8 MHz), user has to ensure that HSE_VALUE is same as the real + * frequency of the crystal used. Otherwise, this function may + * have wrong result. + * + * - The result of this function could be not correct when using fractional + * value for HSE crystal. + * + * @param None + * @retval None + */ +void SystemCoreClockUpdate(void) +{ + uint32_t tmp = 0U, msirange = 0U, pllvco = 0U, pllr = 2U, pllsource = 0U, pllm = 2U; + + /* Get MSI Range frequency--------------------------------------------------*/ + if((RCC->CR & RCC_CR_MSIRGSEL) == RESET) + { /* MSISRANGE from RCC_CSR applies */ + msirange = (RCC->CSR & RCC_CSR_MSISRANGE) >> 8U; + } + else + { /* MSIRANGE from RCC_CR applies */ + msirange = (RCC->CR & RCC_CR_MSIRANGE) >> 4U; + } + /*MSI frequency range in HZ*/ + msirange = MSIRangeTable[msirange]; + + /* Get SYSCLK source -------------------------------------------------------*/ + switch (RCC->CFGR & RCC_CFGR_SWS) + { + case 0x00: /* MSI used as system clock source */ + SystemCoreClock = msirange; + break; + + case 0x04: /* HSI used as system clock source */ + SystemCoreClock = HSI_VALUE; + break; + + case 0x08: /* HSE used as system clock source */ + SystemCoreClock = HSE_VALUE; + break; + + case 0x0C: /* PLL used as system clock source */ + /* PLL_VCO = (HSE_VALUE or HSI_VALUE or MSI_VALUE/ PLLM) * PLLN + SYSCLK = PLL_VCO / PLLR + */ + pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC); + pllm = ((RCC->PLLCFGR & RCC_PLLCFGR_PLLM) >> 4U) + 1U ; + + switch (pllsource) + { + case 0x02: /* HSI used as PLL clock source */ + pllvco = (HSI_VALUE / pllm); + break; + + case 0x03: /* HSE used as PLL clock source */ + pllvco = (HSE_VALUE / pllm); + break; + + default: /* MSI used as PLL clock source */ + pllvco = (msirange / pllm); + break; + } + pllvco = pllvco * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 8U); + pllr = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLR) >> 25U) + 1U) * 2U; + SystemCoreClock = pllvco/pllr; + break; + + default: + SystemCoreClock = msirange; + break; + } + /* Compute HCLK clock frequency --------------------------------------------*/ + /* Get HCLK prescaler */ + tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4U)]; + /* HCLK clock frequency */ + SystemCoreClock >>= tmp; +} + + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ + +#endif /* REMOTE_UPDATE */ diff --git a/Core/Src/tim.c b/Core/Src/tim.c index a4b64e0..95f2c9e 100644 --- a/Core/Src/tim.c +++ b/Core/Src/tim.c @@ -227,7 +227,7 @@ void MX_TIM16_Init(void) /* USER CODE END TIM16_Init 1 */ htim16.Instance = TIM16; - htim16.Init.Prescaler = 79; + htim16.Init.Prescaler = 7999; htim16.Init.CounterMode = TIM_COUNTERMODE_UP; htim16.Init.Period = 65535; htim16.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; diff --git a/EWARM/micro_climate.ewp b/EWARM/micro_climate.ewp index 0fff44f..f1f9fa8 100644 --- a/EWARM/micro_climate.ewp +++ b/EWARM/micro_climate.ewp @@ -701,7 +701,7 @@ - 1 + 32 inputOutputBased @@ -786,7 +786,7 @@