diff --git a/adc.c b/adc.c index 0a8479a..3c5031b 100644 --- a/adc.c +++ b/adc.c @@ -84,12 +84,12 @@ void HAL_ADC_MspInit(ADC_HandleTypeDef* adcHandle) __HAL_RCC_GPIOA_CLK_ENABLE(); __HAL_RCC_GPIOB_CLK_ENABLE(); /**ADC1 GPIO Configuration - PA0-WKUP ------> ADC1_IN0 + PA2 ------> ADC1_IN2 PB1 ------> ADC1_IN9 */ - GPIO_InitStruct.Pin = GPIO_PIN_0; + GPIO_InitStruct.Pin = I_BOARD_Pin; GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; - HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); + HAL_GPIO_Init(I_BOARD_GPIO_Port, &GPIO_InitStruct); GPIO_InitStruct.Pin = GPIO_PIN_1; GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; @@ -113,10 +113,10 @@ void HAL_ADC_MspDeInit(ADC_HandleTypeDef* adcHandle) __HAL_RCC_ADC1_CLK_DISABLE(); /**ADC1 GPIO Configuration - PA0-WKUP ------> ADC1_IN0 + PA2 ------> ADC1_IN2 PB1 ------> ADC1_IN9 */ - HAL_GPIO_DeInit(GPIOA, GPIO_PIN_0); + HAL_GPIO_DeInit(I_BOARD_GPIO_Port, I_BOARD_Pin); HAL_GPIO_DeInit(GPIOB, GPIO_PIN_1); diff --git a/gpio.c b/gpio.c index dae2ee5..05b8f4b 100644 --- a/gpio.c +++ b/gpio.c @@ -38,7 +38,6 @@ * Output * EVENT_OUT * EXTI - PA0-WKUP ------> ADCx_IN0 PB1 ------> ADCx_IN9 */ void MX_GPIO_Init(void) @@ -66,17 +65,6 @@ void MX_GPIO_Init(void) GPIO_InitStruct.Pull = GPIO_NOPULL; HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); - /*Configure GPIO pin : PA0 */ - GPIO_InitStruct.Pin = GPIO_PIN_0; - GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; - HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); - - /*Configure GPIO pin : PtPin */ - GPIO_InitStruct.Pin = PWM_CTRL_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING_FALLING; - GPIO_InitStruct.Pull = GPIO_PULLUP; - HAL_GPIO_Init(PWM_CTRL_GPIO_Port, &GPIO_InitStruct); - /*Configure GPIO pins : PAPin PAPin PAPin PAPin */ GPIO_InitStruct.Pin = HEATING_Pin|LED2_Pin|VLV_M_Pin|VLV_REVERSE_Pin; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; @@ -131,10 +119,6 @@ void MX_GPIO_Init(void) GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); - /* EXTI interrupt init*/ - HAL_NVIC_SetPriority(EXTI3_IRQn, 0, 0); - HAL_NVIC_EnableIRQ(EXTI3_IRQn); - } /* USER CODE BEGIN 2 */ diff --git a/main.c b/main.c index 61c433a..b140e59 100644 --- a/main.c +++ b/main.c @@ -51,8 +51,16 @@ /* USER CODE BEGIN PV */ uint8_t transmitBuffer[BUFFER_SIZE]; uint8_t receiveBuffer[BUFFER_SIZE]; - - +uint8_t cnt2_PA3_level = -1; +uint32_t period = 0; +uint32_t pulseWidth = 0; +uint32_t cnt2_PA3_freqcnt = 0; +uint32_t cnt2_PA3_freqcnt0 = 0; +float k = 0; +uint32_t cnt2_ch4_0 = 0; +uint32_t cnt2_ch4_1 = 0; +uint32_t cnt2_ch3_1 = 0; +uint32_t cnt2_ch3_0 = 0; /* USER CODE END PV */ /* Private function prototypes -----------------------------------------------*/ @@ -105,6 +113,7 @@ int main(void) MX_USART3_UART_Init(); MX_TIM4_Init(); /* USER CODE BEGIN 2 */ + // uint8_t button_down; extern float MAX6675_Temperature; //�?змеренная температура @@ -114,8 +123,12 @@ extern float MAX6675_Temperature; //�?змеренная температур for (unsigned char i = 0; i < BUFFER_SIZE; i++) { transmitBuffer[i] = i + 1; + // transmitBuffer[0] = 0x69; receiveBuffer[i] = 0; } + + + //HAL_UART_Receive_IT(&huart3, receiveBuffer, BUFFER_SIZE); // HAL_UART_Transmit_IT(&huart3, transmitBuffer, BUFFER_SIZE); /* USER CODE END 2 */ @@ -123,13 +136,14 @@ for (unsigned char i = 0; i < BUFFER_SIZE; i++) /* Infinite loop */ /* USER CODE BEGIN WHILE */ HAL_UART_Receive_IT(&huart3, receiveBuffer, BUFFER_SIZE); - +HAL_TIM_IC_Start_IT(&htim2, TIM_CHANNEL_3); +HAL_TIM_IC_Start_IT(&htim2, TIM_CHANNEL_4); while (1) { - - MAX6675_Temperature = MAX6675_GetTemperature(SPI1); - // Delay_ms(220); +// MAX6675_Temperature = MAX6675_GetTemperature(SPI1); + HAL_Delay(1000); + HAL_UART_Transmit_IT(&huart3, transmitBuffer, BUFFER_SIZE); } /* USER CODE END WHILE */ @@ -143,6 +157,8 @@ HAL_UART_Receive_IT(&huart3, receiveBuffer, BUFFER_SIZE); * @brief System Clock Configuration * @retval None */ + + void SystemClock_Config(void) { RCC_OscInitTypeDef RCC_OscInitStruct = {0}; @@ -187,12 +203,14 @@ void SystemClock_Config(void) /* USER CODE BEGIN 4 */ + + void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) { if (huart->Instance == USART3) { // USART3 завершил отправку данных - HAL_UART_Transmit_IT(&huart3, receiveBuffer, BUFFER_SIZE); + HAL_UART_Transmit_IT(&huart3, transmitBuffer, BUFFER_SIZE); } } @@ -224,6 +242,59 @@ void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) the HAL_GPIO_EXTI_Callback could be implemented in the user file */ } +void HAL_TIM_PeriodElapsedCallback (TIM_HandleTypeDef *htim) +{ + if (htim->Instance == TIM2) + { + if(htim->Channel == HAL_TIM_ACTIVE_CHANNEL_4) + { + if(cnt2_PA3_freqcnt0 == cnt2_PA3_freqcnt) + { + switch (cnt2_PA3_level) + { + case 0: transmitBuffer[0] = 0x98; + case 1: transmitBuffer[0] = 0x99; + } + } + cnt2_PA3_freqcnt0 = cnt2_PA3_freqcnt; + } + } +} + +void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim) +{ + + + if (htim->Instance == TIM2) + { + if(htim->Channel == HAL_TIM_ACTIVE_CHANNEL_3) + { + cnt2_ch3_1 = HAL_TIM_ReadCapturedValue(&htim2, TIM_CHANNEL_3); + cnt2_PA3_level = 0; //PA3 low + } + if(htim->Channel == HAL_TIM_ACTIVE_CHANNEL_4) + { + // TIM2->CNT = 0; + cnt2_PA3_level = 1; //PA3 high + cnt2_PA3_freqcnt++; + cnt2_ch4_1 = HAL_TIM_ReadCapturedValue(&htim2, TIM_CHANNEL_4); + cnt2_ch3_1 = HAL_TIM_ReadCapturedValue(&htim2, TIM_CHANNEL_3); + if(cnt2_ch4_0 < cnt2_ch4_1) period = cnt2_ch4_1 - cnt2_ch4_0; + else period = htim2.Init.Period - cnt2_ch4_0 + cnt2_ch4_1; + if(cnt2_ch4_0 < cnt2_ch3_1)pulseWidth = cnt2_ch3_1 - cnt2_ch4_0; + else pulseWidth = htim2.Init.Period - cnt2_ch4_0 + cnt2_ch3_1; + + transmitBuffer[0] = (uint8_t)(100*(((float)pulseWidth)/((float)period))); + transmitBuffer[1] = (uint8_t)(255*pulseWidth/30000); + transmitBuffer[2] = (uint8_t)(255*period/30000); + if(period == 0) transmitBuffer[0] = 0; + cnt2_ch4_0 = cnt2_ch4_1; + // cnt_ch3_0 = cnt_ch3_1; + + } + + } +} /* USER CODE END 4 */ diff --git a/stm32f1xx_it.c b/stm32f1xx_it.c index 1ec5672..98f4931 100644 --- a/stm32f1xx_it.c +++ b/stm32f1xx_it.c @@ -22,6 +22,7 @@ #include "stm32f1xx_it.h" /* Private includes ----------------------------------------------------------*/ /* USER CODE BEGIN Includes */ +#include "usart.h" /* USER CODE END Includes */ /* Private typedef -----------------------------------------------------------*/ @@ -41,7 +42,8 @@ /* Private variables ---------------------------------------------------------*/ /* USER CODE BEGIN PV */ - +extern uint8_t receiveBuffer[BUFFER_SIZE]; +extern uint8_t transmitBuffer[BUFFER_SIZE]; /* USER CODE END PV */ /* Private function prototypes -----------------------------------------------*/ @@ -201,21 +203,6 @@ void SysTick_Handler(void) /* please refer to the startup file (startup_stm32f1xx.s). */ /******************************************************************************/ -/** - * @brief This function handles EXTI line3 interrupt. - */ -void EXTI3_IRQHandler(void) -{ - /* USER CODE BEGIN EXTI3_IRQn 0 */ - - /* USER CODE END EXTI3_IRQn 0 */ - HAL_GPIO_EXTI_IRQHandler(PWM_CTRL_Pin); - - /* USER CODE BEGIN EXTI3_IRQn 1 */ - - /* USER CODE END EXTI3_IRQn 1 */ -} - /** * @brief This function handles TIM1 update interrupt. */ diff --git a/tim.c b/tim.c index e9343c7..e641dde 100644 --- a/tim.c +++ b/tim.c @@ -88,14 +88,15 @@ void MX_TIM2_Init(void) TIM_ClockConfigTypeDef sClockSourceConfig = {0}; TIM_MasterConfigTypeDef sMasterConfig = {0}; TIM_OC_InitTypeDef sConfigOC = {0}; + TIM_IC_InitTypeDef sConfigIC = {0}; /* USER CODE BEGIN TIM2_Init 1 */ /* USER CODE END TIM2_Init 1 */ htim2.Instance = TIM2; - htim2.Init.Prescaler = 41999; + htim2.Init.Prescaler = 71; htim2.Init.CounterMode = TIM_COUNTERMODE_UP; - htim2.Init.Period = 1000; + htim2.Init.Period = 30000; htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; if (HAL_TIM_Base_Init(&htim2) != HAL_OK) @@ -111,6 +112,10 @@ void MX_TIM2_Init(void) { Error_Handler(); } + if (HAL_TIM_IC_Init(&htim2) != HAL_OK) + { + Error_Handler(); + } sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK) @@ -121,11 +126,26 @@ void MX_TIM2_Init(void) sConfigOC.Pulse = 0; sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; + if (HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_1) != HAL_OK) + { + Error_Handler(); + } if (HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_2) != HAL_OK) { Error_Handler(); } - if (HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_3) != HAL_OK) + sConfigIC.ICPolarity = TIM_INPUTCHANNELPOLARITY_FALLING; + sConfigIC.ICSelection = TIM_ICSELECTION_INDIRECTTI; + sConfigIC.ICPrescaler = TIM_ICPSC_DIV1; + sConfigIC.ICFilter = 0; + if (HAL_TIM_IC_ConfigChannel(&htim2, &sConfigIC, TIM_CHANNEL_3) != HAL_OK) + { + Error_Handler(); + } + sConfigIC.ICPolarity = TIM_INPUTCHANNELPOLARITY_RISING; + sConfigIC.ICSelection = TIM_ICSELECTION_DIRECTTI; + sConfigIC.ICFilter = 0; + if (HAL_TIM_IC_ConfigChannel(&htim2, &sConfigIC, TIM_CHANNEL_4) != HAL_OK) { Error_Handler(); } @@ -212,6 +232,10 @@ void MX_TIM4_Init(void) } /* USER CODE BEGIN TIM4_Init 2 */ + + + + /* USER CODE END TIM4_Init 2 */ } @@ -219,6 +243,7 @@ void MX_TIM4_Init(void) void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* tim_baseHandle) { + GPIO_InitTypeDef GPIO_InitStruct = {0}; if(tim_baseHandle->Instance==TIM1) { /* USER CODE BEGIN TIM1_MspInit 0 */ @@ -244,6 +269,15 @@ void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* tim_baseHandle) /* TIM2 clock enable */ __HAL_RCC_TIM2_CLK_ENABLE(); + __HAL_RCC_GPIOA_CLK_ENABLE(); + /**TIM2 GPIO Configuration + PA3 ------> TIM2_CH4 + */ + GPIO_InitStruct.Pin = PWM_CTRL_Pin; + GPIO_InitStruct.Mode = GPIO_MODE_INPUT; + GPIO_InitStruct.Pull = GPIO_NOPULL; + HAL_GPIO_Init(PWM_CTRL_GPIO_Port, &GPIO_InitStruct); + /* TIM2 interrupt Init */ HAL_NVIC_SetPriority(TIM2_IRQn, 0, 0); HAL_NVIC_EnableIRQ(TIM2_IRQn); @@ -286,10 +320,10 @@ void HAL_TIM_MspPostInit(TIM_HandleTypeDef* timHandle) __HAL_RCC_GPIOA_CLK_ENABLE(); /**TIM2 GPIO Configuration + PA0-WKUP ------> TIM2_CH1 PA1 ------> TIM2_CH2 - PA2 ------> TIM2_CH3 */ - GPIO_InitStruct.Pin = GPIO_PIN_1|GPIO_PIN_2; + GPIO_InitStruct.Pin = STARTER_PWM_Pin|PLUG_PWM_Pin; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); @@ -327,6 +361,13 @@ void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef* tim_baseHandle) /* Peripheral clock disable */ __HAL_RCC_TIM2_CLK_DISABLE(); + /**TIM2 GPIO Configuration + PA0-WKUP ------> TIM2_CH1 + PA1 ------> TIM2_CH2 + PA3 ------> TIM2_CH4 + */ + HAL_GPIO_DeInit(GPIOA, STARTER_PWM_Pin|PLUG_PWM_Pin|PWM_CTRL_Pin); + /* TIM2 interrupt Deinit */ HAL_NVIC_DisableIRQ(TIM2_IRQn); /* USER CODE BEGIN TIM2_MspDeInit 1 */