/* USER CODE BEGIN Header */
/**
******************************************************************************
* @file : main.c
* @brief : Main program body
******************************************************************************
* @attention
*
*
© Copyright (c) 2019 STMicroelectronics.
* All rights reserved.
*
* This software component is licensed by ST under BSD 3-Clause license,
* 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/BSD-3-Clause
*
******************************************************************************
*/
/* USER CODE END Header */
/* Includes ------------------------------------------------------------------*/
#include "main.h"
#include "cmsis_os.h"
#include "adc.h"
#include "can.h"
#include "crc.h"
#include "dma.h"
#include "iwdg.h"
#include "rtc.h"
#include "tim.h"
#include "usart.h"
#include "gpio.h"
/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
#include "usart.h"
#include "sine.h"
#include "flash_if.h"
/* USER CODE END Includes */
/* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN PTD */
/* USER CODE END PTD */
/* Private define ------------------------------------------------------------*/
/* USER CODE BEGIN PD */
/* USER CODE END PD */
/* Private macro -------------------------------------------------------------*/
/* USER CODE BEGIN PM */
/* USER CODE END PM */
/* Private variables ---------------------------------------------------------*/
/* USER CODE BEGIN PV */
/* USER CODE END PV */
/* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
void MX_FREERTOS_Init(void);
/* USER CODE BEGIN PFP */
#ifdef __GNUC__
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif
PUTCHAR_PROTOTYPE
{
HAL_UART_Transmit(&DEBUG_USART , (uint8_t *)&ch, 1, 0xFFFF);
return ch;
}
/* USER CODE END PFP */
/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */
uint16_t serial_n;
//const uint16_t nRPM_Tbl[11][2] ={ {0,0}, {10,1800}, {20,2400}, {30,3000}, {40,3800}, {50,4300}, {60,4800}, {70,5300}, {80,5600}, {90,5940}, {100,6200} };
struct MODULE_INFO Module_Info;
RLY_ST RelayStatus;
struct COUNTER Counter;
struct OP_FLAG OpFlag;
SF_test sf_t;
struct EXT_inupt Exti;
float Avg_offset_v ;
uint16_t Freq_CLC_Grid_v ;
uint8_t bGfd_Correct[2];
uint32_t nGfd_Temp[2][17];
uint32_t R_GFD_Total[2];
uint8_t nGfd_Idx[2];
uint8_t nGun;
uint16_t pwmVal;
uint8_t dir ;
uint8_t bRelayFeedback;
uint8_t nBoard_Addr;
float c_vadc[2];
bool GainCaliFlag;
uint8_t EXTI_SMR1_Count;
uint8_t EXTI_SMR2_Count;
uint8_t EXTI_SMR3_Count;
uint8_t EXTI_SMR4_Count;
uint8_t EXTI_SMR5_Count;
uint8_t EXTI_SMR6_Count;
uint8_t EXTI_Test_Count;
uint8_t EXTI_TestFlag1;
uint8_t EXTI_TestFlag2;
uint8_t EXTI_TestFlag3;
uint8_t EXTI_TestFlag4;
uint8_t EXTI_TestFlag5;
uint8_t EXTI_TestFlag6;
uint8_t temp1,temp2,temp3,temp4;
float temp5,temp6,temp7,temp8;
/* USER CODE END 0 */
/**
* @brief The application entry point.
* @retval int
*/
int main(void)
{
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* USER CODE BEGIN Init */
memset(&Module_Info, 0x00, sizeof(struct MODULE_INFO));
memset(&Counter, 0x00, sizeof(struct COUNTER));
memset(&OpFlag, 0x00, sizeof(struct OP_FLAG));
serial_n = 0;
bGfd_Correct[0] = bGfd_Correct[1] = 0;
bRelayFeedback = 0;
for (int i=0; i<2; i++)
{
nGfd_Idx[i] = 0;
for (int j=0; j 200){
if(GPIO_Pin == GPIO_PIN_0){
// Disable SMR1 DC Output.
Exti.EXTI_SMR1_Flag = true;
HAL_GPIO_WritePin(SMR1_RLY_n_Enable_GPIO_Port, SMR1_RLY_n_Enable_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(SMR1_RLY_p_Enable_GPIO_Port, SMR1_RLY_p_Enable_Pin, GPIO_PIN_RESET);
printf(" SMR1 Relay Off, SMR1 Voltage = %d \n\r", Module_Info.SMR1_Relay_V);
HAL_Delay(50);
}
}
if(Module_Info.SMR2_Relay_V > 200){
if(GPIO_Pin == GPIO_PIN_1){
// Disable SMR2 DC Output.
Exti.EXTI_SMR2_Flag = true;
HAL_GPIO_WritePin(SMR2_RLY_n_Enable_GPIO_Port, SMR2_RLY_n_Enable_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(SMR2_RLY_p_Enable_GPIO_Port, SMR2_RLY_p_Enable_Pin, GPIO_PIN_RESET);
printf(" SMR2 Relay Off, SMR2 Voltage = %d \n\r", Module_Info.SMR2_Relay_V);
HAL_Delay(50);
}
}
if(Module_Info.SMR3_Relay_V > 200){
if(GPIO_Pin == GPIO_PIN_2){
// Disable SMR3 DC Output.
Exti.EXTI_SMR3_Flag = true;
HAL_GPIO_WritePin(SMR3_RLY_n_Enable_GPIO_Port, SMR3_RLY_n_Enable_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(SMR3_RLY_p_Enable_GPIO_Port, SMR3_RLY_p_Enable_Pin, GPIO_PIN_RESET);
printf(" SMR3 Relay Off, SMR2 Voltage = %d \n\r", Module_Info.SMR3_Relay_V);
HAL_Delay(50);
}
}
if(Module_Info.SMR4_Relay_V > 200){
if(GPIO_Pin == GPIO_PIN_3){
// Disable SMR4 DC Output.
Exti.EXTI_SMR4_Flag = true;
HAL_GPIO_WritePin(SMR4_RLY_n_Enable_GPIO_Port, SMR4_RLY_n_Enable_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(SMR4_RLY_p_Enable_GPIO_Port, SMR4_RLY_p_Enable_Pin, GPIO_PIN_RESET);
printf(" SMR2 Relay Off, SMR4 Voltage = %d \n\r", Module_Info.SMR4_Relay_V);
HAL_Delay(50);
}
}
if(Module_Info.SMR5_Relay_V > 200){
if(GPIO_Pin == GPIO_PIN_4){
// Disable SMR5 DC Output.
Exti.EXTI_SMR5_Flag = true;
HAL_GPIO_WritePin(SMR5_RLY_n_Enable_GPIO_Port, SMR5_RLY_n_Enable_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(SMR5_RLY_p_Enable_GPIO_Port, SMR5_RLY_p_Enable_Pin, GPIO_PIN_RESET);
printf(" SMR5 Relay Off, SMR2 Voltage = %d \n\r", Module_Info.SMR5_Relay_V);
HAL_Delay(50);
}
}
if(Module_Info.SMR6_Relay_V > 200){
if(GPIO_Pin == GPIO_PIN_5){
// Disable SMR6 DC Output.
Exti.EXTI_SMR6_Flag = true;
HAL_GPIO_WritePin(SMR6_RLY_n_Enable_GPIO_Port, SMR6_RLY_n_Enable_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(SMR6_RLY_p_Enable_GPIO_Port, SMR6_RLY_p_Enable_Pin, GPIO_PIN_RESET);
printf(" SMR6 Relay Off, SMR2 Voltage = %d \n\r", Module_Info.SMR6_Relay_V);
HAL_Delay(50);
}
}
}
}
// void ConfigFliter(void)
// {
// CAN_FilterTypeDef sFilterConfig;
// sFilterConfig.FilterBank = 0;
// sFilterConfig.FilterMode = CAN_FILTERMODE_IDMASK;
// sFilterConfig.FilterScale = CAN_FILTERSCALE_32BIT;
// sFilterConfig.FilterIdHigh = 0x0000;
// sFilterConfig.FilterIdLow = 0x0000;
// sFilterConfig.FilterMaskIdHigh = 0x0000;
// sFilterConfig.FilterMaskIdLow = 0x0000;
// sFilterConfig.FilterFIFOAssignment = CAN_RX_FIFO0;
// sFilterConfig.FilterActivation = ENABLE;
// sFilterConfig.SlaveStartFilterBank = 0;
// if (HAL_CAN_ConfigFilter(&hcan1, &sFilterConfig) != HAL_OK)
// {
// Error_Handler();
// }
// }
/* USER CODE END 4 */
/**
* @brief Period elapsed callback in non blocking mode
* @note This function is called when TIM7 interrupt took place, inside
* HAL_TIM_IRQHandler(). It makes a direct call to HAL_IncTick() to increment
* a global variable "uwTick" used as application time base.
* @param htim : TIM handle
* @retval None
*/
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
/* USER CODE BEGIN Callback 0 */
/* USER CODE END Callback 0 */
if (htim->Instance == TIM7) {
HAL_IncTick();
}
/* USER CODE BEGIN Callback 1 */
if (htim->Instance==TIM3) // 100ms
{
if(Exti.EXTI_SMR1_Flag && EXTI_SMR1_Count < 50)
EXTI_SMR1_Count ++;
if(Exti.EXTI_SMR2_Flag && EXTI_SMR2_Count < 50)
EXTI_SMR2_Count ++;
if(Exti.EXTI_SMR3_Flag && EXTI_SMR3_Count < 50)
EXTI_SMR3_Count ++;
if(Exti.EXTI_SMR4_Flag && EXTI_SMR4_Count < 50)
EXTI_SMR4_Count ++;
if(Exti.EXTI_SMR5_Flag && EXTI_SMR5_Count < 50)
EXTI_SMR5_Count ++;
if(Exti.EXTI_SMR6_Flag && EXTI_SMR6_Count < 50)
EXTI_SMR6_Count ++;
}
/* USER CODE END Callback 1 */
}
/**
* @brief This function is executed in case of error occurrence.
* @retval None
*/
void Error_Handler(void)
{
/* USER CODE BEGIN Error_Handler_Debug */
/* User can add his own implementation to report the HAL error return state */
/* USER CODE END Error_Handler_Debug */
}
#ifdef USE_FULL_ASSERT
/**
* @brief Reports the name of the source file and the source line number
* where the assert_param error has occurred.
* @param file: pointer to the source file name
* @param line: assert_param error line source number
* @retval None
*/
void assert_failed(uint8_t *file, uint32_t line)
{
/* USER CODE BEGIN 6 */
/* User can add his own implementation to report the file name and line number,
tex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
/* USER CODE END 6 */
}
#endif /* USE_FULL_ASSERT */