diff --git a/.mxproject b/.mxproject index e08cffb..0670d49 100644 --- a/.mxproject +++ b/.mxproject @@ -9,17 +9,17 @@ CDefines=USE_HAL_DRIVER;STM32L432xx;USE_HAL_DRIVER;USE_HAL_DRIVER; [PreviousGenFiles] AdvancedFolderStructure=true HeaderFileListSize=3 -HeaderFiles#0=C:/Users/Maxim/Documents/STMGyro/Core/Inc/stm32l4xx_it.h -HeaderFiles#1=C:/Users/Maxim/Documents/STMGyro/Core/Inc/stm32l4xx_hal_conf.h -HeaderFiles#2=C:/Users/Maxim/Documents/STMGyro/Core/Inc/main.h +HeaderFiles#0=C:/file/STMGyro/Core/Inc/stm32l4xx_it.h +HeaderFiles#1=C:/file/STMGyro/Core/Inc/stm32l4xx_hal_conf.h +HeaderFiles#2=C:/file/STMGyro/Core/Inc/main.h HeaderFolderListSize=1 -HeaderPath#0=C:/Users/Maxim/Documents/STMGyro/Core/Inc +HeaderPath#0=C:/file/STMGyro/Core/Inc HeaderFiles=; SourceFileListSize=3 -SourceFiles#0=C:/Users/Maxim/Documents/STMGyro/Core/Src/stm32l4xx_it.c -SourceFiles#1=C:/Users/Maxim/Documents/STMGyro/Core/Src/stm32l4xx_hal_msp.c -SourceFiles#2=C:/Users/Maxim/Documents/STMGyro/Core/Src/main.c +SourceFiles#0=C:/file/STMGyro/Core/Src/stm32l4xx_it.c +SourceFiles#1=C:/file/STMGyro/Core/Src/stm32l4xx_hal_msp.c +SourceFiles#2=C:/file/STMGyro/Core/Src/main.c SourceFolderListSize=1 -SourcePath#0=C:/Users/Maxim/Documents/STMGyro/Core/Src +SourcePath#0=C:/file/STMGyro/Core/Src SourceFiles=; diff --git a/Core/Inc/my_defs.h b/Core/Inc/my_defs.h new file mode 100644 index 0000000..f0e7687 --- /dev/null +++ b/Core/Inc/my_defs.h @@ -0,0 +1,63 @@ +/* + * my_defs.h + * + * Created on: 2 февр. 2022 г. + * Author: fedorenko + */ + +#ifndef INC_MY_DEFS_H_ +#define INC_MY_DEFS_H_ + + +/* ------------------------ + * Configuration + * ------------------------ */ +#define COM_MES_MODE_NORMAL 0 +#define COM_MES_MODE_FACTORY 1 + +#ifndef COM_MES_MODE +#define COM_MES_MODE COM_MES_MODE_NORMAL /* Mode selection */ +#endif + +#define COM_MES_CBIT_DISABLED 0 +#define COM_MES_CBIT_ENABLED 1 + +#ifndef COM_MES_CBIT +#define COM_MES_CBIT COM_MES_CBIT_DISABLED /* CBIT selection */ +#endif + +#define COM_MES_RATE_RANGE_INT 0 +#define COM_MES_RATE_RANGE_SPI 1 + +#ifndef COM_MES_RATE_RANGE +#define COM_MES_RATE_RANGE COM_MES_RATE_RANGE_INT /* Rate range selection */ +#endif + +#define COM_MES_RATE_RANGE_900 0u +#define COM_MES_RATE_RANGE_300 1u +#define COM_MES_RATE_RANGE_150 2u +#define COM_MES_RATE_RANGE_75 3u + +#ifndef COM_MES_RATE_RANGE_VAL +#define COM_MES_RATE_RANGE_VAL COM_MES_RATE_RANGE_900 /* Rate range value selection */ +#endif + +#define SCALE_RATE_RANGE_900 8u +#define SCALE_RATE_RANGE_300 24u +#define SCALE_RATE_RANGE_150 48u +#define SCALE_RATE_RANGE_75 96u + +/* ------------------------ + * Errors + * ------------------------ */ + +#define ERROR_SIZE_SMALL 1 +#define ERROR_CRC 2 +#define ERROR_FAIL 3 +#define ERROR_IDENTIFIER 4 +#define ERROR_INVALID 5 +#define ERROR_CBIT 6 +#define ERROR_NORM 7 +#define ERROR_RATE 8 + +#endif /* INC_MY_DEFS_H_ */ diff --git a/Core/Inc/stm32l4xx_hal_conf.h b/Core/Inc/stm32l4xx_hal_conf.h index bd2053a..0800a5a 100644 --- a/Core/Inc/stm32l4xx_hal_conf.h +++ b/Core/Inc/stm32l4xx_hal_conf.h @@ -76,7 +76,7 @@ #define HAL_SPI_MODULE_ENABLED /*#define HAL_SRAM_MODULE_ENABLED */ /*#define HAL_SWPMI_MODULE_ENABLED */ -/*#define HAL_TIM_MODULE_ENABLED */ +#define HAL_TIM_MODULE_ENABLED /*#define HAL_TSC_MODULE_ENABLED */ #define HAL_UART_MODULE_ENABLED /*#define HAL_USART_MODULE_ENABLED */ diff --git a/Core/Inc/stm32l4xx_it.h b/Core/Inc/stm32l4xx_it.h index ced2d7c..c21edd3 100644 --- a/Core/Inc/stm32l4xx_it.h +++ b/Core/Inc/stm32l4xx_it.h @@ -56,6 +56,7 @@ void DebugMon_Handler(void); void PendSV_Handler(void); void SysTick_Handler(void); void DMA1_Channel4_IRQHandler(void); +void TIM1_UP_TIM16_IRQHandler(void); void SPI1_IRQHandler(void); void USART1_IRQHandler(void); /* USER CODE BEGIN EFP */ diff --git a/Core/Src/gyro_mes.c b/Core/Src/gyro_mes.c index fbafe21..29ceca5 100644 --- a/Core/Src/gyro_mes.c +++ b/Core/Src/gyro_mes.c @@ -25,6 +25,7 @@ /* USER CODE END Header */ /* Includes ------------------------------------------------------------------*/ #include "gyro_mes.h" +#include "my_defs.h" /* Private includes ----------------------------------------------------------*/ /* USER CODE BEGIN Includes */ @@ -40,55 +41,6 @@ /* USER CODE BEGIN PD */ -/* ------------------------ - * Configuration - * ------------------------ */ -#define COM_MES_MODE_NORMAL 0 -#define COM_MES_MODE_FACTORY 1 - -#ifndef COM_MES_MODE -#define COM_MES_MODE COM_MES_MODE_NORMAL /* Mode selection */ -#endif - -#define COM_MES_CBIT_DISABLED 0 -#define COM_MES_CBIT_ENABLED 1 - -#ifndef COM_MES_CBIT -#define COM_MES_CBIT COM_MES_CBIT_DISABLED /* CBIT selection */ -#endif - -#define COM_MES_RATE_RANGE_INT 0 -#define COM_MES_RATE_RANGE_SPI 1 - -#ifndef COM_MES_RATE_RANGE -#define COM_MES_RATE_RANGE COM_MES_RATE_RANGE_INT /* Rate range selection */ -#endif - -#define COM_MES_RATE_RANGE_900 0u -#define COM_MES_RATE_RANGE_300 1u -#define COM_MES_RATE_RANGE_150 2u -#define COM_MES_RATE_RANGE_75 3u - -#ifndef COM_MES_RATE_RANGE_VAL -#define COM_MES_RATE_RANGE_VAL COM_MES_RATE_RANGE_900 /* Rate range value selection */ -#endif - -#define SCALE_RATE_RANGE_900 8u -#define SCALE_RATE_RANGE_300 24u -#define SCALE_RATE_RANGE_150 48u -#define SCALE_RATE_RANGE_75 96u -/* ------------------------ - * Errors - * ------------------------ */ - -#define ERROR_SIZE_SMALL 1 -#define ERROR_CRC 2 -#define ERROR_FAIL 3 -#define ERROR_IDENTIFIER 4 -#define ERROR_INVALID 5 -#define ERROR_CBIT 6 -#define ERROR_NORM 7 -#define ERROR_RATE 8 /* USER CODE END PD */ /* Private macro -------------------------------------------------------------*/ diff --git a/Core/Src/main.c b/Core/Src/main.c index 8a75d2c..76671d9 100644 --- a/Core/Src/main.c +++ b/Core/Src/main.c @@ -61,6 +61,8 @@ void GPIO_Reset(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin) /* Private variables ---------------------------------------------------------*/ SPI_HandleTypeDef hspi1; +TIM_HandleTypeDef htim1; + UART_HandleTypeDef huart1; DMA_HandleTypeDef hdma_usart1_tx; @@ -74,6 +76,7 @@ static void MX_GPIO_Init(void); static void MX_SPI1_Init(void); static void MX_DMA_Init(void); static void MX_USART1_UART_Init(void); +static void MX_TIM1_Init(void); /* USER CODE BEGIN PFP */ /* USER CODE END PFP */ @@ -83,6 +86,7 @@ static void MX_USART1_UART_Init(void); uint8_t data_out[18] = {0}; uint8_t flag_receive = 0; uint8_t flag_transmit = 0; +struct sData data[3]; /* USER CODE END 0 */ /** @@ -116,6 +120,7 @@ int main(void) MX_SPI1_Init(); MX_DMA_Init(); MX_USART1_UART_Init(); + MX_TIM1_Init(); /* USER CODE BEGIN 2 */ RESET_ON(); HAL_Delay(100); @@ -123,7 +128,6 @@ int main(void) /* Infinite loop */ /* USER CODE BEGIN WHILE */ - struct sData data[3]; char str[19]; memset(str, 0, sizeof(str)); int8_t res = comand_mes(data_in, sizeof(data_in) / sizeof(data_in[0])); @@ -148,17 +152,12 @@ int main(void) CS3_OFF(); flag_receive = 0; - res = status_mes(&data_out[0], 6u, &data[0]); - res += status_mes(&data_out[6], 6u, &data[1]); - res += status_mes(&data_out[12], 6u, &data[2]); + status_mes(&data_out[0], 6u, &data[0]); + status_mes(&data_out[6], 6u, &data[1]); + status_mes(&data_out[12], 6u, &data[2]); + + flag_transmit = 1; - if(res == 0) - { - res = sprintf (str, "%i;%i;%i;%i;%i;%i\r\n", data[0].rate, data[1].rate, data[2].rate, data[0].temp, data[1].temp, data[2].temp); - while(flag_transmit); - flag_transmit = 1; - HAL_UART_Transmit_DMA(&huart1, (uint8_t*)str, res); - } /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ @@ -253,6 +252,53 @@ static void MX_SPI1_Init(void) } +/** + * @brief TIM1 Initialization Function + * @param None + * @retval None + */ +static void MX_TIM1_Init(void) +{ + + /* USER CODE BEGIN TIM1_Init 0 */ + + /* USER CODE END TIM1_Init 0 */ + + TIM_ClockConfigTypeDef sClockSourceConfig = {0}; + TIM_MasterConfigTypeDef sMasterConfig = {0}; + + /* USER CODE BEGIN TIM1_Init 1 */ + + /* USER CODE END TIM1_Init 1 */ + htim1.Instance = TIM1; + htim1.Init.Prescaler = 79; + htim1.Init.CounterMode = TIM_COUNTERMODE_UP; + htim1.Init.Period = 65535; + htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; + htim1.Init.RepetitionCounter = 0; + htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; + if (HAL_TIM_Base_Init(&htim1) != HAL_OK) + { + Error_Handler(); + } + sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; + if (HAL_TIM_ConfigClockSource(&htim1, &sClockSourceConfig) != HAL_OK) + { + Error_Handler(); + } + sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; + sMasterConfig.MasterOutputTrigger2 = TIM_TRGO2_RESET; + sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; + if (HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig) != HAL_OK) + { + Error_Handler(); + } + /* USER CODE BEGIN TIM1_Init 2 */ + + /* USER CODE END TIM1_Init 2 */ + +} + /** * @brief USART1 Initialization Function * @param None @@ -275,7 +321,7 @@ static void MX_USART1_UART_Init(void) huart1.Init.Parity = UART_PARITY_NONE; huart1.Init.Mode = UART_MODE_TX; huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE; - huart1.Init.OverSampling = UART_OVERSAMPLING_8; + huart1.Init.OverSampling = UART_OVERSAMPLING_16; huart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE; huart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT; if (HAL_UART_Init(&huart1) != HAL_OK) @@ -345,9 +391,16 @@ void HAL_SPI_TxRxCpltCallback(SPI_HandleTypeDef *hspi) flag_receive = 1; } -void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart) +/*void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart) { flag_transmit = 0; +}*/ + +void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) +{ + if((USART1->ISR & USART_ISR_TXE) == 0 && (USART1->ISR & USART_ISR_TC) == 0 && (flag_transmit)) USART1->RDR = data[1].rate; + else USART1->RDR = 0; + flag_transmit = 0; } /* USER CODE END 4 */ diff --git a/Core/Src/stm32l4xx_hal_msp.c b/Core/Src/stm32l4xx_hal_msp.c index e6d62ae..af29934 100644 --- a/Core/Src/stm32l4xx_hal_msp.c +++ b/Core/Src/stm32l4xx_hal_msp.c @@ -149,6 +149,56 @@ void HAL_SPI_MspDeInit(SPI_HandleTypeDef* hspi) } +/** +* @brief TIM_Base MSP Initialization +* This function configures the hardware resources used in this example +* @param htim_base: TIM_Base handle pointer +* @retval None +*/ +void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* htim_base) +{ + if(htim_base->Instance==TIM1) + { + /* USER CODE BEGIN TIM1_MspInit 0 */ + + /* USER CODE END TIM1_MspInit 0 */ + /* Peripheral clock enable */ + __HAL_RCC_TIM1_CLK_ENABLE(); + /* TIM1 interrupt Init */ + HAL_NVIC_SetPriority(TIM1_UP_TIM16_IRQn, 0, 0); + HAL_NVIC_EnableIRQ(TIM1_UP_TIM16_IRQn); + /* USER CODE BEGIN TIM1_MspInit 1 */ + + /* USER CODE END TIM1_MspInit 1 */ + } + +} + +/** +* @brief TIM_Base MSP De-Initialization +* This function freeze the hardware resources used in this example +* @param htim_base: TIM_Base handle pointer +* @retval None +*/ +void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef* htim_base) +{ + if(htim_base->Instance==TIM1) + { + /* USER CODE BEGIN TIM1_MspDeInit 0 */ + + /* USER CODE END TIM1_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_TIM1_CLK_DISABLE(); + + /* TIM1 interrupt DeInit */ + HAL_NVIC_DisableIRQ(TIM1_UP_TIM16_IRQn); + /* USER CODE BEGIN TIM1_MspDeInit 1 */ + + /* USER CODE END TIM1_MspDeInit 1 */ + } + +} + /** * @brief UART MSP Initialization * This function configures the hardware resources used in this example diff --git a/Core/Src/stm32l4xx_it.c b/Core/Src/stm32l4xx_it.c index 4012706..f610d34 100644 --- a/Core/Src/stm32l4xx_it.c +++ b/Core/Src/stm32l4xx_it.c @@ -56,6 +56,7 @@ /* External variables --------------------------------------------------------*/ extern SPI_HandleTypeDef hspi1; +extern TIM_HandleTypeDef htim1; extern DMA_HandleTypeDef hdma_usart1_tx; extern UART_HandleTypeDef huart1; /* USER CODE BEGIN EV */ @@ -214,6 +215,20 @@ void DMA1_Channel4_IRQHandler(void) /* USER CODE END DMA1_Channel4_IRQn 1 */ } +/** + * @brief This function handles TIM1 update interrupt and TIM16 global interrupt. + */ +void TIM1_UP_TIM16_IRQHandler(void) +{ + /* USER CODE BEGIN TIM1_UP_TIM16_IRQn 0 */ + + /* USER CODE END TIM1_UP_TIM16_IRQn 0 */ + HAL_TIM_IRQHandler(&htim1); + /* USER CODE BEGIN TIM1_UP_TIM16_IRQn 1 */ + + /* USER CODE END TIM1_UP_TIM16_IRQn 1 */ +} + /** * @brief This function handles SPI1 global interrupt. */ diff --git a/STMGyro.ioc b/STMGyro.ioc index 20e1f2a..ea8efc4 100644 --- a/STMGyro.ioc +++ b/STMGyro.ioc @@ -19,12 +19,14 @@ Mcu.IP1=NVIC Mcu.IP2=RCC Mcu.IP3=SPI1 Mcu.IP4=SYS -Mcu.IP5=USART1 -Mcu.IPNb=6 +Mcu.IP5=TIM1 +Mcu.IP6=USART1 +Mcu.IPNb=7 Mcu.Name=STM32L432K(B-C)Ux Mcu.Package=UFQFPN32 Mcu.Pin0=PA1 Mcu.Pin1=PA2 +Mcu.Pin10=VP_TIM1_VS_ClockSourceINT Mcu.Pin2=PA3 Mcu.Pin3=PA5 Mcu.Pin4=PA6 @@ -33,7 +35,7 @@ Mcu.Pin6=PB0 Mcu.Pin7=PA9 Mcu.Pin8=PA10 Mcu.Pin9=VP_SYS_VS_Systick -Mcu.PinsNb=10 +Mcu.PinsNb=11 Mcu.ThirdPartyNb=0 Mcu.UserConstants= Mcu.UserName=STM32L432KCUx @@ -51,6 +53,7 @@ NVIC.PriorityGroup=NVIC_PRIORITYGROUP_4 NVIC.SPI1_IRQn=true\:0\:0\:false\:false\:true\:true\:true NVIC.SVCall_IRQn=true\:0\:0\:false\:false\:true\:false\:false NVIC.SysTick_IRQn=true\:15\:0\:false\:false\:true\:false\:true +NVIC.TIM1_UP_TIM16_IRQn=true\:0\:0\:false\:false\:true\:true\:true NVIC.USART1_IRQn=true\:0\:0\:false\:false\:true\:true\:true NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false PA1.GPIOParameters=PinState,GPIO_PuPd,GPIO_Label,GPIO_ModeDefaultOutputPP @@ -173,12 +176,16 @@ SPI1.Direction=SPI_DIRECTION_2LINES SPI1.IPParameters=VirtualType,Mode,Direction,CalculateBaudRate,DataSize,BaudRatePrescaler SPI1.Mode=SPI_MODE_MASTER SPI1.VirtualType=VM_MASTER +TIM1.IPParameters=Prescaler +TIM1.Prescaler=79 USART1.BaudRate=921600 USART1.IPParameters=VirtualMode-Asynchronous,BaudRate,OverSampling,Mode USART1.Mode=MODE_TX -USART1.OverSampling=UART_OVERSAMPLING_8 +USART1.OverSampling=UART_OVERSAMPLING_16 USART1.VirtualMode-Asynchronous=VM_ASYNC VP_SYS_VS_Systick.Mode=SysTick VP_SYS_VS_Systick.Signal=SYS_VS_Systick +VP_TIM1_VS_ClockSourceINT.Mode=Internal +VP_TIM1_VS_ClockSourceINT.Signal=TIM1_VS_ClockSourceINT board=custom isbadioc=false