main.c.bak 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545
  1. /* USER CODE BEGIN Header */
  2. /**
  3. ******************************************************************************
  4. * @file : main.c
  5. * @brief : Main program body
  6. ******************************************************************************
  7. * @attention
  8. *
  9. * <h2><center>&copy; Copyright (c) 2019 STMicroelectronics.
  10. * All rights reserved.</center></h2>
  11. *
  12. * This software component is licensed by ST under BSD 3-Clause license,
  13. * the "License"; You may not use this file except in compliance with the
  14. * License. You may obtain a copy of the License at:
  15. * opensource.org/licenses/BSD-3-Clause
  16. *
  17. ******************************************************************************
  18. */
  19. /* USER CODE END Header */
  20. /* Includes ------------------------------------------------------------------*/
  21. #include "main.h"
  22. #include "cmsis_os.h"
  23. #include "adc.h"
  24. #include "can.h"
  25. #include "crc.h"
  26. #include "dma.h"
  27. #include "iwdg.h"
  28. #include "rtc.h"
  29. #include "tim.h"
  30. #include "usart.h"
  31. #include "gpio.h"
  32. /* Private includes ----------------------------------------------------------*/
  33. /* USER CODE BEGIN Includes */
  34. #include "usart.h"
  35. #include "sine.h"
  36. #include "flash_if.h"
  37. /* USER CODE END Includes */
  38. /* Private typedef -----------------------------------------------------------*/
  39. /* USER CODE BEGIN PTD */
  40. /* USER CODE END PTD */
  41. /* Private define ------------------------------------------------------------*/
  42. /* USER CODE BEGIN PD */
  43. /* USER CODE END PD */
  44. /* Private macro -------------------------------------------------------------*/
  45. /* USER CODE BEGIN PM */
  46. /* USER CODE END PM */
  47. /* Private variables ---------------------------------------------------------*/
  48. /* USER CODE BEGIN PV */
  49. /* USER CODE END PV */
  50. /* Private function prototypes -----------------------------------------------*/
  51. void SystemClock_Config(void);
  52. void MX_FREERTOS_Init(void);
  53. /* USER CODE BEGIN PFP */
  54. #ifdef __GNUC__
  55. #define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
  56. #else
  57. #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
  58. #endif
  59. PUTCHAR_PROTOTYPE
  60. {
  61. HAL_UART_Transmit(&DEBUG_USART , (uint8_t *)&ch, 1, 0xFFFF);
  62. return ch;
  63. }
  64. /* USER CODE END PFP */
  65. /* Private user code ---------------------------------------------------------*/
  66. /* USER CODE BEGIN 0 */
  67. uint16_t serial_n;
  68. //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} };
  69. struct MODULE_INFO Module_Info;
  70. RLY_ST RelayStatus;
  71. struct COUNTER Counter;
  72. struct OP_FLAG OpFlag;
  73. SF_test sf_t;
  74. struct EXT_inupt Exti;
  75. float Avg_offset_v ;
  76. uint16_t Freq_CLC_Grid_v ;
  77. uint8_t bGfd_Correct[2];
  78. uint32_t nGfd_Temp[2][17];
  79. uint32_t R_GFD_Total[2];
  80. uint8_t nGfd_Idx[2];
  81. uint8_t nGun;
  82. uint16_t pwmVal;
  83. uint8_t dir ;
  84. uint8_t bRelayFeedback;
  85. uint8_t nBoard_Addr;
  86. float c_vadc[2];
  87. bool GainCaliFlag;
  88. uint8_t EXTI_SMR1_Count;
  89. uint8_t EXTI_SMR2_Count;
  90. uint8_t EXTI_SMR3_Count;
  91. uint8_t EXTI_SMR4_Count;
  92. uint8_t EXTI_SMR5_Count;
  93. uint8_t EXTI_SMR6_Count;
  94. uint8_t EXTI_Test_Count;
  95. uint8_t EXTI_TestFlag1;
  96. uint8_t EXTI_TestFlag2;
  97. uint8_t EXTI_TestFlag3;
  98. uint8_t EXTI_TestFlag4;
  99. uint8_t EXTI_TestFlag5;
  100. uint8_t EXTI_TestFlag6;
  101. uint8_t temp1,temp2,temp3,temp4;
  102. float temp5,temp6,temp7,temp8;
  103. /* USER CODE END 0 */
  104. /**
  105. * @brief The application entry point.
  106. * @retval int
  107. */
  108. int main(void)
  109. {
  110. /* USER CODE BEGIN 1 */
  111. /* USER CODE END 1 */
  112. /* MCU Configuration--------------------------------------------------------*/
  113. /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  114. HAL_Init();
  115. /* USER CODE BEGIN Init */
  116. memset(&Module_Info, 0x00, sizeof(struct MODULE_INFO));
  117. memset(&Counter, 0x00, sizeof(struct COUNTER));
  118. memset(&OpFlag, 0x00, sizeof(struct OP_FLAG));
  119. serial_n = 0;
  120. bGfd_Correct[0] = bGfd_Correct[1] = 0;
  121. bRelayFeedback = 0;
  122. for (int i=0; i<2; i++)
  123. {
  124. nGfd_Idx[i] = 0;
  125. for (int j=0; j<GFD_FILTER_LIMIT; j++)
  126. {
  127. nGfd_Temp[i][j] = 0;
  128. }
  129. }
  130. sf_t.SF_Config.data.value = 0;
  131. sf_t.SF_Config.SF_test_status = 2; // Wait for result.
  132. sf_t.SF_Config.SF_Act = 0;
  133. sf_t.SF_Config.SF_State = 0;
  134. pwmVal = 0;
  135. dir = 0;
  136. nBoard_Addr = 0x03; // default old relay board
  137. /* USER CODE END Init */
  138. /* Configure the system clock */
  139. SystemClock_Config();
  140. /* USER CODE BEGIN SysInit */
  141. /* USER CODE END SysInit */
  142. /* Initialize all configured peripherals */
  143. MX_GPIO_Init();
  144. MX_DMA_Init();
  145. MX_RTC_Init();
  146. MX_USART1_UART_Init();
  147. MX_ADC1_Init();
  148. MX_ADC3_Init();
  149. MX_ADC2_Init();
  150. MX_TIM2_Init();
  151. MX_TIM5_Init();
  152. MX_IWDG_Init();
  153. MX_CRC_Init();
  154. MX_TIM3_Init();
  155. MX_USART6_UART_Init();
  156. MX_TIM4_Init();
  157. MX_CAN1_Init();
  158. /* USER CODE BEGIN 2 */
  159. HAL_TIM_PWM_Start(&htim4,TIM_CHANNEL_2); // Led1
  160. HAL_TIM_IC_Start_IT(&htim2,TIM_CHANNEL_2);
  161. HAL_TIM_PWM_Start(&htim5, TIM_CHANNEL_3);
  162. HAL_TIM_Base_Start_IT(&htim3);
  163. // //Can Filter
  164. // ConfigFliter();
  165. // if(HAL_CAN_Start(&hcan1) != HAL_OK)
  166. // {
  167. // Error_Handler();
  168. // }
  169. // //Enable Rx receice
  170. // HAL_CAN_ActivateNotification(&hcan1, CAN_IT_RX_FIFO0_MSG_PENDING);
  171. HAL_ADC_Start_DMA(&hadc1, ADC1_Buf, (ADC1_CHANEL_COUNT * ADC1_SAMPLE_COUNT)); // start adc in DMA mode
  172. HAL_ADC_Start_DMA(&hadc2, ADC2_Buf, (ADC2_SAMPLE_COUNT * ADC2_CHANEL_COUNT)); // start adc in DMA mode
  173. HAL_ADC_Start_DMA(&hadc3, ADC3_Buf, (ADC3_CHANEL_COUNT * ADC3_SAMPLE_COUNT)); // start adc in DMA mode
  174. HAL_UART_Receive_DMA(&huart1, uart_rx_buffer, UART_BUFFER_SIZE);
  175. __HAL_UART_ENABLE_IT(&huart1, UART_IT_IDLE);
  176. // Relay IO Reset All ....
  177. HAL_GPIO_WritePin(SMR1_RLY_n_Enable_GPIO_Port, SMR1_RLY_n_Enable_Pin, GPIO_PIN_RESET);
  178. HAL_GPIO_WritePin(SMR1_RLY_p_Enable_GPIO_Port, SMR1_RLY_p_Enable_Pin, GPIO_PIN_RESET);
  179. HAL_GPIO_WritePin(SMR2_RLY_n_Enable_GPIO_Port, SMR2_RLY_n_Enable_Pin, GPIO_PIN_RESET);
  180. HAL_GPIO_WritePin(SMR2_RLY_p_Enable_GPIO_Port, SMR2_RLY_p_Enable_Pin, GPIO_PIN_RESET);
  181. HAL_GPIO_WritePin(SMR3_RLY_n_Enable_GPIO_Port, SMR3_RLY_n_Enable_Pin, GPIO_PIN_RESET);
  182. HAL_GPIO_WritePin(SMR3_RLY_p_Enable_GPIO_Port, SMR3_RLY_p_Enable_Pin, GPIO_PIN_RESET);
  183. HAL_GPIO_WritePin(SMR4_RLY_n_Enable_GPIO_Port, SMR4_RLY_n_Enable_Pin, GPIO_PIN_RESET);
  184. HAL_GPIO_WritePin(SMR4_RLY_p_Enable_GPIO_Port, SMR4_RLY_p_Enable_Pin, GPIO_PIN_RESET);
  185. HAL_GPIO_WritePin(SMR5_RLY_n_Enable_GPIO_Port, SMR5_RLY_n_Enable_Pin, GPIO_PIN_RESET);
  186. HAL_GPIO_WritePin(SMR5_RLY_p_Enable_GPIO_Port, SMR5_RLY_p_Enable_Pin, GPIO_PIN_RESET);
  187. HAL_GPIO_WritePin(SMR6_RLY_n_Enable_GPIO_Port, SMR6_RLY_n_Enable_Pin, GPIO_PIN_RESET);
  188. HAL_GPIO_WritePin(SMR6_RLY_p_Enable_GPIO_Port, SMR6_RLY_p_Enable_Pin, GPIO_PIN_RESET);
  189. HAL_GPIO_WritePin(Contactor_Enable_GPIO_Port, Contactor_Enable_Pin, GPIO_PIN_RESET);
  190. HAL_GPIO_WritePin(PSU_Enable1_GPIO_Port, PSU_Enable1_Pin, GPIO_PIN_RESET); // no used
  191. HAL_GPIO_WritePin(PSU_Enable2_GPIO_Port, PSU_Enable2_Pin, GPIO_PIN_RESET); // no used
  192. //LED2,LED3 OFF
  193. HAL_GPIO_WritePin(LED2_GPIO_Port, LED2_Pin, GPIO_PIN_SET);
  194. HAL_GPIO_WritePin(LED3_GPIO_Port, LED3_Pin, GPIO_PIN_SET);
  195. FLASH_If_Init();
  196. #if (RELAY_ALL_ON == 1)
  197. OpFlag.bRelay_Config_Change = ON;
  198. Module_Info.Relay_IO.flags.Parallel_relay_n = ON;
  199. Module_Info.Relay_IO.flags.Parallel_relay_2n = ON;
  200. Module_Info.Relay_IO.flags.SMR1_relay_n = ON;
  201. Module_Info.Relay_IO.flags.SMR1_relay_p = ON;
  202. Module_Info.Relay_IO.flags.SMR2_relay_n = ON;
  203. Module_Info.Relay_IO.flags.SMR2_relay_p = ON;
  204. Module_Info.Relay_IO.flags.AC_Contactor = ON;
  205. Module_Info.Relay_IO.flags.Precharge = ON;
  206. #endif
  207. // Read board Dip address and redefine address
  208. Module_Info.Dip_status.flags.SW2 =~HAL_GPIO_ReadPin(SW2_GPIO_Port, SW2_Pin); // SW_2
  209. Module_Info.Dip_status.flags.SW0 =~HAL_GPIO_ReadPin(SW1_GPIO_Port, SW1_Pin); // SW_1
  210. Module_Info.Dip_status.flags.SW1 =~HAL_GPIO_ReadPin(SW0_GPIO_Port, SW0_Pin); // SW_0
  211. switch(Module_Info.Dip_status.Mode)
  212. {
  213. case 01:
  214. nBoard_Addr = MainRelay;
  215. break;
  216. case 03:
  217. nBoard_Addr = GunRelay;
  218. break;
  219. case 04:
  220. nBoard_Addr = MainBridge1;
  221. break;
  222. case 05:
  223. nBoard_Addr = MainBridge2;
  224. break;
  225. case 06:
  226. nBoard_Addr = MainBridge3;
  227. break;
  228. default:
  229. nBoard_Addr = 0xFF;
  230. break;
  231. }
  232. //Module_Info.Dip_status.Mode = m_ALL;
  233. /* USER CODE END 2 */
  234. /* Call init function for freertos objects (in freertos.c) */
  235. MX_FREERTOS_Init();
  236. /* Start scheduler */
  237. osKernelStart();
  238. /* We should never get here as control is now taken by the scheduler */
  239. /* Infinite loop */
  240. /* USER CODE BEGIN WHILE */
  241. while (1)
  242. {
  243. /* USER CODE END WHILE */
  244. /* USER CODE BEGIN 3 */
  245. }
  246. /* USER CODE END 3 */
  247. }
  248. /**
  249. * @brief System Clock Configuration
  250. * @retval None
  251. */
  252. void SystemClock_Config(void)
  253. {
  254. RCC_OscInitTypeDef RCC_OscInitStruct = {0};
  255. RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
  256. /** Configure the main internal regulator output voltage
  257. */
  258. __HAL_RCC_PWR_CLK_ENABLE();
  259. __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
  260. /** Initializes the RCC Oscillators according to the specified parameters
  261. * in the RCC_OscInitTypeDef structure.
  262. */
  263. RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_LSI|RCC_OSCILLATORTYPE_HSE
  264. |RCC_OSCILLATORTYPE_LSE;
  265. RCC_OscInitStruct.HSEState = RCC_HSE_ON;
  266. RCC_OscInitStruct.LSEState = RCC_LSE_ON;
  267. RCC_OscInitStruct.LSIState = RCC_LSI_ON;
  268. RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  269. RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
  270. RCC_OscInitStruct.PLL.PLLM = 25;
  271. RCC_OscInitStruct.PLL.PLLN = 336;
  272. RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
  273. RCC_OscInitStruct.PLL.PLLQ = 4;
  274. if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
  275. {
  276. Error_Handler();
  277. }
  278. /** Initializes the CPU, AHB and APB buses clocks
  279. */
  280. RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
  281. |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
  282. RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
  283. RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  284. RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4;
  285. RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV4;
  286. if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5) != HAL_OK)
  287. {
  288. Error_Handler();
  289. }
  290. }
  291. /* USER CODE BEGIN 4 */
  292. void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
  293. {
  294. // Sure in the charging state.
  295. if (sf_t.SF_Config.SF_Act){
  296. if(GPIO_Pin == GPIO_PIN_0){
  297. printf("SMR1 OFF\r\n");
  298. EXTI_TestFlag1 = 1;
  299. }
  300. if(GPIO_Pin == GPIO_PIN_1){
  301. printf("SMR2 OFF\r\n");
  302. EXTI_TestFlag2 = 1;
  303. }
  304. if(GPIO_Pin == GPIO_PIN_2){
  305. printf("SMR3 OFF\r\n");
  306. EXTI_TestFlag3 = 1;
  307. }
  308. if(GPIO_Pin == GPIO_PIN_3){
  309. printf("SMR4 OFF\r\n");
  310. EXTI_TestFlag4 = 1;
  311. }
  312. if(GPIO_Pin == GPIO_PIN_4){
  313. printf("SMR5 OFF\r\n");
  314. EXTI_TestFlag5 = 1;
  315. }
  316. if(GPIO_Pin == GPIO_PIN_5){
  317. printf("SMR6 OFF\r\n");
  318. EXTI_TestFlag6 = 1;
  319. }
  320. }else{
  321. if(Module_Info.SMR1_Relay_V > 200){
  322. if(GPIO_Pin == GPIO_PIN_0){
  323. // Disable SMR1 DC Output.
  324. Exti.EXTI_SMR1_Flag = true;
  325. HAL_GPIO_WritePin(SMR1_RLY_n_Enable_GPIO_Port, SMR1_RLY_n_Enable_Pin, GPIO_PIN_RESET);
  326. HAL_GPIO_WritePin(SMR1_RLY_p_Enable_GPIO_Port, SMR1_RLY_p_Enable_Pin, GPIO_PIN_RESET);
  327. printf(" SMR1 Relay Off, SMR1 Voltage = %d \n\r", Module_Info.SMR1_Relay_V);
  328. HAL_Delay(50);
  329. }
  330. }
  331. if(Module_Info.SMR2_Relay_V > 200){
  332. if(GPIO_Pin == GPIO_PIN_1){
  333. // Disable SMR2 DC Output.
  334. Exti.EXTI_SMR2_Flag = true;
  335. HAL_GPIO_WritePin(SMR2_RLY_n_Enable_GPIO_Port, SMR2_RLY_n_Enable_Pin, GPIO_PIN_RESET);
  336. HAL_GPIO_WritePin(SMR2_RLY_p_Enable_GPIO_Port, SMR2_RLY_p_Enable_Pin, GPIO_PIN_RESET);
  337. printf(" SMR2 Relay Off, SMR2 Voltage = %d \n\r", Module_Info.SMR2_Relay_V);
  338. HAL_Delay(50);
  339. }
  340. }
  341. if(Module_Info.SMR3_Relay_V > 200){
  342. if(GPIO_Pin == GPIO_PIN_2){
  343. // Disable SMR3 DC Output.
  344. Exti.EXTI_SMR3_Flag = true;
  345. HAL_GPIO_WritePin(SMR3_RLY_n_Enable_GPIO_Port, SMR3_RLY_n_Enable_Pin, GPIO_PIN_RESET);
  346. HAL_GPIO_WritePin(SMR3_RLY_p_Enable_GPIO_Port, SMR3_RLY_p_Enable_Pin, GPIO_PIN_RESET);
  347. printf(" SMR3 Relay Off, SMR2 Voltage = %d \n\r", Module_Info.SMR3_Relay_V);
  348. HAL_Delay(50);
  349. }
  350. }
  351. if(Module_Info.SMR4_Relay_V > 200){
  352. if(GPIO_Pin == GPIO_PIN_3){
  353. // Disable SMR4 DC Output.
  354. Exti.EXTI_SMR4_Flag = true;
  355. HAL_GPIO_WritePin(SMR4_RLY_n_Enable_GPIO_Port, SMR4_RLY_n_Enable_Pin, GPIO_PIN_RESET);
  356. HAL_GPIO_WritePin(SMR4_RLY_p_Enable_GPIO_Port, SMR4_RLY_p_Enable_Pin, GPIO_PIN_RESET);
  357. printf(" SMR2 Relay Off, SMR4 Voltage = %d \n\r", Module_Info.SMR4_Relay_V);
  358. HAL_Delay(50);
  359. }
  360. }
  361. if(Module_Info.SMR5_Relay_V > 200){
  362. if(GPIO_Pin == GPIO_PIN_4){
  363. // Disable SMR5 DC Output.
  364. Exti.EXTI_SMR5_Flag = true;
  365. HAL_GPIO_WritePin(SMR5_RLY_n_Enable_GPIO_Port, SMR5_RLY_n_Enable_Pin, GPIO_PIN_RESET);
  366. HAL_GPIO_WritePin(SMR5_RLY_p_Enable_GPIO_Port, SMR5_RLY_p_Enable_Pin, GPIO_PIN_RESET);
  367. printf(" SMR5 Relay Off, SMR2 Voltage = %d \n\r", Module_Info.SMR5_Relay_V);
  368. HAL_Delay(50);
  369. }
  370. }
  371. if(Module_Info.SMR6_Relay_V > 200){
  372. if(GPIO_Pin == GPIO_PIN_5){
  373. // Disable SMR6 DC Output.
  374. Exti.EXTI_SMR6_Flag = true;
  375. HAL_GPIO_WritePin(SMR6_RLY_n_Enable_GPIO_Port, SMR6_RLY_n_Enable_Pin, GPIO_PIN_RESET);
  376. HAL_GPIO_WritePin(SMR6_RLY_p_Enable_GPIO_Port, SMR6_RLY_p_Enable_Pin, GPIO_PIN_RESET);
  377. printf(" SMR6 Relay Off, SMR2 Voltage = %d \n\r", Module_Info.SMR6_Relay_V);
  378. HAL_Delay(50);
  379. }
  380. }
  381. }
  382. }
  383. // void ConfigFliter(void)
  384. // {
  385. // CAN_FilterTypeDef sFilterConfig;
  386. // sFilterConfig.FilterBank = 0;
  387. // sFilterConfig.FilterMode = CAN_FILTERMODE_IDMASK;
  388. // sFilterConfig.FilterScale = CAN_FILTERSCALE_32BIT;
  389. // sFilterConfig.FilterIdHigh = 0x0000;
  390. // sFilterConfig.FilterIdLow = 0x0000;
  391. // sFilterConfig.FilterMaskIdHigh = 0x0000;
  392. // sFilterConfig.FilterMaskIdLow = 0x0000;
  393. // sFilterConfig.FilterFIFOAssignment = CAN_RX_FIFO0;
  394. // sFilterConfig.FilterActivation = ENABLE;
  395. // sFilterConfig.SlaveStartFilterBank = 0;
  396. // if (HAL_CAN_ConfigFilter(&hcan1, &sFilterConfig) != HAL_OK)
  397. // {
  398. // Error_Handler();
  399. // }
  400. // }
  401. /* USER CODE END 4 */
  402. /**
  403. * @brief Period elapsed callback in non blocking mode
  404. * @note This function is called when TIM7 interrupt took place, inside
  405. * HAL_TIM_IRQHandler(). It makes a direct call to HAL_IncTick() to increment
  406. * a global variable "uwTick" used as application time base.
  407. * @param htim : TIM handle
  408. * @retval None
  409. */
  410. void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
  411. {
  412. /* USER CODE BEGIN Callback 0 */
  413. /* USER CODE END Callback 0 */
  414. if (htim->Instance == TIM7) {
  415. HAL_IncTick();
  416. }
  417. /* USER CODE BEGIN Callback 1 */
  418. if (htim->Instance==TIM3) // 100ms
  419. {
  420. if(Exti.EXTI_SMR1_Flag && EXTI_SMR1_Count < 50)
  421. EXTI_SMR1_Count ++;
  422. if(Exti.EXTI_SMR2_Flag && EXTI_SMR2_Count < 50)
  423. EXTI_SMR2_Count ++;
  424. if(Exti.EXTI_SMR3_Flag && EXTI_SMR3_Count < 50)
  425. EXTI_SMR3_Count ++;
  426. if(Exti.EXTI_SMR4_Flag && EXTI_SMR4_Count < 50)
  427. EXTI_SMR4_Count ++;
  428. if(Exti.EXTI_SMR5_Flag && EXTI_SMR5_Count < 50)
  429. EXTI_SMR5_Count ++;
  430. if(Exti.EXTI_SMR6_Flag && EXTI_SMR6_Count < 50)
  431. EXTI_SMR6_Count ++;
  432. }
  433. /* USER CODE END Callback 1 */
  434. }
  435. /**
  436. * @brief This function is executed in case of error occurrence.
  437. * @retval None
  438. */
  439. void Error_Handler(void)
  440. {
  441. /* USER CODE BEGIN Error_Handler_Debug */
  442. /* User can add his own implementation to report the HAL error return state */
  443. /* USER CODE END Error_Handler_Debug */
  444. }
  445. #ifdef USE_FULL_ASSERT
  446. /**
  447. * @brief Reports the name of the source file and the source line number
  448. * where the assert_param error has occurred.
  449. * @param file: pointer to the source file name
  450. * @param line: assert_param error line source number
  451. * @retval None
  452. */
  453. void assert_failed(uint8_t *file, uint32_t line)
  454. {
  455. /* USER CODE BEGIN 6 */
  456. /* User can add his own implementation to report the file name and line number,
  457. tex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
  458. /* USER CODE END 6 */
  459. }
  460. #endif /* USE_FULL_ASSERT */