From fa1cc826f114c61f7be24078b8061aeeaac64806 Mon Sep 17 00:00:00 2001 From: lijie Date: Fri, 8 Mar 2024 15:19:23 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0ADC=E9=87=87=E9=9B=86?= =?UTF-8?q?=E7=94=B5=E5=8E=8B=E5=92=8CRGB=E7=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- APP/foc.c | 10 +- APP/mymain.c | 31 +- APP/mymain.h | 2 + APP/vcc_adc.c | 43 ++ APP/vcc_adc.h | 14 + Core/Inc/adc.h | 52 ++ Core/Inc/stm32h7xx_hal_conf.h | 2 +- Core/Src/adc.c | 163 +++++ Core/Src/gpio.c | 2 +- Core/Src/main.c | 10 +- Core/Src/tim.c | 6 +- IMU/icm42688.c | 1167 ++++++++++++++++----------------- IMU/icm42688.h | 511 ++++++++------- foc_n.ioc | 91 +-- 14 files changed, 1189 insertions(+), 915 deletions(-) create mode 100644 APP/vcc_adc.c create mode 100644 APP/vcc_adc.h create mode 100644 Core/Inc/adc.h create mode 100644 Core/Src/adc.c diff --git a/APP/foc.c b/APP/foc.c index cc48a31..2be86b0 100644 --- a/APP/foc.c +++ b/APP/foc.c @@ -5,7 +5,7 @@ #define _constrain(amt,low,high) ((amt)<(low)?(low):((amt)>(high)?(high):(amt))) -float Voltage_PowerSupply = 12; +const float Voltage_PowerSupply = 12; float Pole_Pairs = 14; float Voltage_Limit = 6.9; float Velocity_Limit = 100; @@ -17,15 +17,15 @@ FOCTypeDef FOCStruct_Y={0,0,0,0,0,0,0,0,0,0,0,0,0,0}; void PID_Iint(void) { - FOCStruct_X.ZT_KP = 4; + FOCStruct_X.ZT_KP = 3.5; FOCStruct_X.ZT_KI = 0; FOCStruct_X.ZT_KD = 0.5; FOCStruct_X.V_KP = 0.1; - FOCStruct_X.V_KI = 2; + FOCStruct_X.V_KI = 1; FOCStruct_X.V_KD = 0; -//2024/1/2 YÖáЧ¹û²»´í - FOCStruct_Y.ZT_KP = 2; +/////////// + FOCStruct_Y.ZT_KP = 3; FOCStruct_Y.ZT_KI = 0; FOCStruct_Y.ZT_KD = 0.5; diff --git a/APP/mymain.c b/APP/mymain.c index 85472fb..583adee 100644 --- a/APP/mymain.c +++ b/APP/mymain.c @@ -9,35 +9,40 @@ void mymain() HAL_UART_Receive_IT(&huart1, (uint8_t *)g_rx_buffer, RXBUFFERSIZE); //¿ªÆô´®¿Ú1½ÓÊÕÖÐ¶Ï HAL_Delay(2000); led_init(); + adc_init(); tle5012b_init(); - Init_ICM42688(); - imu_rest(); +// Init_ICM42688(); +// imu_rest(); moto_Init(); PID_Iint(); setvbuf(stdout, NULL, _IONBF, 0); //½â¾öprintfûÓÐ\n²»·¢ËÍÎÊÌâ float x = 0,y=0; unsigned int i =0; HAL_TIM_Base_Start(&htim5); //Æô¶¯¶¨Ê±Æ÷ -// while(i<3300*3) +// while(i<2000*1) // { -// Angel_closed_loop(motorx,&FOCStruct_X,-0.2); -// Angel_closed_loop(motory,&FOCStruct_Y,2.3); +//// MpuGetData(); +//// GetAngle(&ICM42688,&Angle); +// Angel_closed_loop(motorx,&FOCStruct_X,3.0); +// Angel_closed_loop(motory,&FOCStruct_Y,2.2); // i++; // } // i=0; - LED_ON; +// LED_ON; while(1) { - MpuGetData(); - GetAngle(&ICM42688,&Angle); - x = Angle.pitch; - y = Angle.roll ; - Zitai_closed_loop(motorx,&FOCStruct_X,x); - Zitai_closed_loop(motory,&FOCStruct_Y,-y); - commander_run(); +// MpuGetData(); +// GetAngle(&ICM42688,&Angle); +// x = Angle.pitch; +// y = Angle.roll; +// Zitai_closed_loop(motorx,&FOCStruct_X,x); +// Zitai_closed_loop(motory,&FOCStruct_Y,-y); +// commander_run(); // x = getAngle(motorx); // y = getAngle(motory); +// x= get_VCC(); // printf("%fY%f\n",x,y); +// HAL_Delay(2); // speed_closed_loop(motorx,&FOCStruct_X,_2PI*5); // speed_closed_loop(motory,&FOCStruct_Y,_2PI*2); // printf("b%d\n",b); diff --git a/APP/mymain.h b/APP/mymain.h index ac8c039..a91bfdb 100644 --- a/APP/mymain.h +++ b/APP/mymain.h @@ -16,6 +16,7 @@ #include "main.h" #include "tim.h" +#include "adc.h" #include "usart.h" #include "gpio.h" #include "tle5012b.h" @@ -30,6 +31,7 @@ #include "LED.h" #include "Usart1.h" #include "LED_RGB.h" +#include "vcc_adc.h" void mymain(); #endif //FOC_N_MYMAIN_H diff --git a/APP/vcc_adc.c b/APP/vcc_adc.c new file mode 100644 index 0000000..ffb4972 --- /dev/null +++ b/APP/vcc_adc.c @@ -0,0 +1,43 @@ +// +// Created by hu123456 on 2024/3/8. +// + +#include "vcc_adc.h" + +void adc_init(void) +{ + HAL_ADCEx_Calibration_Start(&hadc1, ADC_CALIB_OFFSET, ADC_SINGLE_ENDED); +} + +uint32_t adc_get_result(void) +{ + ADC_ChannelConfTypeDef adc_ch_conf = {0}; + + adc_ch_conf.Channel = ADC_CHANNEL_8; + adc_ch_conf.Rank = ADC_REGULAR_RANK_1; + adc_ch_conf.SamplingTime = ADC_SAMPLETIME_810CYCLES_5; + adc_ch_conf.SingleDiff = ADC_SINGLE_ENDED; + adc_ch_conf.OffsetNumber = ADC_OFFSET_NONE; + adc_ch_conf.Offset = 0; + HAL_ADC_ConfigChannel(&hadc1, &adc_ch_conf); + + HAL_ADC_Start(&hadc1); + HAL_ADC_PollForConversion(&hadc1, 10); + return HAL_ADC_GetValue(&hadc1); +} + +float get_VCC(void) +{ + uint32_t temp_val = 0; + float vcc; + for (uint8_t t = 0; t < 10; t++) + { + temp_val += adc_get_result(); + HAL_Delay(5); + } + vcc = temp_val/10.f/65535.f * 3.3 * 11.f; + return vcc; +} + + + diff --git a/APP/vcc_adc.h b/APP/vcc_adc.h new file mode 100644 index 0000000..d0d8473 --- /dev/null +++ b/APP/vcc_adc.h @@ -0,0 +1,14 @@ +// +// Created by hu123456 on 2024/3/8. +// + +#ifndef FOC_N_VCC_ADC_H +#define FOC_N_VCC_ADC_H +#include "mymain.h" + +void adc_init(void); +uint32_t adc_get_result(void); +float get_VCC(void); + + +#endif //FOC_N_VCC_ADC_H diff --git a/Core/Inc/adc.h b/Core/Inc/adc.h new file mode 100644 index 0000000..5692f38 --- /dev/null +++ b/Core/Inc/adc.h @@ -0,0 +1,52 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file adc.h + * @brief This file contains all the function prototypes for + * the adc.c file + ****************************************************************************** + * @attention + * + * Copyright (c) 2024 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ +/* USER CODE END Header */ +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __ADC_H__ +#define __ADC_H__ + +#ifdef __cplusplus +extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" + +/* USER CODE BEGIN Includes */ + +/* USER CODE END Includes */ + +extern ADC_HandleTypeDef hadc1; + +/* USER CODE BEGIN Private defines */ + +/* USER CODE END Private defines */ + +void MX_ADC1_Init(void); + +/* USER CODE BEGIN Prototypes */ + +/* USER CODE END Prototypes */ + +#ifdef __cplusplus +} +#endif + +#endif /* __ADC_H__ */ + diff --git a/Core/Inc/stm32h7xx_hal_conf.h b/Core/Inc/stm32h7xx_hal_conf.h index ffafaa9..7e471d7 100644 --- a/Core/Inc/stm32h7xx_hal_conf.h +++ b/Core/Inc/stm32h7xx_hal_conf.h @@ -34,7 +34,7 @@ */ #define HAL_MODULE_ENABLED - /* #define HAL_ADC_MODULE_ENABLED */ + #define HAL_ADC_MODULE_ENABLED /* #define HAL_FDCAN_MODULE_ENABLED */ /* #define HAL_FMAC_MODULE_ENABLED */ /* #define HAL_CEC_MODULE_ENABLED */ diff --git a/Core/Src/adc.c b/Core/Src/adc.c new file mode 100644 index 0000000..6c3edbf --- /dev/null +++ b/Core/Src/adc.c @@ -0,0 +1,163 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file adc.c + * @brief This file provides code for the configuration + * of the ADC instances. + ****************************************************************************** + * @attention + * + * Copyright (c) 2024 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ +/* USER CODE END Header */ +/* Includes ------------------------------------------------------------------*/ +#include "adc.h" + +/* USER CODE BEGIN 0 */ + +/* USER CODE END 0 */ + +ADC_HandleTypeDef hadc1; + +/* ADC1 init function */ +void MX_ADC1_Init(void) +{ + + /* USER CODE BEGIN ADC1_Init 0 */ + + /* USER CODE END ADC1_Init 0 */ + + ADC_MultiModeTypeDef multimode = {0}; + ADC_ChannelConfTypeDef sConfig = {0}; + + /* USER CODE BEGIN ADC1_Init 1 */ + + /* USER CODE END ADC1_Init 1 */ + + /** Common config + */ + hadc1.Instance = ADC1; + hadc1.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV1; + hadc1.Init.Resolution = ADC_RESOLUTION_16B; + hadc1.Init.ScanConvMode = ADC_SCAN_DISABLE; + hadc1.Init.EOCSelection = ADC_EOC_SINGLE_CONV; + hadc1.Init.LowPowerAutoWait = DISABLE; + hadc1.Init.ContinuousConvMode = DISABLE; + hadc1.Init.NbrOfConversion = 1; + hadc1.Init.DiscontinuousConvMode = DISABLE; + hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START; + hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE; + hadc1.Init.ConversionDataManagement = ADC_CONVERSIONDATA_DR; + hadc1.Init.Overrun = ADC_OVR_DATA_PRESERVED; + hadc1.Init.LeftBitShift = ADC_LEFTBITSHIFT_NONE; + hadc1.Init.OversamplingMode = DISABLE; + if (HAL_ADC_Init(&hadc1) != HAL_OK) + { + Error_Handler(); + } + + /** Configure the ADC multi-mode + */ + multimode.Mode = ADC_MODE_INDEPENDENT; + if (HAL_ADCEx_MultiModeConfigChannel(&hadc1, &multimode) != HAL_OK) + { + Error_Handler(); + } + + /** Configure Regular Channel + */ + sConfig.Channel = ADC_CHANNEL_8; + sConfig.Rank = ADC_REGULAR_RANK_1; + sConfig.SamplingTime = ADC_SAMPLETIME_1CYCLE_5; + sConfig.SingleDiff = ADC_SINGLE_ENDED; + sConfig.OffsetNumber = ADC_OFFSET_NONE; + sConfig.Offset = 0; + sConfig.OffsetSignedSaturation = DISABLE; + if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) + { + Error_Handler(); + } + /* USER CODE BEGIN ADC1_Init 2 */ + + /* USER CODE END ADC1_Init 2 */ + +} + +void HAL_ADC_MspInit(ADC_HandleTypeDef* adcHandle) +{ + + GPIO_InitTypeDef GPIO_InitStruct = {0}; + RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0}; + if(adcHandle->Instance==ADC1) + { + /* USER CODE BEGIN ADC1_MspInit 0 */ + + /* USER CODE END ADC1_MspInit 0 */ + + /** Initializes the peripherals clock + */ + PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_ADC; + PeriphClkInitStruct.PLL2.PLL2M = 25; + PeriphClkInitStruct.PLL2.PLL2N = 240; + PeriphClkInitStruct.PLL2.PLL2P = 10; + PeriphClkInitStruct.PLL2.PLL2Q = 2; + PeriphClkInitStruct.PLL2.PLL2R = 2; + PeriphClkInitStruct.PLL2.PLL2RGE = RCC_PLL2VCIRANGE_0; + PeriphClkInitStruct.PLL2.PLL2VCOSEL = RCC_PLL2VCOWIDE; + PeriphClkInitStruct.PLL2.PLL2FRACN = 0; + PeriphClkInitStruct.AdcClockSelection = RCC_ADCCLKSOURCE_PLL2; + if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK) + { + Error_Handler(); + } + + /* ADC1 clock enable */ + __HAL_RCC_ADC12_CLK_ENABLE(); + + __HAL_RCC_GPIOC_CLK_ENABLE(); + /**ADC1 GPIO Configuration + PC5 ------> ADC1_INP8 + */ + GPIO_InitStruct.Pin = GPIO_PIN_5; + GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; + GPIO_InitStruct.Pull = GPIO_NOPULL; + HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); + + /* USER CODE BEGIN ADC1_MspInit 1 */ + + /* USER CODE END ADC1_MspInit 1 */ + } +} + +void HAL_ADC_MspDeInit(ADC_HandleTypeDef* adcHandle) +{ + + if(adcHandle->Instance==ADC1) + { + /* USER CODE BEGIN ADC1_MspDeInit 0 */ + + /* USER CODE END ADC1_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_ADC12_CLK_DISABLE(); + + /**ADC1 GPIO Configuration + PC5 ------> ADC1_INP8 + */ + HAL_GPIO_DeInit(GPIOC, GPIO_PIN_5); + + /* USER CODE BEGIN ADC1_MspDeInit 1 */ + + /* USER CODE END ADC1_MspDeInit 1 */ + } +} + +/* USER CODE BEGIN 1 */ + +/* USER CODE END 1 */ diff --git a/Core/Src/gpio.c b/Core/Src/gpio.c index 46c2592..28163ab 100644 --- a/Core/Src/gpio.c +++ b/Core/Src/gpio.c @@ -42,9 +42,9 @@ void MX_GPIO_Init(void) /* GPIO Ports Clock Enable */ __HAL_RCC_GPIOH_CLK_ENABLE(); __HAL_RCC_GPIOA_CLK_ENABLE(); + __HAL_RCC_GPIOC_CLK_ENABLE(); __HAL_RCC_GPIOB_CLK_ENABLE(); __HAL_RCC_GPIOD_CLK_ENABLE(); - __HAL_RCC_GPIOC_CLK_ENABLE(); } diff --git a/Core/Src/main.c b/Core/Src/main.c index 6b46a30..8bb713a 100644 --- a/Core/Src/main.c +++ b/Core/Src/main.c @@ -18,6 +18,7 @@ /* USER CODE END Header */ /* Includes ------------------------------------------------------------------*/ #include "main.h" +#include "adc.h" #include "spi.h" #include "tim.h" #include "usart.h" @@ -94,10 +95,11 @@ int main(void) MX_SPI1_Init(); MX_SPI2_Init(); MX_TIM4_Init(); + MX_ADC1_Init(); /* USER CODE BEGIN 2 */ - - /* USER CODE END 2 */ mymain(); + /* USER CODE END 2 */ + /* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) @@ -133,6 +135,10 @@ void SystemClock_Config(void) while(!__HAL_PWR_GET_FLAG(PWR_FLAG_VOSRDY)) {} + /** Macro to configure the PLL clock source + */ + __HAL_RCC_PLL_PLLSOURCE_CONFIG(RCC_PLLSOURCE_HSE); + /** Initializes the RCC Oscillators according to the specified parameters * in the RCC_OscInitTypeDef structure. */ diff --git a/Core/Src/tim.c b/Core/Src/tim.c index 43385ef..4973726 100644 --- a/Core/Src/tim.c +++ b/Core/Src/tim.c @@ -109,7 +109,7 @@ void MX_TIM3_Init(void) htim3.Instance = TIM3; htim3.Init.Prescaler = 1 - 1; htim3.Init.CounterMode = TIM_COUNTERMODE_CENTERALIGNED1; - htim3.Init.Period = 4800-1; + htim3.Init.Period = 4800 - 1; htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; htim3.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; if (HAL_TIM_Base_Init(&htim3) != HAL_OK) @@ -169,9 +169,9 @@ void MX_TIM4_Init(void) /* USER CODE END TIM4_Init 1 */ htim4.Instance = TIM4; - htim4.Init.Prescaler = 240 - 1; + htim4.Init.Prescaler = 1 - 1; htim4.Init.CounterMode = TIM_COUNTERMODE_UP; - htim4.Init.Period = 255; + htim4.Init.Period = 255 - 1; htim4.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; htim4.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; if (HAL_TIM_Base_Init(&htim4) != HAL_OK) diff --git a/IMU/icm42688.c b/IMU/icm42688.c index 7f1f5fd..33fa8c0 100644 --- a/IMU/icm42688.c +++ b/IMU/icm42688.c @@ -1,335 +1,51 @@ -#include "icm42688.h" - -#include "kalman.h" -#include "alldata.h" - -static float icm42688_acc_inv = 1, icm42688_gyro_inv = 1; - -void Spi_GPIO_Init() -{ - GPIO_InitTypeDef GPIO_InitStruct = {0}; - __HAL_RCC_GPIOB_CLK_ENABLE(); - /*Configure GPIO pins : PBPin PB12 */ - GPIO_InitStruct.Pin = GPIO_PIN_12; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); -} - -void Init_ICM42688(void) -{ - unsigned char model; - Spi_GPIO_Init(); - // ¶ÁÈ¡ÍÓÂÝÒÇÐͺÅÍÓÂÝÒÇ×Ô¼ì - model = 0xff; - while(1) - { - Read_Datas_ICM42688(ICM42688_WHO_AM_I, &model, 1); - if(model == 0x47) - { - break; - } - ICM42688_DELAY_MS(10); - } - Write_Data_ICM42688(ICM42688_PWR_MGMT0,0x00); // ¸´Î»É豸 - ICM42688_DELAY_MS(10); // ²Ù×÷ÍêPWR¡ªMGMT0¼Ä´æÆ÷ºó200usÄÚ²»ÄÜÓÐÈκζÁд¼Ä´æÆ÷µÄ²Ù×÷ - // ÉèÖÃICM42688¼ÓËٶȼƺÍÍÓÂÝÒǵÄÁ¿³ÌºÍÊä³öËÙÂÊ - Set_LowpassFilter_Range_ICM42688(ICM42688_AFS_16G, ICM42688_AODR_32000HZ, ICM42688_GFS_2000DPS, ICM42688_GODR_32000HZ); - Write_Data_ICM42688(ICM42688_PWR_MGMT0, 0x0f); // ÉèÖÃGYRO_MODE,ACCEL_MODEΪµÍÔëÉùģʽ - ICM42688_DELAY_MS(10); -} - -void Set_LowpassFilter_Range_ICM42688(enum icm42688_afs afs, enum icm42688_aodr aodr, enum icm42688_gfs gfs, enum icm42688_godr godr) -{ - Write_Data_ICM42688(ICM42688_ACCEL_CONFIG0, (afs << 5) | (aodr + 1)); // ³õʼ»¯ACCELÁ¿³ÌºÍÊä³öËÙÂÊ(p77) - Write_Data_ICM42688(ICM42688_GYRO_CONFIG0, (gfs << 5) | (godr + 1)); // ³õʼ»¯GYROÁ¿³ÌºÍÊä³öËÙÂÊ(p76) - - switch(afs) - { - case ICM42688_AFS_2G: - icm42688_acc_inv = 2000 / 32768.0f; // ¼ÓËٶȼÆÁ¿³ÌΪ:¡À2g - break; - case ICM42688_AFS_4G: - icm42688_acc_inv = 4000 / 32768.0f; // ¼ÓËٶȼÆÁ¿³ÌΪ:¡À4g - break; - case ICM42688_AFS_8G: - icm42688_acc_inv = 8000 / 32768.0f; // ¼ÓËٶȼÆÁ¿³ÌΪ:¡À8g - break; - case ICM42688_AFS_16G: - icm42688_acc_inv = 16000 / 32768.0f; // ¼ÓËٶȼÆÁ¿³ÌΪ:¡À16g - break; - default: - icm42688_acc_inv = 1; // ²»×ª»¯ÎªÊµ¼ÊÊý¾Ý - break; - } - switch(gfs) - { - case ICM42688_GFS_15_625DPS: - icm42688_gyro_inv = 15.625f / 32768.0f; // ÍÓÂÝÒÇÁ¿³ÌΪ:¡À15.625dps - break; - case ICM42688_GFS_31_25DPS: - icm42688_gyro_inv = 31.25f / 32768.0f; // ÍÓÂÝÒÇÁ¿³ÌΪ:¡À31.25dps - break; - case ICM42688_GFS_62_5DPS: - icm42688_gyro_inv = 62.5f / 32768.0f; // ÍÓÂÝÒÇÁ¿³ÌΪ:¡À62.5dps - break; - case ICM42688_GFS_125DPS: - icm42688_gyro_inv = 125.0f / 32768.0f; // ÍÓÂÝÒÇÁ¿³ÌΪ:¡À125dps - break; - case ICM42688_GFS_250DPS: - icm42688_gyro_inv = 250.0f / 32768.0f; // ÍÓÂÝÒÇÁ¿³ÌΪ:¡À250dps - break; - case ICM42688_GFS_500DPS: - icm42688_gyro_inv = 500.0f / 32768.0f; // ÍÓÂÝÒÇÁ¿³ÌΪ:¡À500dps - break; - case ICM42688_GFS_1000DPS: - icm42688_gyro_inv = 1000.0f / 32768.0f; // ÍÓÂÝÒÇÁ¿³ÌΪ:¡À1000dps - break; - case ICM42688_GFS_2000DPS: - icm42688_gyro_inv = 2000.0f / 32768.0f; // ÍÓÂÝÒÇÁ¿³ÌΪ:¡À2000dps - break; - default: - icm42688_gyro_inv = 1; // ²»×ª»¯ÎªÊµ¼ÊÊý¾Ý - break; - } -} - -/** -* -* @brief ICM42688ÍÓÂÝÒÇдÊý¾Ý -* @param reg ¼Ä´æÆ÷ -* @param data ÐèҪд½ø¸Ã¼Ä´æÆ÷µÄÊý¾Ý -* @return void -* @notes ICM42688.cÎļþÄÚ²¿µ÷ÓÃ,Óû§ÎÞÐèµ÷Óó¢ÊÔ -* Example: Write_Data_ICM42688(0x00,0x00); -* -**/ -static void Write_Data_ICM42688(unsigned char reg, unsigned char dat) -{ - HAL_GPIO_WritePin(GPIOB,GPIO_PIN_12,0); - HAL_SPI_Transmit(&hspi2, ®, 1, 0xff); - HAL_SPI_Transmit(&hspi2, &dat, 1, 0xff); - HAL_GPIO_WritePin(GPIOB,GPIO_PIN_12,1); -} - -/** -* -* @brief ICM42688ÍÓÂÝÒǶÁÊý¾Ý -* @param reg ¼Ä´æÆ÷ -* @param data °Ñ¶Á³öµÄÊý¾Ý´æÈëdata -* @param num Êý¾Ý¸öÊý -* @return void -* @notes ICM42688.cÎļþÄÚ²¿µ÷ÓÃ,Óû§ÎÞÐèµ÷Óó¢ÊÔ -* Example: Read_Datas_ICM42688(0x00,0x00,1); -* -**/ -static void Read_Datas_ICM42688(unsigned char reg, unsigned char *dat, unsigned int num) -{ - uint8_t Data; - reg |= 0x80; - HAL_GPIO_WritePin(GPIOB,GPIO_PIN_12,0); - HAL_SPI_Transmit(&hspi2, ®, 1, 0xff ); - while(num--) - { - HAL_SPI_Receive(&hspi2,&Data, 1, 0xff); - *dat = Data; - dat++; - } - HAL_GPIO_WritePin(GPIOB,GPIO_PIN_12,1); -} -/* ¶ÁÈ¡MPU6050Êý¾Ý²¢¼ÓÂ˲¨ */ -//·µ»ØÖµ:0,Õý³£ -//ÆäËû,´íÎó´úÂë -_st_Mpu ICM42688; -static volatile int16_t *pMpu = (int16_t *)&ICM42688; -int16_t MpuOffset[6] = {0}; //MPU6050²¹³¥ÊýÖµ - -uint8_t MpuGetData(void) -{ - uint8_t i; - int res; - uint8_t buffer[12]; - Read_Datas_ICM42688(ICM42688_ACCEL_DATA_X1,buffer,12); - - for(i=0;i<6;i++) - { - pMpu[i] = (((int16_t)buffer[i<<1] << 8) | buffer[(i<<1)+1])-MpuOffset[i]; /* ½«Êý¾ÝÕûΪ16bit£¬²¢¼õȥˮƽУ׼ֵ */ - if(i < 3) /* ½Ç¼ÓËÙ¶È¿¨¶ûÂüÂ˲¨ */ - { - { - static struct KalmanFilter EKF[3] = {{0.02,0,0,0,0.001,0.543},{0.02,0,0,0,0.001,0.543},{0.02,0,0,0,0.001,0.543}}; - kalmanfiter(&EKF[i],(float)pMpu[i]); - pMpu[i] = (int16_t)EKF[i].Out; - } - } - if(i > 2) /* ½ÇËÙ¶ÈÒ»½×»¥²¹Â˲¨ */ - { - uint8_t k=i-3; - const float factor = 0.15f; - static float tBuff[3]; - - pMpu[i] = tBuff[k] = tBuff[k] * (1 - factor) + pMpu[i] * factor; - } - } - return 0; -} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -/////////////Ä£Äâspi°æ±¾ //#include "icm42688.h" // //#include "kalman.h" //#include "alldata.h" // -//// ICM42688¼ÓËٶȼÆÊý¾Ý -//float icm42688_acc_x, icm42688_acc_y, icm42688_acc_z ; -//// ICM42688½Ç¼ÓËÙ¶ÈÊý¾Ý -//float icm42688_gyro_x, icm42688_gyro_y, icm42688_gyro_z ; -// //static float icm42688_acc_inv = 1, icm42688_gyro_inv = 1; // //void Spi_GPIO_Init() //{ -// -// GPIO_InitTypeDef GPIO_InitStruct = {0}; -// __HAL_RCC_GPIOB_CLK_ENABLE(); -// -// /*Configure GPIO pins : PBPin PB12 */ -// GPIO_InitStruct.Pin = GPIO_PIN_12 | GPIO_PIN_13 |GPIO_PIN_15; -// GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; -// GPIO_InitStruct.Pull = GPIO_NOPULL; -// GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; -// HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); -// -// /*Configure GPIO pins : PBPin PB14 */ -// GPIO_InitStruct.Pin = GPIO_PIN_14; -// GPIO_InitStruct.Mode = GPIO_MODE_INPUT; -// GPIO_InitStruct.Pull = GPIO_NOPULL; -// HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); +// GPIO_InitTypeDef GPIO_InitStruct = {0}; +// __HAL_RCC_GPIOB_CLK_ENABLE(); +// /*Configure GPIO pins : PBPin PB12 */ +// GPIO_InitStruct.Pin = GPIO_PIN_12; +// GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; +// GPIO_InitStruct.Pull = GPIO_NOPULL; +// GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; +// HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); //} // //void Init_ICM42688(void) //{ -// unsigned char time; -// unsigned char model; -// Spi_GPIO_Init(); -// // ¶ÁÈ¡ÍÓÂÝÒÇÐͺÅÍÓÂÝÒÇ×Ô¼ì -// model = 0xff; -// while(1) -// { -// Read_Datas_ICM42688(ICM42688_WHO_AM_I, &model, 1); -// if(model == 0x47) -// { -// // ICM42688 -// break; -// } -// ICM42688_DELAY_MS(10); -// } -// Write_Data_ICM42688(ICM42688_PWR_MGMT0,0x00); // ¸´Î»É豸 -// ICM42688_DELAY_MS(10); // ²Ù×÷ÍêPWR¡ªMGMT0¼Ä´æÆ÷ºó200usÄÚ²»ÄÜÓÐÈκζÁд¼Ä´æÆ÷µÄ²Ù×÷ -// -// // ÉèÖÃICM42688¼ÓËٶȼƺÍÍÓÂÝÒǵÄÁ¿³ÌºÍÊä³öËÙÂÊ -// Set_LowpassFilter_Range_ICM42688(ICM42688_AFS_16G, ICM42688_AODR_32000HZ, ICM42688_GFS_2000DPS, ICM42688_GODR_32000HZ); -// -// Write_Data_ICM42688(ICM42688_PWR_MGMT0, 0x0f); // ÉèÖÃGYRO_MODE,ACCEL_MODEΪµÍÔëÉùģʽ -// ICM42688_DELAY_MS(10); -//} -///** -//* -//* @brief »ñµÃICM42688ÍÓÂÝÒǼÓËÙ¶È -//* @param -//* @return void -//* @notes µ¥Î»:g(m/s^2),Óû§µ÷Óà -//* Example: Get_Acc_ICM42688(); -//* -//**/ -//void Get_Acc_ICM42688(void) -//{ -// unsigned char dat[6]; -// Read_Datas_ICM42688(ICM42688_ACCEL_DATA_X1, dat, 6); -// icm42688_acc_x = icm42688_acc_inv * (short int)(((short int)dat[0] << 8) | dat[1]); -// icm42688_acc_y = icm42688_acc_inv * (short int)(((short int)dat[2] << 8) | dat[3]); -// icm42688_acc_z = icm42688_acc_inv * (short int)(((short int)dat[4] << 8) | dat[5]); +// printf("Init_ICM42688\r\n"); +// HAL_Delay(1000); +// HAL_Delay(1000); +// unsigned char model; +// Spi_GPIO_Init(); +// // ¶ÁÈ¡ÍÓÂÝÒÇÐͺÅÍÓÂÝÒÇ×Ô¼ì +// model = 0xff; +// while(1) +// { +// Read_Datas_ICM42688(ICM42688_WHO_AM_I, &model, 1); +// if(model == 0x47) +// { +// printf("model:%x\r\n",model); +// HAL_Delay(1000); +// HAL_Delay(1000); +// break; +// } +// ICM42688_DELAY_MS(100); +// } +// Write_Data_ICM42688(ICM42688_PWR_MGMT0,0x00); // ¸´Î»É豸 +// ICM42688_DELAY_MS(10); // ²Ù×÷ÍêPWR¡ªMGMT0¼Ä´æÆ÷ºó200usÄÚ²»ÄÜÓÐÈκζÁд¼Ä´æÆ÷µÄ²Ù×÷ +// // ÉèÖÃICM42688¼ÓËٶȼƺÍÍÓÂÝÒǵÄÁ¿³ÌºÍÊä³öËÙÂÊ +// Set_LowpassFilter_Range_ICM42688(ICM42688_AFS_16G, ICM42688_AODR_32000HZ, ICM42688_GFS_2000DPS, ICM42688_GODR_32000HZ); +// Write_Data_ICM42688(ICM42688_PWR_MGMT0, 0x0f); // ÉèÖÃGYRO_MODE,ACCEL_MODEΪµÍÔëÉùģʽ +// ICM42688_DELAY_MS(10); //} // -///** -//* -//* @brief »ñµÃICM42688ÍÓÂÝÒǽǼÓËÙ¶È -//* @param -//* @return void -//* @notes µ¥Î»Îª:¡ã/s,Óû§µ÷Óà -//* Example: Get_Gyro_ICM42688(); -//* -//**/ -//void Get_Gyro_ICM42688(void) -//{ -// unsigned char dat[6]; -// Read_Datas_ICM42688(ICM42688_GYRO_DATA_X1, dat, 6); -// icm42688_gyro_x = icm42688_gyro_inv * (short int)(((short int)dat[0] << 8) | dat[1]); -// icm42688_gyro_y = icm42688_gyro_inv * (short int)(((short int)dat[2] << 8) | dat[3]); -// icm42688_gyro_z = icm42688_gyro_inv * (short int)(((short int)dat[4] << 8) | dat[5]); -//} -// -///** -//* -//* @brief ÉèÖÃICM42688ÍÓÂÝÒǵÍͨÂ˲¨Æ÷´ø¿íºÍÁ¿³Ì -//* @param afs // ¼ÓËٶȼÆÁ¿³Ì,¿ÉÔÚdmx_icm42688.hÎļþÀïö¾Ù¶¨ÒåÖв鿴 -//* @param aodr // ¼ÓËٶȼÆÊä³öËÙÂÊ,¿ÉÔÚdmx_icm42688.hÎļþÀïö¾Ù¶¨ÒåÖв鿴 -//* @param gfs // ÍÓÂÝÒÇÁ¿³Ì,¿ÉÔÚdmx_icm42688.hÎļþÀïö¾Ù¶¨ÒåÖв鿴 -//* @param godr // ÍÓÂÝÒÇÊä³öËÙÂÊ,¿ÉÔÚdmx_icm42688.hÎļþÀïö¾Ù¶¨ÒåÖв鿴 -//* @return void -//* @notes ICM42688.cÎļþÄÚ²¿µ÷ÓÃ,Óû§ÎÞÐèµ÷Óó¢ÊÔ -//* Example: Set_LowpassFilter_Range_ICM42688(ICM42688_AFS_16G,ICM42688_AODR_32000HZ,ICM42688_GFS_2000DPS,ICM42688_GODR_32000HZ); -//* -//**/ //void Set_LowpassFilter_Range_ICM42688(enum icm42688_afs afs, enum icm42688_aodr aodr, enum icm42688_gfs gfs, enum icm42688_godr godr) //{ // Write_Data_ICM42688(ICM42688_ACCEL_CONFIG0, (afs << 5) | (aodr + 1)); // ³õʼ»¯ACCELÁ¿³ÌºÍÊä³öËÙÂÊ(p77) @@ -337,222 +53,56 @@ uint8_t MpuGetData(void) // // switch(afs) // { -// case ICM42688_AFS_2G: -// icm42688_acc_inv = 2000 / 32768.0f; // ¼ÓËٶȼÆÁ¿³ÌΪ:¡À2g -// break; -// case ICM42688_AFS_4G: -// icm42688_acc_inv = 4000 / 32768.0f; // ¼ÓËٶȼÆÁ¿³ÌΪ:¡À4g -// break; -// case ICM42688_AFS_8G: -// icm42688_acc_inv = 8000 / 32768.0f; // ¼ÓËٶȼÆÁ¿³ÌΪ:¡À8g -// break; -// case ICM42688_AFS_16G: -// icm42688_acc_inv = 16000 / 32768.0f; // ¼ÓËٶȼÆÁ¿³ÌΪ:¡À16g -// break; -// default: -// icm42688_acc_inv = 1; // ²»×ª»¯ÎªÊµ¼ÊÊý¾Ý -// break; +// case ICM42688_AFS_2G: +// icm42688_acc_inv = 2000 / 32768.0f; // ¼ÓËٶȼÆÁ¿³ÌΪ:¡À2g +// break; +// case ICM42688_AFS_4G: +// icm42688_acc_inv = 4000 / 32768.0f; // ¼ÓËٶȼÆÁ¿³ÌΪ:¡À4g +// break; +// case ICM42688_AFS_8G: +// icm42688_acc_inv = 8000 / 32768.0f; // ¼ÓËٶȼÆÁ¿³ÌΪ:¡À8g +// break; +// case ICM42688_AFS_16G: +// icm42688_acc_inv = 16000 / 32768.0f; // ¼ÓËٶȼÆÁ¿³ÌΪ:¡À16g +// break; +// default: +// icm42688_acc_inv = 1; // ²»×ª»¯ÎªÊµ¼ÊÊý¾Ý +// break; // } // switch(gfs) // { -// case ICM42688_GFS_15_625DPS: -// icm42688_gyro_inv = 15.625f / 32768.0f; // ÍÓÂÝÒÇÁ¿³ÌΪ:¡À15.625dps -// break; -// case ICM42688_GFS_31_25DPS: -// icm42688_gyro_inv = 31.25f / 32768.0f; // ÍÓÂÝÒÇÁ¿³ÌΪ:¡À31.25dps -// break; -// case ICM42688_GFS_62_5DPS: -// icm42688_gyro_inv = 62.5f / 32768.0f; // ÍÓÂÝÒÇÁ¿³ÌΪ:¡À62.5dps -// break; -// case ICM42688_GFS_125DPS: -// icm42688_gyro_inv = 125.0f / 32768.0f; // ÍÓÂÝÒÇÁ¿³ÌΪ:¡À125dps -// break; -// case ICM42688_GFS_250DPS: -// icm42688_gyro_inv = 250.0f / 32768.0f; // ÍÓÂÝÒÇÁ¿³ÌΪ:¡À250dps -// break; -// case ICM42688_GFS_500DPS: -// icm42688_gyro_inv = 500.0f / 32768.0f; // ÍÓÂÝÒÇÁ¿³ÌΪ:¡À500dps -// break; -// case ICM42688_GFS_1000DPS: -// icm42688_gyro_inv = 1000.0f / 32768.0f; // ÍÓÂÝÒÇÁ¿³ÌΪ:¡À1000dps -// break; -// case ICM42688_GFS_2000DPS: -// icm42688_gyro_inv = 2000.0f / 32768.0f; // ÍÓÂÝÒÇÁ¿³ÌΪ:¡À2000dps -// break; -// default: -// icm42688_gyro_inv = 1; // ²»×ª»¯ÎªÊµ¼ÊÊý¾Ý -// break; +// case ICM42688_GFS_15_625DPS: +// icm42688_gyro_inv = 15.625f / 32768.0f; // ÍÓÂÝÒÇÁ¿³ÌΪ:¡À15.625dps +// break; +// case ICM42688_GFS_31_25DPS: +// icm42688_gyro_inv = 31.25f / 32768.0f; // ÍÓÂÝÒÇÁ¿³ÌΪ:¡À31.25dps +// break; +// case ICM42688_GFS_62_5DPS: +// icm42688_gyro_inv = 62.5f / 32768.0f; // ÍÓÂÝÒÇÁ¿³ÌΪ:¡À62.5dps +// break; +// case ICM42688_GFS_125DPS: +// icm42688_gyro_inv = 125.0f / 32768.0f; // ÍÓÂÝÒÇÁ¿³ÌΪ:¡À125dps +// break; +// case ICM42688_GFS_250DPS: +// icm42688_gyro_inv = 250.0f / 32768.0f; // ÍÓÂÝÒÇÁ¿³ÌΪ:¡À250dps +// break; +// case ICM42688_GFS_500DPS: +// icm42688_gyro_inv = 500.0f / 32768.0f; // ÍÓÂÝÒÇÁ¿³ÌΪ:¡À500dps +// break; +// case ICM42688_GFS_1000DPS: +// icm42688_gyro_inv = 1000.0f / 32768.0f; // ÍÓÂÝÒÇÁ¿³ÌΪ:¡À1000dps +// break; +// case ICM42688_GFS_2000DPS: +// icm42688_gyro_inv = 2000.0f / 32768.0f; // ÍÓÂÝÒÇÁ¿³ÌΪ:¡À2000dps +// break; +// default: +// icm42688_gyro_inv = 1; // ²»×ª»¯ÎªÊµ¼ÊÊý¾Ý +// break; // } //} // ///** //* -//* @brief ICM42688ÍÓÂÝÒÇд8bitÊý¾Ý -//* @param data Êý¾Ý -//* @return void -//* @notes ICM42688.cÎļþÄÚ²¿µ÷ÓÃ,Óû§ÎÞÐèµ÷Óó¢ÊÔ -//* Example: Write_8bit_ICM42688(0x00); -//* -//**/ -//static void Write_8bit_ICM42688(unsigned char dat) -//{ -// HAL_GPIO_WritePin(GPIOB,GPIO_PIN_13,0); -// if(0x80 & dat) -// { -// sys_gpio_pin_set(GPIOB,GPIO_PIN_15,1); -// } -// else -// { -// sys_gpio_pin_set(GPIOB,GPIO_PIN_15,0); -// } -// HAL_GPIO_WritePin(GPIOB,GPIO_PIN_13,1); -// dat <<= 1; -// -// -// HAL_GPIO_WritePin(GPIOB,GPIO_PIN_13,0); -// if(0x80 & dat) -// { -// sys_gpio_pin_set(GPIOB,GPIO_PIN_15,1); -// } -// else -// { -// sys_gpio_pin_set(GPIOB,GPIO_PIN_15,0); -// } -// HAL_GPIO_WritePin(GPIOB,GPIO_PIN_13,1); -// dat <<= 1; -// -// -// HAL_GPIO_WritePin(GPIOB,GPIO_PIN_13,0); -// if(0x80 & dat) -// { -// sys_gpio_pin_set(GPIOB,GPIO_PIN_15,1); -// } -// else -// { -// sys_gpio_pin_set(GPIOB,GPIO_PIN_15,0); -// } -// HAL_GPIO_WritePin(GPIOB,GPIO_PIN_13,1); -// dat <<= 1; -// -// -// HAL_GPIO_WritePin(GPIOB,GPIO_PIN_13,0); -// if(0x80 & dat) -// { -// sys_gpio_pin_set(GPIOB,GPIO_PIN_15,1); -// } -// else -// { -// sys_gpio_pin_set(GPIOB,GPIO_PIN_15,0); -// } -// HAL_GPIO_WritePin(GPIOB,GPIO_PIN_13,1); -// dat <<= 1; -// -// -// HAL_GPIO_WritePin(GPIOB,GPIO_PIN_13,0); -// if(0x80 & dat) -// { -// sys_gpio_pin_set(GPIOB,GPIO_PIN_15,1); -// } -// else -// { -// sys_gpio_pin_set(GPIOB,GPIO_PIN_15,0); -// } -// HAL_GPIO_WritePin(GPIOB,GPIO_PIN_13,1); -// dat <<= 1; -// -// -// HAL_GPIO_WritePin(GPIOB,GPIO_PIN_13,0); -// if(0x80 & dat) -// { -// sys_gpio_pin_set(GPIOB,GPIO_PIN_15,1); -// } -// else -// { -// sys_gpio_pin_set(GPIOB,GPIO_PIN_15,0); -// } -// HAL_GPIO_WritePin(GPIOB,GPIO_PIN_13,1); -// dat <<= 1; -// -// HAL_GPIO_WritePin(GPIOB,GPIO_PIN_13,0); -// if(0x80 & dat) -// { -// sys_gpio_pin_set(GPIOB,GPIO_PIN_15,1); -// } -// else -// { -// sys_gpio_pin_set(GPIOB,GPIO_PIN_15,0); -// } -// HAL_GPIO_WritePin(GPIOB,GPIO_PIN_13,1); -// dat <<= 1; -// -// HAL_GPIO_WritePin(GPIOB,GPIO_PIN_13,0); -// if(0x80 & dat) -// { -// sys_gpio_pin_set(GPIOB,GPIO_PIN_15,1); -// } -// else -// { -// sys_gpio_pin_set(GPIOB,GPIO_PIN_15,0); -// } -// HAL_GPIO_WritePin(GPIOB,GPIO_PIN_13,1); -// dat <<= 1; -//} -// -///** -//* -//* @brief ICM42688ÍÓÂÝÒǶÁ8bitÊý¾Ý -//* @param data Êý¾Ý -//* @return void -//* @notes ICM42688.cÎļþÄÚ²¿µ÷ÓÃ,Óû§ÎÞÐèµ÷Óó¢ÊÔ -//* Example: Read_8bit_ICM42688(dat); -//* -//**/ -//static void Read_8bit_ICM42688(unsigned char *dat) -//{ -// HAL_GPIO_WritePin(GPIOB,GPIO_PIN_13,0); -// *dat = *dat << 1; -// *dat |=sys_gpio_pin_get(GPIOB,GPIO_PIN_14); -// HAL_GPIO_WritePin(GPIOB,GPIO_PIN_13,1); -// -// -// HAL_GPIO_WritePin(GPIOB,GPIO_PIN_13,0); -// *dat = *dat << 1; -// *dat |=sys_gpio_pin_get(GPIOB,GPIO_PIN_14); -// HAL_GPIO_WritePin(GPIOB,GPIO_PIN_13,1); -// -// HAL_GPIO_WritePin(GPIOB,GPIO_PIN_13,0); -// *dat = *dat << 1; -// *dat |=sys_gpio_pin_get(GPIOB,GPIO_PIN_14); -// HAL_GPIO_WritePin(GPIOB,GPIO_PIN_13,1); -// -// HAL_GPIO_WritePin(GPIOB,GPIO_PIN_13,0); -// *dat = *dat << 1; -// *dat |=sys_gpio_pin_get(GPIOB,GPIO_PIN_14); -// HAL_GPIO_WritePin(GPIOB,GPIO_PIN_13,1); -// -// HAL_GPIO_WritePin(GPIOB,GPIO_PIN_13,0); -// *dat = *dat << 1; -// *dat |=sys_gpio_pin_get(GPIOB,GPIO_PIN_14); -// HAL_GPIO_WritePin(GPIOB,GPIO_PIN_13,1); -// -// HAL_GPIO_WritePin(GPIOB,GPIO_PIN_13,0); -// *dat = *dat << 1; -// *dat |=sys_gpio_pin_get(GPIOB,GPIO_PIN_14); -// HAL_GPIO_WritePin(GPIOB,GPIO_PIN_13,1); -// -// HAL_GPIO_WritePin(GPIOB,GPIO_PIN_13,0); -// *dat = *dat << 1; -// *dat |=sys_gpio_pin_get(GPIOB,GPIO_PIN_14); -// HAL_GPIO_WritePin(GPIOB,GPIO_PIN_13,1); -// -// HAL_GPIO_WritePin(GPIOB,GPIO_PIN_13,0); -// *dat = *dat << 1; -// *dat |=sys_gpio_pin_get(GPIOB,GPIO_PIN_14); -// HAL_GPIO_WritePin(GPIOB,GPIO_PIN_13,1); -//} -// -///** -//* //* @brief ICM42688ÍÓÂÝÒÇдÊý¾Ý //* @param reg ¼Ä´æÆ÷ //* @param data ÐèҪд½ø¸Ã¼Ä´æÆ÷µÄÊý¾Ý @@ -563,10 +113,10 @@ uint8_t MpuGetData(void) //**/ //static void Write_Data_ICM42688(unsigned char reg, unsigned char dat) //{ -// sys_gpio_pin_set(GPIOB,GPIO_PIN_12,0); -// Write_8bit_ICM42688(reg); -// Write_8bit_ICM42688(dat); -// sys_gpio_pin_set(GPIOB,GPIO_PIN_12,1); +// HAL_GPIO_WritePin(GPIOB,GPIO_PIN_12,0); +// HAL_SPI_Transmit(&hspi2, ®, 1, 0xff); +// HAL_SPI_Transmit(&hspi2, &dat, 1, 0xff); +// HAL_GPIO_WritePin(GPIOB,GPIO_PIN_12,1); //} // ///** @@ -582,11 +132,17 @@ uint8_t MpuGetData(void) //**/ //static void Read_Datas_ICM42688(unsigned char reg, unsigned char *dat, unsigned int num) //{ -// sys_gpio_pin_set(GPIOB,GPIO_PIN_12,0); +// uint8_t Data; // reg |= 0x80; -// Write_8bit_ICM42688(reg); -// while(num--) Read_8bit_ICM42688(dat++); -// sys_gpio_pin_set(GPIOB,GPIO_PIN_12,1); +// HAL_GPIO_WritePin(GPIOB,GPIO_PIN_12,0); +// HAL_SPI_Transmit(&hspi2, ®, 1, 0xff ); +// while(num--) +// { +// HAL_SPI_Receive(&hspi2,&Data, 1, 0xff); +// *dat = Data; +// dat++; +// } +// HAL_GPIO_WritePin(GPIOB,GPIO_PIN_12,1); //} ///* ¶ÁÈ¡MPU6050Êý¾Ý²¢¼ÓÂ˲¨ */ ////·µ»ØÖµ:0,Õý³£ @@ -597,72 +153,487 @@ uint8_t MpuGetData(void) // //uint8_t MpuGetData(void) //{ -// uint8_t i; -// int res; -// unsigned char buffer[12]; -// Read_Datas_ICM42688(ICM42688_ACCEL_DATA_X1,buffer,12); +// uint8_t i; +// uint8_t buffer[12]; +// Read_Datas_ICM42688(ICM42688_ACCEL_DATA_X1,buffer,12); // -// for(i=0;i<6;i++) -// { -// pMpu[i] = (((int16_t)buffer[i<<1] << 8) | buffer[(i<<1)+1])-MpuOffset[i]; /* ½«Êý¾ÝÕûΪ16bit£¬²¢¼õȥˮƽУ׼ֵ */ -// if(i < 3) /* ½Ç¼ÓËÙ¶È¿¨¶ûÂüÂ˲¨ */ -// { -// { -// static struct KalmanFilter EKF[3] = {{0.02,0,0,0,0.001,0.543},{0.02,0,0,0,0.001,0.543},{0.02,0,0,0,0.001,0.543}}; -// kalmanfiter(&EKF[i],(float)pMpu[i]); -// pMpu[i] = (int16_t)EKF[i].Out; -// } -// } -// if(i > 2) /* ½ÇËÙ¶ÈÒ»½×»¥²¹Â˲¨ */ -// { -// uint8_t k=i-3; -// const float factor = 0.15f; -// static float tBuff[3]; -// -// pMpu[i] = tBuff[k] = tBuff[k] * (1 - factor) + pMpu[i] * factor; -// } -// } -// return 0; -//} -// -//void get_IMU(float *pitch,float *roll) -//{ -// *roll = atan2(ICM42688.accY, ICM42688.accZ) * 180.0 / _PI; -// *pitch = atan2(-ICM42688.accX, sqrt(ICM42688.accX * ICM42688.accY + ICM42688.accZ * ICM42688.accZ)) * 180.0 / _PI; -// -//// *roll = atan2(ICM42688.accY, ICM42688.accZ); -//// *pitch = atan2(-ICM42688.accX, sqrt(ICM42688.accX * ICM42688.accY + ICM42688.accZ * ICM42688.accZ)); -//} -// -///** -//ÉèÖÃÒý½Åµçƽ -// */ -//void sys_gpio_pin_set(GPIO_TypeDef *p_gpiox, uint16_t pinx, uint8_t status) -//{ -// if (status & 0X01) +// for(i=0;i<6;i++) // { -// p_gpiox->BSRR |= pinx; -// } -// else -// { -// p_gpiox->BSRR |= (uint32_t)pinx << 16; +// pMpu[i] = (((int16_t)buffer[i<<1] << 8) | buffer[(i<<1)+1])-MpuOffset[i]; /* ½«Êý¾ÝÕûΪ16bit£¬²¢¼õȥˮƽУ׼ֵ */ +// if(i < 3) /* ½Ç¼ÓËÙ¶È¿¨¶ûÂüÂ˲¨ */ +// { +// { +// static struct KalmanFilter EKF[3] = {{0.02,0,0,0,0.001,0.543},{0.02,0,0,0,0.001,0.543},{0.02,0,0,0,0.001,0.543}}; +// kalmanfiter(&EKF[i],(float)pMpu[i]); +// pMpu[i] = (int16_t)EKF[i].Out; +// } +// } +// if(i > 2) /* ½ÇËÙ¶ÈÒ»½×»¥²¹Â˲¨ */ +// { +// uint8_t k=i-3; +// const float factor = 0.15f; +// static float tBuff[3]; +// +// pMpu[i] = tBuff[k] = tBuff[k] * (1 - factor) + pMpu[i] * factor; +// } // } +// return 0; //} -// -///** -// * ¶ÁÈ¡Òý½Åµçƽ -// */ -//uint8_t sys_gpio_pin_get(GPIO_TypeDef *p_gpiox, uint16_t pinx) -//{ -// if (p_gpiox->IDR & pinx) -// { -// return 1; -// } -// else -// { -// return 0; -// } -//} -// -// -// + + + + + + + + + + + + + + + +///////////Ä£Äâspi°æ±¾ +#include "icm42688.h" + +#include "kalman.h" +#include "alldata.h" + +// ICM42688¼ÓËٶȼÆÊý¾Ý +float icm42688_acc_x, icm42688_acc_y, icm42688_acc_z ; +// ICM42688½Ç¼ÓËÙ¶ÈÊý¾Ý +float icm42688_gyro_x, icm42688_gyro_y, icm42688_gyro_z ; + +static float icm42688_acc_inv = 1, icm42688_gyro_inv = 1; + +void Spi_GPIO_Init() +{ + + GPIO_InitTypeDef GPIO_InitStruct = {0}; + __HAL_RCC_GPIOB_CLK_ENABLE(); + + /*Configure GPIO pins : PBPin PB12 */ + GPIO_InitStruct.Pin = GPIO_PIN_12 | GPIO_PIN_13 |GPIO_PIN_15; + GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); + + /*Configure GPIO pins : PBPin PB14 */ + GPIO_InitStruct.Pin = GPIO_PIN_14; + GPIO_InitStruct.Mode = GPIO_MODE_INPUT; + GPIO_InitStruct.Pull = GPIO_NOPULL; + HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); +} + +void Init_ICM42688(void) +{ + unsigned char time; + unsigned char model; + Spi_GPIO_Init(); + // ¶ÁÈ¡ÍÓÂÝÒÇÐͺÅÍÓÂÝÒÇ×Ô¼ì + model = 0xff; + while(1) + { + Read_Datas_ICM42688(ICM42688_WHO_AM_I, &model, 1); + if(model == 0x47) + { + // ICM42688 + break; + } + ICM42688_DELAY_MS(10); + } + Write_Data_ICM42688(ICM42688_PWR_MGMT0,0x00); // ¸´Î»É豸 + ICM42688_DELAY_MS(10); // ²Ù×÷ÍêPWR¡ªMGMT0¼Ä´æÆ÷ºó200usÄÚ²»ÄÜÓÐÈκζÁд¼Ä´æÆ÷µÄ²Ù×÷ + + // ÉèÖÃICM42688¼ÓËٶȼƺÍÍÓÂÝÒǵÄÁ¿³ÌºÍÊä³öËÙÂÊ + Set_LowpassFilter_Range_ICM42688(ICM42688_AFS_16G, ICM42688_AODR_32000HZ, ICM42688_GFS_2000DPS, ICM42688_GODR_32000HZ); + + Write_Data_ICM42688(ICM42688_PWR_MGMT0, 0x0f); // ÉèÖÃGYRO_MODE,ACCEL_MODEΪµÍÔëÉùģʽ + ICM42688_DELAY_MS(10); +} +/** +* +* @brief »ñµÃICM42688ÍÓÂÝÒǼÓËÙ¶È +* @param +* @return void +* @notes µ¥Î»:g(m/s^2),Óû§µ÷Óà +* Example: Get_Acc_ICM42688(); +* +**/ +void Get_Acc_ICM42688(void) +{ + unsigned char dat[6]; + Read_Datas_ICM42688(ICM42688_ACCEL_DATA_X1, dat, 6); + icm42688_acc_x = icm42688_acc_inv * (short int)(((short int)dat[0] << 8) | dat[1]); + icm42688_acc_y = icm42688_acc_inv * (short int)(((short int)dat[2] << 8) | dat[3]); + icm42688_acc_z = icm42688_acc_inv * (short int)(((short int)dat[4] << 8) | dat[5]); +} + +/** +* +* @brief »ñµÃICM42688ÍÓÂÝÒǽǼÓËÙ¶È +* @param +* @return void +* @notes µ¥Î»Îª:¡ã/s,Óû§µ÷Óà +* Example: Get_Gyro_ICM42688(); +* +**/ +void Get_Gyro_ICM42688(void) +{ + unsigned char dat[6]; + Read_Datas_ICM42688(ICM42688_GYRO_DATA_X1, dat, 6); + icm42688_gyro_x = icm42688_gyro_inv * (short int)(((short int)dat[0] << 8) | dat[1]); + icm42688_gyro_y = icm42688_gyro_inv * (short int)(((short int)dat[2] << 8) | dat[3]); + icm42688_gyro_z = icm42688_gyro_inv * (short int)(((short int)dat[4] << 8) | dat[5]); +} + +/** +* +* @brief ÉèÖÃICM42688ÍÓÂÝÒǵÍͨÂ˲¨Æ÷´ø¿íºÍÁ¿³Ì +* @param afs // ¼ÓËٶȼÆÁ¿³Ì,¿ÉÔÚdmx_icm42688.hÎļþÀïö¾Ù¶¨ÒåÖв鿴 +* @param aodr // ¼ÓËٶȼÆÊä³öËÙÂÊ,¿ÉÔÚdmx_icm42688.hÎļþÀïö¾Ù¶¨ÒåÖв鿴 +* @param gfs // ÍÓÂÝÒÇÁ¿³Ì,¿ÉÔÚdmx_icm42688.hÎļþÀïö¾Ù¶¨ÒåÖв鿴 +* @param godr // ÍÓÂÝÒÇÊä³öËÙÂÊ,¿ÉÔÚdmx_icm42688.hÎļþÀïö¾Ù¶¨ÒåÖв鿴 +* @return void +* @notes ICM42688.cÎļþÄÚ²¿µ÷ÓÃ,Óû§ÎÞÐèµ÷Óó¢ÊÔ +* Example: Set_LowpassFilter_Range_ICM42688(ICM42688_AFS_16G,ICM42688_AODR_32000HZ,ICM42688_GFS_2000DPS,ICM42688_GODR_32000HZ); +* +**/ +void Set_LowpassFilter_Range_ICM42688(enum icm42688_afs afs, enum icm42688_aodr aodr, enum icm42688_gfs gfs, enum icm42688_godr godr) +{ + Write_Data_ICM42688(ICM42688_ACCEL_CONFIG0, (afs << 5) | (aodr + 1)); // ³õʼ»¯ACCELÁ¿³ÌºÍÊä³öËÙÂÊ(p77) + Write_Data_ICM42688(ICM42688_GYRO_CONFIG0, (gfs << 5) | (godr + 1)); // ³õʼ»¯GYROÁ¿³ÌºÍÊä³öËÙÂÊ(p76) + + switch(afs) + { + case ICM42688_AFS_2G: + icm42688_acc_inv = 2000 / 32768.0f; // ¼ÓËٶȼÆÁ¿³ÌΪ:¡À2g + break; + case ICM42688_AFS_4G: + icm42688_acc_inv = 4000 / 32768.0f; // ¼ÓËٶȼÆÁ¿³ÌΪ:¡À4g + break; + case ICM42688_AFS_8G: + icm42688_acc_inv = 8000 / 32768.0f; // ¼ÓËٶȼÆÁ¿³ÌΪ:¡À8g + break; + case ICM42688_AFS_16G: + icm42688_acc_inv = 16000 / 32768.0f; // ¼ÓËٶȼÆÁ¿³ÌΪ:¡À16g + break; + default: + icm42688_acc_inv = 1; // ²»×ª»¯ÎªÊµ¼ÊÊý¾Ý + break; + } + switch(gfs) + { + case ICM42688_GFS_15_625DPS: + icm42688_gyro_inv = 15.625f / 32768.0f; // ÍÓÂÝÒÇÁ¿³ÌΪ:¡À15.625dps + break; + case ICM42688_GFS_31_25DPS: + icm42688_gyro_inv = 31.25f / 32768.0f; // ÍÓÂÝÒÇÁ¿³ÌΪ:¡À31.25dps + break; + case ICM42688_GFS_62_5DPS: + icm42688_gyro_inv = 62.5f / 32768.0f; // ÍÓÂÝÒÇÁ¿³ÌΪ:¡À62.5dps + break; + case ICM42688_GFS_125DPS: + icm42688_gyro_inv = 125.0f / 32768.0f; // ÍÓÂÝÒÇÁ¿³ÌΪ:¡À125dps + break; + case ICM42688_GFS_250DPS: + icm42688_gyro_inv = 250.0f / 32768.0f; // ÍÓÂÝÒÇÁ¿³ÌΪ:¡À250dps + break; + case ICM42688_GFS_500DPS: + icm42688_gyro_inv = 500.0f / 32768.0f; // ÍÓÂÝÒÇÁ¿³ÌΪ:¡À500dps + break; + case ICM42688_GFS_1000DPS: + icm42688_gyro_inv = 1000.0f / 32768.0f; // ÍÓÂÝÒÇÁ¿³ÌΪ:¡À1000dps + break; + case ICM42688_GFS_2000DPS: + icm42688_gyro_inv = 2000.0f / 32768.0f; // ÍÓÂÝÒÇÁ¿³ÌΪ:¡À2000dps + break; + default: + icm42688_gyro_inv = 1; // ²»×ª»¯ÎªÊµ¼ÊÊý¾Ý + break; + } +} + +/** +* +* @brief ICM42688ÍÓÂÝÒÇд8bitÊý¾Ý +* @param data Êý¾Ý +* @return void +* @notes ICM42688.cÎļþÄÚ²¿µ÷ÓÃ,Óû§ÎÞÐèµ÷Óó¢ÊÔ +* Example: Write_8bit_ICM42688(0x00); +* +**/ +static void Write_8bit_ICM42688(unsigned char dat) +{ + HAL_GPIO_WritePin(GPIOB,GPIO_PIN_13,0); + if(0x80 & dat) + { + sys_gpio_pin_set(GPIOB,GPIO_PIN_15,1); + } + else + { + sys_gpio_pin_set(GPIOB,GPIO_PIN_15,0); + } + HAL_GPIO_WritePin(GPIOB,GPIO_PIN_13,1); + dat <<= 1; + + + HAL_GPIO_WritePin(GPIOB,GPIO_PIN_13,0); + if(0x80 & dat) + { + sys_gpio_pin_set(GPIOB,GPIO_PIN_15,1); + } + else + { + sys_gpio_pin_set(GPIOB,GPIO_PIN_15,0); + } + HAL_GPIO_WritePin(GPIOB,GPIO_PIN_13,1); + dat <<= 1; + + + HAL_GPIO_WritePin(GPIOB,GPIO_PIN_13,0); + if(0x80 & dat) + { + sys_gpio_pin_set(GPIOB,GPIO_PIN_15,1); + } + else + { + sys_gpio_pin_set(GPIOB,GPIO_PIN_15,0); + } + HAL_GPIO_WritePin(GPIOB,GPIO_PIN_13,1); + dat <<= 1; + + + HAL_GPIO_WritePin(GPIOB,GPIO_PIN_13,0); + if(0x80 & dat) + { + sys_gpio_pin_set(GPIOB,GPIO_PIN_15,1); + } + else + { + sys_gpio_pin_set(GPIOB,GPIO_PIN_15,0); + } + HAL_GPIO_WritePin(GPIOB,GPIO_PIN_13,1); + dat <<= 1; + + + HAL_GPIO_WritePin(GPIOB,GPIO_PIN_13,0); + if(0x80 & dat) + { + sys_gpio_pin_set(GPIOB,GPIO_PIN_15,1); + } + else + { + sys_gpio_pin_set(GPIOB,GPIO_PIN_15,0); + } + HAL_GPIO_WritePin(GPIOB,GPIO_PIN_13,1); + dat <<= 1; + + + HAL_GPIO_WritePin(GPIOB,GPIO_PIN_13,0); + if(0x80 & dat) + { + sys_gpio_pin_set(GPIOB,GPIO_PIN_15,1); + } + else + { + sys_gpio_pin_set(GPIOB,GPIO_PIN_15,0); + } + HAL_GPIO_WritePin(GPIOB,GPIO_PIN_13,1); + dat <<= 1; + + HAL_GPIO_WritePin(GPIOB,GPIO_PIN_13,0); + if(0x80 & dat) + { + sys_gpio_pin_set(GPIOB,GPIO_PIN_15,1); + } + else + { + sys_gpio_pin_set(GPIOB,GPIO_PIN_15,0); + } + HAL_GPIO_WritePin(GPIOB,GPIO_PIN_13,1); + dat <<= 1; + + HAL_GPIO_WritePin(GPIOB,GPIO_PIN_13,0); + if(0x80 & dat) + { + sys_gpio_pin_set(GPIOB,GPIO_PIN_15,1); + } + else + { + sys_gpio_pin_set(GPIOB,GPIO_PIN_15,0); + } + HAL_GPIO_WritePin(GPIOB,GPIO_PIN_13,1); + dat <<= 1; +} + +/** +* +* @brief ICM42688ÍÓÂÝÒǶÁ8bitÊý¾Ý +* @param data Êý¾Ý +* @return void +* @notes ICM42688.cÎļþÄÚ²¿µ÷ÓÃ,Óû§ÎÞÐèµ÷Óó¢ÊÔ +* Example: Read_8bit_ICM42688(dat); +* +**/ +static void Read_8bit_ICM42688(unsigned char *dat) +{ + HAL_GPIO_WritePin(GPIOB,GPIO_PIN_13,0); + *dat = *dat << 1; + *dat |=sys_gpio_pin_get(GPIOB,GPIO_PIN_14); + HAL_GPIO_WritePin(GPIOB,GPIO_PIN_13,1); + + + HAL_GPIO_WritePin(GPIOB,GPIO_PIN_13,0); + *dat = *dat << 1; + *dat |=sys_gpio_pin_get(GPIOB,GPIO_PIN_14); + HAL_GPIO_WritePin(GPIOB,GPIO_PIN_13,1); + + HAL_GPIO_WritePin(GPIOB,GPIO_PIN_13,0); + *dat = *dat << 1; + *dat |=sys_gpio_pin_get(GPIOB,GPIO_PIN_14); + HAL_GPIO_WritePin(GPIOB,GPIO_PIN_13,1); + + HAL_GPIO_WritePin(GPIOB,GPIO_PIN_13,0); + *dat = *dat << 1; + *dat |=sys_gpio_pin_get(GPIOB,GPIO_PIN_14); + HAL_GPIO_WritePin(GPIOB,GPIO_PIN_13,1); + + HAL_GPIO_WritePin(GPIOB,GPIO_PIN_13,0); + *dat = *dat << 1; + *dat |=sys_gpio_pin_get(GPIOB,GPIO_PIN_14); + HAL_GPIO_WritePin(GPIOB,GPIO_PIN_13,1); + + HAL_GPIO_WritePin(GPIOB,GPIO_PIN_13,0); + *dat = *dat << 1; + *dat |=sys_gpio_pin_get(GPIOB,GPIO_PIN_14); + HAL_GPIO_WritePin(GPIOB,GPIO_PIN_13,1); + + HAL_GPIO_WritePin(GPIOB,GPIO_PIN_13,0); + *dat = *dat << 1; + *dat |=sys_gpio_pin_get(GPIOB,GPIO_PIN_14); + HAL_GPIO_WritePin(GPIOB,GPIO_PIN_13,1); + + HAL_GPIO_WritePin(GPIOB,GPIO_PIN_13,0); + *dat = *dat << 1; + *dat |=sys_gpio_pin_get(GPIOB,GPIO_PIN_14); + HAL_GPIO_WritePin(GPIOB,GPIO_PIN_13,1); +} + +/** +* +* @brief ICM42688ÍÓÂÝÒÇдÊý¾Ý +* @param reg ¼Ä´æÆ÷ +* @param data ÐèҪд½ø¸Ã¼Ä´æÆ÷µÄÊý¾Ý +* @return void +* @notes ICM42688.cÎļþÄÚ²¿µ÷ÓÃ,Óû§ÎÞÐèµ÷Óó¢ÊÔ +* Example: Write_Data_ICM42688(0x00,0x00); +* +**/ +static void Write_Data_ICM42688(unsigned char reg, unsigned char dat) +{ + sys_gpio_pin_set(GPIOB,GPIO_PIN_12,0); + Write_8bit_ICM42688(reg); + Write_8bit_ICM42688(dat); + sys_gpio_pin_set(GPIOB,GPIO_PIN_12,1); +} + +/** +* +* @brief ICM42688ÍÓÂÝÒǶÁÊý¾Ý +* @param reg ¼Ä´æÆ÷ +* @param data °Ñ¶Á³öµÄÊý¾Ý´æÈëdata +* @param num Êý¾Ý¸öÊý +* @return void +* @notes ICM42688.cÎļþÄÚ²¿µ÷ÓÃ,Óû§ÎÞÐèµ÷Óó¢ÊÔ +* Example: Read_Datas_ICM42688(0x00,0x00,1); +* +**/ +static void Read_Datas_ICM42688(unsigned char reg, unsigned char *dat, unsigned int num) +{ + sys_gpio_pin_set(GPIOB,GPIO_PIN_12,0); + reg |= 0x80; + Write_8bit_ICM42688(reg); + while(num--) Read_8bit_ICM42688(dat++); + sys_gpio_pin_set(GPIOB,GPIO_PIN_12,1); +} +/* ¶ÁÈ¡MPU6050Êý¾Ý²¢¼ÓÂ˲¨ */ +//·µ»ØÖµ:0,Õý³£ +//ÆäËû,´íÎó´úÂë +_st_Mpu ICM42688; +static volatile int16_t *pMpu = (int16_t *)&ICM42688; +int16_t MpuOffset[6] = {0}; //MPU6050²¹³¥ÊýÖµ + +uint8_t MpuGetData(void) +{ + uint8_t i; + int res; + unsigned char buffer[12]; + Read_Datas_ICM42688(ICM42688_ACCEL_DATA_X1,buffer,12); + + for(i=0;i<6;i++) + { + pMpu[i] = (((int16_t)buffer[i<<1] << 8) | buffer[(i<<1)+1])-MpuOffset[i]; /* ½«Êý¾ÝÕûΪ16bit£¬²¢¼õȥˮƽУ׼ֵ */ + if(i < 3) /* ½Ç¼ÓËÙ¶È¿¨¶ûÂüÂ˲¨ */ + { + { + static struct KalmanFilter EKF[3] = {{0.02,0,0,0,0.001,0.543},{0.02,0,0,0,0.001,0.543},{0.02,0,0,0,0.001,0.543}}; + kalmanfiter(&EKF[i],(float)pMpu[i]); + pMpu[i] = (int16_t)EKF[i].Out; + } + } + if(i > 2) /* ½ÇËÙ¶ÈÒ»½×»¥²¹Â˲¨ */ + { + uint8_t k=i-3; + const float factor = 0.15f; + static float tBuff[3]; + + pMpu[i] = tBuff[k] = tBuff[k] * (1 - factor) + pMpu[i] * factor; + } + } + return 0; +} + +void get_IMU(float *pitch,float *roll) +{ + *roll = atan2(ICM42688.accY, ICM42688.accZ) * 180.0 / _PI; + *pitch = atan2(-ICM42688.accX, sqrt(ICM42688.accX * ICM42688.accY + ICM42688.accZ * ICM42688.accZ)) * 180.0 / _PI; + +// *roll = atan2(ICM42688.accY, ICM42688.accZ); +// *pitch = atan2(-ICM42688.accX, sqrt(ICM42688.accX * ICM42688.accY + ICM42688.accZ * ICM42688.accZ)); +} + +/** +ÉèÖÃÒý½Åµçƽ + */ +void sys_gpio_pin_set(GPIO_TypeDef *p_gpiox, uint16_t pinx, uint8_t status) +{ + if (status & 0X01) + { + p_gpiox->BSRR |= pinx; + } + else + { + p_gpiox->BSRR |= (uint32_t)pinx << 16; + } +} + +/** + * ¶ÁÈ¡Òý½Åµçƽ + */ +uint8_t sys_gpio_pin_get(GPIO_TypeDef *p_gpiox, uint16_t pinx) +{ + if (p_gpiox->IDR & pinx) + { + return 1; + } + else + { + return 0; + } +} + + + diff --git a/IMU/icm42688.h b/IMU/icm42688.h index c1c6b82..9a0d450 100644 --- a/IMU/icm42688.h +++ b/IMU/icm42688.h @@ -1,212 +1,10 @@ -#ifndef _DMX_ICM42688_H_ -#define _DMX_ICM42688_H_ -#include "stm32h7xx_hal.h" -#include "mymain.h" -#define ICM42688_DELAY_MS(time) (HAL_Delay(time)) - - -enum icm42688_afs -{ - ICM42688_AFS_16G,// default - ICM42688_AFS_8G, - ICM42688_AFS_4G, - ICM42688_AFS_2G, - NUM_ICM42688__AFS -}; - -enum icm42688_aodr -{ - ICM42688_AODR_32000HZ, - ICM42688_AODR_16000HZ, - ICM42688_AODR_8000HZ, - ICM42688_AODR_4000HZ, - ICM42688_AODR_2000HZ, - ICM42688_AODR_1000HZ,// default - ICM42688_AODR_200HZ, - ICM42688_AODR_100HZ, - ICM42688_AODR_50HZ, - ICM42688_AODR_25HZ, - ICM42688_AODR_12_5HZ, - ICM42688_AODR_6_25HZ, - ICM42688_AODR_3_125HZ, - ICM42688_AODR_1_5625HZ, - ICM42688_AODR_500HZ, - NUM_ICM42688_AODR -}; - -enum icm42688_gfs -{ - ICM42688_GFS_2000DPS,// default - ICM42688_GFS_1000DPS, - ICM42688_GFS_500DPS, - ICM42688_GFS_250DPS, - ICM42688_GFS_125DPS, - ICM42688_GFS_62_5DPS, - ICM42688_GFS_31_25DPS, - ICM42688_GFS_15_625DPS, - NUM_ICM42688_GFS -}; -enum icm42688_godr -{ - ICM42688_GODR_32000HZ, - ICM42688_GODR_16000HZ, - ICM42688_GODR_8000HZ, - ICM42688_GODR_4000HZ, - ICM42688_GODR_2000HZ, - ICM42688_GODR_1000HZ,// default - ICM42688_GODR_200HZ, - ICM42688_GODR_100HZ, - ICM42688_GODR_50HZ, - ICM42688_GODR_25HZ, - ICM42688_GODR_12_5HZ, - ICM42688_GODR_X0HZ, - ICM42688_GODR_X1HZ, - ICM42688_GODR_X2HZ, - ICM42688_GODR_500HZ, - NUM_ICM42688_GODR -}; - - -// ICM42688Bank0�ڲ���ַ -#define ICM42688_DEVICE_CONFIG 0x11 -#define ICM42688_DRIVE_CONFIG 0x13 -#define ICM42688_INT_CONFIG 0x14 -#define ICM42688_FIFO_CONFIG 0x16 -#define ICM42688_TEMP_DATA1 0x1D -#define ICM42688_TEMP_DATA0 0x1E -#define ICM42688_ACCEL_DATA_X1 0x1F -#define ICM42688_ACCEL_DATA_X0 0x20 -#define ICM42688_ACCEL_DATA_Y1 0x21 -#define ICM42688_ACCEL_DATA_Y0 0x22 -#define ICM42688_ACCEL_DATA_Z1 0x23 -#define ICM42688_ACCEL_DATA_Z0 0x24 -#define ICM42688_GYRO_DATA_X1 0x25 -#define ICM42688_GYRO_DATA_X0 0x26 -#define ICM42688_GYRO_DATA_Y1 0x27 -#define ICM42688_GYRO_DATA_Y0 0x28 -#define ICM42688_GYRO_DATA_Z1 0x29 -#define ICM42688_GYRO_DATA_Z0 0x2A -#define ICM42688_TMST_FSYNCH 0x2B -#define ICM42688_TMST_FSYNCL 0x2C -#define ICM42688_INT_STATUS 0x2D -#define ICM42688_FIFO_COUNTH 0x2E -#define ICM42688_FIFO_COUNTL 0x2F -#define ICM42688_FIFO_DATA 0x30 -#define ICM42688_APEX_DATA0 0x31 -#define ICM42688_APEX_DATA1 0x32 -#define ICM42688_APEX_DATA2 0x33 -#define ICM42688_APEX_DATA3 0x34 -#define ICM42688_APEX_DATA4 0x35 -#define ICM42688_APEX_DATA5 0x36 -#define ICM42688_INT_STATUS2 0x37 -#define ICM42688_INT_STATUS3 0x38 -#define ICM42688_SIGNAL_PATH_RESET 0x4B -#define ICM42688_INTF_CONFIG0 0x4C -#define ICM42688_INTF_CONFIG1 0x4D -#define ICM42688_PWR_MGMT0 0x4E -#define ICM42688_GYRO_CONFIG0 0x4F -#define ICM42688_ACCEL_CONFIG0 0x50 -#define ICM42688_GYRO_CONFIG1 0x51 -#define ICM42688_GYRO_ACCEL_CONFIG0 0x52 -#define ICM42688_ACCEL_CONFIG1 0x53 -#define ICM42688_TMST_CONFIG 0x54 -#define ICM42688_APEX_CONFIG0 0x56 -#define ICM42688_SMD_CONFIG 0x57 -#define ICM42688_FIFO_CONFIG1 0x5F -#define ICM42688_FIFO_CONFIG2 0x60 -#define ICM42688_FIFO_CONFIG3 0x61 -#define ICM42688_FSYNC_CONFIG 0x62 -#define ICM42688_INT_CONFIG0 0x63 -#define ICM42688_INT_CONFIG1 0x64 -#define ICM42688_INT_SOURCE0 0x65 -#define ICM42688_INT_SOURCE1 0x66 -#define ICM42688_INT_SOURCE3 0x68 -#define ICM42688_INT_SOURCE4 0x69 -#define ICM42688_FIFO_LOST_PKT0 0x6C -#define ICM42688_FIFO_LOST_PKT1 0x6D -#define ICM42688_SELF_TEST_CONFIG 0x70 -#define ICM42688_WHO_AM_I 0x75 -#define ICM42688_REG_BANK_SEL 0x76 // Banks -#define ICM42688_SENSOR_CONFIG0 0x03 -#define ICM42688_GYRO_CONFIG_STATIC2 0x0B -#define ICM42688_GYRO_CONFIG_STATIC3 0x0C -#define ICM42688_GYRO_CONFIG_STATIC4 0x0D -#define ICM42688_GYRO_CONFIG_STATIC5 0x0E -#define ICM42688_GYRO_CONFIG_STATIC6 0x0F -#define ICM42688_GYRO_CONFIG_STATIC7 0x10 -#define ICM42688_GYRO_CONFIG_STATIC8 0x11 -#define ICM42688_GYRO_CONFIG_STATIC9 0x12 -#define ICM42688_GYRO_CONFIG_STATIC10 0x13 -#define ICM42688_XG_ST_DATA 0x5F -#define ICM42688_YG_ST_DATA 0x60 -#define ICM42688_ZG_ST_DATA 0x61 -#define ICM42688_TMSTVAL0 0x62 -#define ICM42688_TMSTVAL1 0x63 -#define ICM42688_TMSTVAL2 0x64 -#define ICM42688_INTF_CONFIG4 0x7A -#define ICM42688_INTF_CONFIG5 0x7B -#define ICM42688_INTF_CONFIG6 0x7C - - -static void Read_Datas_ICM42688(unsigned char reg, unsigned char *dat, unsigned int num); -static void Write_Data_ICM42688(unsigned char reg, unsigned char dat); -void Init_ICM42688(void); -//void sys_gpio_pin_set(GPIO_TypeDef *p_gpiox, uint16_t pinx, uint8_t status); -void Set_LowpassFilter_Range_ICM42688(enum icm42688_afs afs, enum icm42688_aodr aodr, enum icm42688_gfs gfs, enum icm42688_godr godr); -uint8_t MpuGetData(void); - - -#endif - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - //#ifndef _DMX_ICM42688_H_ //#define _DMX_ICM42688_H_ //#include "stm32h7xx_hal.h" //#include "mymain.h" //#define ICM42688_DELAY_MS(time) (HAL_Delay(time)) // -//extern float icm42688_acc_x, icm42688_acc_y, icm42688_acc_z ; // ����ICM42688���ٶȼ����� -//extern float icm42688_gyro_x, icm42688_gyro_y, icm42688_gyro_z ; // ����ICM42688�Ǽ��ٶ����� -//static void Read_Datas_ICM42688(unsigned char reg, unsigned char *dat, unsigned int num); -//static void Write_Data_ICM42688(unsigned char reg, unsigned char dat); +// //enum icm42688_afs //{ // ICM42688_AFS_16G,// default @@ -268,58 +66,7 @@ uint8_t MpuGetData(void); // NUM_ICM42688_GODR //}; // -//void gpio_init(void); // -///** -//* -//* @brief ICM42688�����dz�ʼ�� -//* @param -//* @return void -//* @notes �û����� -//* Example: Init_ICM42688(); -//* -//**/ -//void Init_ICM42688(void); -////void get_IMU(float accx,float accy,float accz,float *pitch,float *roll); -//void get_IMU(float *pitch,float *roll); -//uint8_t sys_gpio_pin_get(GPIO_TypeDef *p_gpiox, uint16_t pinx); -//void sys_gpio_pin_set(GPIO_TypeDef *p_gpiox, uint16_t pinx, uint8_t status); -///** -//* -//* @brief ���ICM42688�����Ǽ��ٶ� -//* @param -//* @return void -//* @notes ��λ:g(m/s^2),�û����� -//* Example: Get_Acc_ICM42688(); -//* -//**/ -//void Get_Acc_ICM42688(void); -// -///** -//* -//* @brief ���ICM42688�����ǽǼ��ٶ� -//* @param -//* @return void -//* @notes ��λΪ:��/s,�û����� -//* Example: Get_Gyro_ICM42688(); -//* -//**/ -//void Get_Gyro_ICM42688(void); -// -///** -//* -//* @brief ����ICM42688�����ǵ�ͨ�˲������������ -//* @param afs // ���ٶȼ�����,����dmx_icm42688.h�ļ���ö�ٶ����в鿴 -//* @param aodr // ���ٶȼ��������,����dmx_icm42688.h�ļ���ö�ٶ����в鿴 -//* @param gfs // ����������,����dmx_icm42688.h�ļ���ö�ٶ����в鿴 -//* @param godr // �������������,����dmx_icm42688.h�ļ���ö�ٶ����в鿴 -//* @return void -//* @notes ICM42688.c�ļ��ڲ�����,�û�������ó��� -//* Example: Set_LowpassFilter_Range_ICM42688(ICM42688_AFS_16G,ICM42688_AODR_32000HZ,ICM42688_GFS_2000DPS,ICM42688_GODR_32000HZ); -//* -//**/ -//void Set_LowpassFilter_Range_ICM42688(enum icm42688_afs afs, enum icm42688_aodr aodr, enum icm42688_gfs gfs, enum icm42688_godr godr); -//uint8_t MpuGetData(void); //// ICM42688Bank0�ڲ���ַ //#define ICM42688_DEVICE_CONFIG 0x11 //#define ICM42688_DRIVE_CONFIG 0x13 @@ -400,4 +147,258 @@ uint8_t MpuGetData(void); //#define ICM42688_INTF_CONFIG5 0x7B //#define ICM42688_INTF_CONFIG6 0x7C // -//#endif \ No newline at end of file +// +//static void Read_Datas_ICM42688(unsigned char reg, unsigned char *dat, unsigned int num); +//static void Write_Data_ICM42688(unsigned char reg, unsigned char dat); +//void Init_ICM42688(void); +////void sys_gpio_pin_set(GPIO_TypeDef *p_gpiox, uint16_t pinx, uint8_t status); +//void Set_LowpassFilter_Range_ICM42688(enum icm42688_afs afs, enum icm42688_aodr aodr, enum icm42688_gfs gfs, enum icm42688_godr godr); +//uint8_t MpuGetData(void); +// +// +//#endif +// + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#ifndef _DMX_ICM42688_H_ +#define _DMX_ICM42688_H_ +#include "stm32h7xx_hal.h" +#include "mymain.h" +#define ICM42688_DELAY_MS(time) (HAL_Delay(time)) + +extern float icm42688_acc_x, icm42688_acc_y, icm42688_acc_z ; // ����ICM42688���ٶȼ����� +extern float icm42688_gyro_x, icm42688_gyro_y, icm42688_gyro_z ; // ����ICM42688�Ǽ��ٶ����� +static void Read_Datas_ICM42688(unsigned char reg, unsigned char *dat, unsigned int num); +static void Write_Data_ICM42688(unsigned char reg, unsigned char dat); +enum icm42688_afs +{ + ICM42688_AFS_16G,// default + ICM42688_AFS_8G, + ICM42688_AFS_4G, + ICM42688_AFS_2G, + NUM_ICM42688__AFS +}; + +enum icm42688_aodr +{ + ICM42688_AODR_32000HZ, + ICM42688_AODR_16000HZ, + ICM42688_AODR_8000HZ, + ICM42688_AODR_4000HZ, + ICM42688_AODR_2000HZ, + ICM42688_AODR_1000HZ,// default + ICM42688_AODR_200HZ, + ICM42688_AODR_100HZ, + ICM42688_AODR_50HZ, + ICM42688_AODR_25HZ, + ICM42688_AODR_12_5HZ, + ICM42688_AODR_6_25HZ, + ICM42688_AODR_3_125HZ, + ICM42688_AODR_1_5625HZ, + ICM42688_AODR_500HZ, + NUM_ICM42688_AODR +}; + +enum icm42688_gfs +{ + ICM42688_GFS_2000DPS,// default + ICM42688_GFS_1000DPS, + ICM42688_GFS_500DPS, + ICM42688_GFS_250DPS, + ICM42688_GFS_125DPS, + ICM42688_GFS_62_5DPS, + ICM42688_GFS_31_25DPS, + ICM42688_GFS_15_625DPS, + NUM_ICM42688_GFS +}; +enum icm42688_godr +{ + ICM42688_GODR_32000HZ, + ICM42688_GODR_16000HZ, + ICM42688_GODR_8000HZ, + ICM42688_GODR_4000HZ, + ICM42688_GODR_2000HZ, + ICM42688_GODR_1000HZ,// default + ICM42688_GODR_200HZ, + ICM42688_GODR_100HZ, + ICM42688_GODR_50HZ, + ICM42688_GODR_25HZ, + ICM42688_GODR_12_5HZ, + ICM42688_GODR_X0HZ, + ICM42688_GODR_X1HZ, + ICM42688_GODR_X2HZ, + ICM42688_GODR_500HZ, + NUM_ICM42688_GODR +}; + +void gpio_init(void); + +/** +* +* @brief ICM42688�����dz�ʼ�� +* @param +* @return void +* @notes �û����� +* Example: Init_ICM42688(); +* +**/ +void Init_ICM42688(void); +//void get_IMU(float accx,float accy,float accz,float *pitch,float *roll); +void get_IMU(float *pitch,float *roll); +uint8_t sys_gpio_pin_get(GPIO_TypeDef *p_gpiox, uint16_t pinx); +void sys_gpio_pin_set(GPIO_TypeDef *p_gpiox, uint16_t pinx, uint8_t status); +/** +* +* @brief ���ICM42688�����Ǽ��ٶ� +* @param +* @return void +* @notes ��λ:g(m/s^2),�û����� +* Example: Get_Acc_ICM42688(); +* +**/ +void Get_Acc_ICM42688(void); + +/** +* +* @brief ���ICM42688�����ǽǼ��ٶ� +* @param +* @return void +* @notes ��λΪ:��/s,�û����� +* Example: Get_Gyro_ICM42688(); +* +**/ +void Get_Gyro_ICM42688(void); + +/** +* +* @brief ����ICM42688�����ǵ�ͨ�˲������������ +* @param afs // ���ٶȼ�����,����dmx_icm42688.h�ļ���ö�ٶ����в鿴 +* @param aodr // ���ٶȼ��������,����dmx_icm42688.h�ļ���ö�ٶ����в鿴 +* @param gfs // ����������,����dmx_icm42688.h�ļ���ö�ٶ����в鿴 +* @param godr // �������������,����dmx_icm42688.h�ļ���ö�ٶ����в鿴 +* @return void +* @notes ICM42688.c�ļ��ڲ�����,�û�������ó��� +* Example: Set_LowpassFilter_Range_ICM42688(ICM42688_AFS_16G,ICM42688_AODR_32000HZ,ICM42688_GFS_2000DPS,ICM42688_GODR_32000HZ); +* +**/ +void Set_LowpassFilter_Range_ICM42688(enum icm42688_afs afs, enum icm42688_aodr aodr, enum icm42688_gfs gfs, enum icm42688_godr godr); +uint8_t MpuGetData(void); +// ICM42688Bank0�ڲ���ַ +#define ICM42688_DEVICE_CONFIG 0x11 +#define ICM42688_DRIVE_CONFIG 0x13 +#define ICM42688_INT_CONFIG 0x14 +#define ICM42688_FIFO_CONFIG 0x16 +#define ICM42688_TEMP_DATA1 0x1D +#define ICM42688_TEMP_DATA0 0x1E +#define ICM42688_ACCEL_DATA_X1 0x1F +#define ICM42688_ACCEL_DATA_X0 0x20 +#define ICM42688_ACCEL_DATA_Y1 0x21 +#define ICM42688_ACCEL_DATA_Y0 0x22 +#define ICM42688_ACCEL_DATA_Z1 0x23 +#define ICM42688_ACCEL_DATA_Z0 0x24 +#define ICM42688_GYRO_DATA_X1 0x25 +#define ICM42688_GYRO_DATA_X0 0x26 +#define ICM42688_GYRO_DATA_Y1 0x27 +#define ICM42688_GYRO_DATA_Y0 0x28 +#define ICM42688_GYRO_DATA_Z1 0x29 +#define ICM42688_GYRO_DATA_Z0 0x2A +#define ICM42688_TMST_FSYNCH 0x2B +#define ICM42688_TMST_FSYNCL 0x2C +#define ICM42688_INT_STATUS 0x2D +#define ICM42688_FIFO_COUNTH 0x2E +#define ICM42688_FIFO_COUNTL 0x2F +#define ICM42688_FIFO_DATA 0x30 +#define ICM42688_APEX_DATA0 0x31 +#define ICM42688_APEX_DATA1 0x32 +#define ICM42688_APEX_DATA2 0x33 +#define ICM42688_APEX_DATA3 0x34 +#define ICM42688_APEX_DATA4 0x35 +#define ICM42688_APEX_DATA5 0x36 +#define ICM42688_INT_STATUS2 0x37 +#define ICM42688_INT_STATUS3 0x38 +#define ICM42688_SIGNAL_PATH_RESET 0x4B +#define ICM42688_INTF_CONFIG0 0x4C +#define ICM42688_INTF_CONFIG1 0x4D +#define ICM42688_PWR_MGMT0 0x4E +#define ICM42688_GYRO_CONFIG0 0x4F +#define ICM42688_ACCEL_CONFIG0 0x50 +#define ICM42688_GYRO_CONFIG1 0x51 +#define ICM42688_GYRO_ACCEL_CONFIG0 0x52 +#define ICM42688_ACCEL_CONFIG1 0x53 +#define ICM42688_TMST_CONFIG 0x54 +#define ICM42688_APEX_CONFIG0 0x56 +#define ICM42688_SMD_CONFIG 0x57 +#define ICM42688_FIFO_CONFIG1 0x5F +#define ICM42688_FIFO_CONFIG2 0x60 +#define ICM42688_FIFO_CONFIG3 0x61 +#define ICM42688_FSYNC_CONFIG 0x62 +#define ICM42688_INT_CONFIG0 0x63 +#define ICM42688_INT_CONFIG1 0x64 +#define ICM42688_INT_SOURCE0 0x65 +#define ICM42688_INT_SOURCE1 0x66 +#define ICM42688_INT_SOURCE3 0x68 +#define ICM42688_INT_SOURCE4 0x69 +#define ICM42688_FIFO_LOST_PKT0 0x6C +#define ICM42688_FIFO_LOST_PKT1 0x6D +#define ICM42688_SELF_TEST_CONFIG 0x70 +#define ICM42688_WHO_AM_I 0x75 +#define ICM42688_REG_BANK_SEL 0x76 // Banks +#define ICM42688_SENSOR_CONFIG0 0x03 +#define ICM42688_GYRO_CONFIG_STATIC2 0x0B +#define ICM42688_GYRO_CONFIG_STATIC3 0x0C +#define ICM42688_GYRO_CONFIG_STATIC4 0x0D +#define ICM42688_GYRO_CONFIG_STATIC5 0x0E +#define ICM42688_GYRO_CONFIG_STATIC6 0x0F +#define ICM42688_GYRO_CONFIG_STATIC7 0x10 +#define ICM42688_GYRO_CONFIG_STATIC8 0x11 +#define ICM42688_GYRO_CONFIG_STATIC9 0x12 +#define ICM42688_GYRO_CONFIG_STATIC10 0x13 +#define ICM42688_XG_ST_DATA 0x5F +#define ICM42688_YG_ST_DATA 0x60 +#define ICM42688_ZG_ST_DATA 0x61 +#define ICM42688_TMSTVAL0 0x62 +#define ICM42688_TMSTVAL1 0x63 +#define ICM42688_TMSTVAL2 0x64 +#define ICM42688_INTF_CONFIG4 0x7A +#define ICM42688_INTF_CONFIG5 0x7B +#define ICM42688_INTF_CONFIG6 0x7C + +#endif + diff --git a/foc_n.ioc b/foc_n.ioc index a659f65..1d804d3 100644 --- a/foc_n.ioc +++ b/foc_n.ioc @@ -1,48 +1,58 @@ #MicroXplorer Configuration settings - do not modify +ADC1.Channel-0\#ChannelRegularConversion=ADC_CHANNEL_8 +ADC1.IPParameters=Rank-0\#ChannelRegularConversion,Channel-0\#ChannelRegularConversion,SamplingTime-0\#ChannelRegularConversion,OffsetNumber-0\#ChannelRegularConversion,OffsetSignedSaturation-0\#ChannelRegularConversion,NbrOfConversionFlag,master +ADC1.NbrOfConversionFlag=1 +ADC1.OffsetNumber-0\#ChannelRegularConversion=ADC_OFFSET_NONE +ADC1.OffsetSignedSaturation-0\#ChannelRegularConversion=DISABLE +ADC1.Rank-0\#ChannelRegularConversion=1 +ADC1.SamplingTime-0\#ChannelRegularConversion=ADC_SAMPLETIME_1CYCLE_5 +ADC1.master=1 File.Version=6 GPIO.groupedBy= KeepUserPlacement=false Mcu.CPN=STM32H750VBT6 Mcu.Family=STM32H7 -Mcu.IP0=CORTEX_M7 -Mcu.IP1=NVIC -Mcu.IP10=USART1 -Mcu.IP2=RCC -Mcu.IP3=SPI1 -Mcu.IP4=SPI2 -Mcu.IP5=SYS -Mcu.IP6=TIM2 -Mcu.IP7=TIM3 -Mcu.IP8=TIM4 -Mcu.IP9=TIM5 -Mcu.IPNb=11 +Mcu.IP0=ADC1 +Mcu.IP1=CORTEX_M7 +Mcu.IP10=TIM5 +Mcu.IP11=USART1 +Mcu.IP2=NVIC +Mcu.IP3=RCC +Mcu.IP4=SPI1 +Mcu.IP5=SPI2 +Mcu.IP6=SYS +Mcu.IP7=TIM2 +Mcu.IP8=TIM3 +Mcu.IP9=TIM4 +Mcu.IPNb=12 Mcu.Name=STM32H750VBTx Mcu.Package=LQFP100 Mcu.Pin0=PH0-OSC_IN (PH0) Mcu.Pin1=PH1-OSC_OUT (PH1) -Mcu.Pin10=PB15 -Mcu.Pin11=PD12 -Mcu.Pin12=PD13 -Mcu.Pin13=PD14 -Mcu.Pin14=PC6 -Mcu.Pin15=PC7 -Mcu.Pin16=PC8 -Mcu.Pin17=PA9 -Mcu.Pin18=PA10 -Mcu.Pin19=VP_SYS_VS_Systick +Mcu.Pin10=PB14 +Mcu.Pin11=PB15 +Mcu.Pin12=PD12 +Mcu.Pin13=PD13 +Mcu.Pin14=PD14 +Mcu.Pin15=PC6 +Mcu.Pin16=PC7 +Mcu.Pin17=PC8 +Mcu.Pin18=PA9 +Mcu.Pin19=PA10 Mcu.Pin2=PA0 -Mcu.Pin20=VP_TIM2_VS_ClockSourceINT -Mcu.Pin21=VP_TIM3_VS_ClockSourceINT -Mcu.Pin22=VP_TIM4_VS_ClockSourceINT -Mcu.Pin23=VP_TIM5_VS_ClockSourceINT +Mcu.Pin20=VP_SYS_VS_Systick +Mcu.Pin21=VP_TIM2_VS_ClockSourceINT +Mcu.Pin22=VP_TIM3_VS_ClockSourceINT +Mcu.Pin23=VP_TIM4_VS_ClockSourceINT +Mcu.Pin24=VP_TIM5_VS_ClockSourceINT Mcu.Pin3=PA1 Mcu.Pin4=PA2 Mcu.Pin5=PA5 Mcu.Pin6=PA6 Mcu.Pin7=PA7 -Mcu.Pin8=PB13 -Mcu.Pin9=PB14 -Mcu.PinsNb=24 +Mcu.Pin8=PC5 +Mcu.Pin9=PB13 +Mcu.PinsNb=25 Mcu.ThirdPartyNb=0 Mcu.UserConstants= Mcu.UserName=STM32H750VBTx @@ -90,6 +100,8 @@ PB14.Signal=SPI2_MISO PB15.Locked=true PB15.Mode=Full_Duplex_Master PB15.Signal=SPI2_MOSI +PC5.Locked=true +PC5.Signal=ADCx_INP8 PC6.Locked=true PC6.Signal=S_TIM3_CH1 PC7.Locked=true @@ -134,8 +146,8 @@ ProjectManager.StackSize=0x400 ProjectManager.TargetToolchain=STM32CubeIDE ProjectManager.ToolChainLocation= ProjectManager.UnderRoot=true -ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-HAL-false,2-MX_GPIO_Init-GPIO-false-HAL-true,3-MX_TIM2_Init-TIM2-false-HAL-true,4-MX_TIM3_Init-TIM3-false-HAL-true,5-MX_TIM5_Init-TIM5-false-HAL-true,6-MX_USART1_UART_Init-USART1-false-HAL-true,7-MX_SPI1_Init-SPI1-false-HAL-true,8-MX_SPI2_Init-SPI2-false-HAL-true,0-MX_CORTEX_M7_Init-CORTEX_M7-false-HAL-true -RCC.ADCFreq_Value=50390625 +ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-HAL-false,2-MX_GPIO_Init-GPIO-false-HAL-true,3-MX_TIM2_Init-TIM2-false-HAL-true,4-MX_TIM3_Init-TIM3-false-HAL-true,5-MX_TIM5_Init-TIM5-false-HAL-true,6-MX_USART1_UART_Init-USART1-false-HAL-true,7-MX_SPI1_Init-SPI1-false-HAL-true,8-MX_SPI2_Init-SPI2-false-HAL-true,9-MX_TIM4_Init-TIM4-false-HAL-true,0-MX_CORTEX_M7_Init-CORTEX_M7-false-HAL-true +RCC.ADCFreq_Value=24000000 RCC.AHB12Freq_Value=240000000 RCC.AHB4Freq_Value=240000000 RCC.APB1Freq_Value=120000000 @@ -155,16 +167,19 @@ RCC.D3PPRE=RCC_APB4_DIV2 RCC.DFSDMACLkFreq_Value=160000000 RCC.DFSDMFreq_Value=120000000 RCC.DIVM1=5 +RCC.DIVM2=25 RCC.DIVN1=192 +RCC.DIVN2=240 RCC.DIVP1Freq_Value=480000000 -RCC.DIVP2Freq_Value=50390625 +RCC.DIVP2=10 +RCC.DIVP2Freq_Value=24000000 RCC.DIVP3Freq_Value=50390625 RCC.DIVQ1=6 RCC.DIVQ1Freq_Value=160000000 -RCC.DIVQ2Freq_Value=50390625 +RCC.DIVQ2Freq_Value=120000000 RCC.DIVQ3Freq_Value=50390625 RCC.DIVR1Freq_Value=480000000 -RCC.DIVR2Freq_Value=50390625 +RCC.DIVR2Freq_Value=120000000 RCC.DIVR3Freq_Value=50390625 RCC.FDCANFreq_Value=160000000 RCC.FMCFreq_Value=240000000 @@ -175,7 +190,7 @@ RCC.HPRE=RCC_HCLK_DIV2 RCC.HRTIMFreq_Value=240000000 RCC.I2C123Freq_Value=120000000 RCC.I2C4Freq_Value=120000000 -RCC.IPParameters=ADCFreq_Value,AHB12Freq_Value,AHB4Freq_Value,APB1Freq_Value,APB2Freq_Value,APB3Freq_Value,APB4Freq_Value,AXIClockFreq_Value,CECFreq_Value,CKPERFreq_Value,CortexFreq_Value,CpuClockFreq_Value,D1CPREFreq_Value,D1PPRE,D2PPRE1,D2PPRE2,D3PPRE,DFSDMACLkFreq_Value,DFSDMFreq_Value,DIVM1,DIVN1,DIVP1Freq_Value,DIVP2Freq_Value,DIVP3Freq_Value,DIVQ1,DIVQ1Freq_Value,DIVQ2Freq_Value,DIVQ3Freq_Value,DIVR1Freq_Value,DIVR2Freq_Value,DIVR3Freq_Value,FDCANFreq_Value,FMCFreq_Value,FamilyName,HCLK3ClockFreq_Value,HCLKFreq_Value,HPRE,HRTIMFreq_Value,I2C123Freq_Value,I2C4Freq_Value,LPTIM1Freq_Value,LPTIM2Freq_Value,LPTIM345Freq_Value,LPUART1Freq_Value,LTDCFreq_Value,MCO1PinFreq_Value,MCO2PinFreq_Value,PLLSourceVirtual,ProductRev,QSPIFreq_Value,RNGFreq_Value,RTCFreq_Value,SAI1Freq_Value,SAI23Freq_Value,SAI4AFreq_Value,SAI4BFreq_Value,SDMMCFreq_Value,SPDIFRXFreq_Value,SPI123Freq_Value,SPI45Freq_Value,SPI6Freq_Value,SWPMI1Freq_Value,SYSCLKFreq_VALUE,SYSCLKSource,Tim1OutputFreq_Value,Tim2OutputFreq_Value,TraceFreq_Value,USART16Freq_Value,USART234578Freq_Value,USBFreq_Value,VCO1OutputFreq_Value,VCO2OutputFreq_Value,VCO3OutputFreq_Value,VCOInput1Freq_Value,VCOInput2Freq_Value,VCOInput3Freq_Value +RCC.IPParameters=ADCFreq_Value,AHB12Freq_Value,AHB4Freq_Value,APB1Freq_Value,APB2Freq_Value,APB3Freq_Value,APB4Freq_Value,AXIClockFreq_Value,CECFreq_Value,CKPERFreq_Value,CortexFreq_Value,CpuClockFreq_Value,D1CPREFreq_Value,D1PPRE,D2PPRE1,D2PPRE2,D3PPRE,DFSDMACLkFreq_Value,DFSDMFreq_Value,DIVM1,DIVM2,DIVN1,DIVN2,DIVP1Freq_Value,DIVP2,DIVP2Freq_Value,DIVP3Freq_Value,DIVQ1,DIVQ1Freq_Value,DIVQ2Freq_Value,DIVQ3Freq_Value,DIVR1Freq_Value,DIVR2Freq_Value,DIVR3Freq_Value,FDCANFreq_Value,FMCFreq_Value,FamilyName,HCLK3ClockFreq_Value,HCLKFreq_Value,HPRE,HRTIMFreq_Value,I2C123Freq_Value,I2C4Freq_Value,LPTIM1Freq_Value,LPTIM2Freq_Value,LPTIM345Freq_Value,LPUART1Freq_Value,LTDCFreq_Value,MCO1PinFreq_Value,MCO2PinFreq_Value,PLLSourceVirtual,ProductRev,QSPIFreq_Value,RNGFreq_Value,RTCFreq_Value,SAI1Freq_Value,SAI23Freq_Value,SAI4AFreq_Value,SAI4BFreq_Value,SDMMCFreq_Value,SPDIFRXFreq_Value,SPI123Freq_Value,SPI45Freq_Value,SPI6Freq_Value,SWPMI1Freq_Value,SYSCLKFreq_VALUE,SYSCLKSource,Tim1OutputFreq_Value,Tim2OutputFreq_Value,TraceFreq_Value,USART16Freq_Value,USART234578Freq_Value,USBFreq_Value,VCO1OutputFreq_Value,VCO2OutputFreq_Value,VCO3OutputFreq_Value,VCOInput1Freq_Value,VCOInput2Freq_Value,VCOInput3Freq_Value RCC.LPTIM1Freq_Value=120000000 RCC.LPTIM2Freq_Value=120000000 RCC.LPTIM345Freq_Value=120000000 @@ -207,11 +222,13 @@ RCC.USART16Freq_Value=120000000 RCC.USART234578Freq_Value=120000000 RCC.USBFreq_Value=160000000 RCC.VCO1OutputFreq_Value=960000000 -RCC.VCO2OutputFreq_Value=100781250 +RCC.VCO2OutputFreq_Value=240000000 RCC.VCO3OutputFreq_Value=100781250 RCC.VCOInput1Freq_Value=5000000 -RCC.VCOInput2Freq_Value=781250 +RCC.VCOInput2Freq_Value=1000000 RCC.VCOInput3Freq_Value=781250 +SH.ADCx_INP8.0=ADC1_INP8,IN8-Single-Ended +SH.ADCx_INP8.ConfNb=1 SH.S_TIM2_CH1_ETR.0=TIM2_CH1,PWM Generation1 CH1 SH.S_TIM2_CH1_ETR.ConfNb=1 SH.S_TIM2_CH2.0=TIM2_CH2,PWM Generation2 CH2