main.c 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925
  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) 2020 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. /* Private includes ----------------------------------------------------------*/
  23. /* USER CODE BEGIN Includes */
  24. #include <stdio.h>
  25. #include "PE43711.h"
  26. #include "uart.h"
  27. #include "Bluecell_operate.h"
  28. #include "eeprom.h"
  29. /* USER CODE END Includes */
  30. /* Private typedef -----------------------------------------------------------*/
  31. /* USER CODE BEGIN PTD */
  32. /* USER CODE END PTD */
  33. /* Private define ------------------------------------------------------------*/
  34. /* USER CODE BEGIN PD */
  35. /* USER CODE END PD */
  36. /* Private macro -------------------------------------------------------------*/
  37. /* USER CODE BEGIN PM */
  38. /* USER CODE END PM */
  39. /* Private variables ---------------------------------------------------------*/
  40. ADC_HandleTypeDef hadc1;
  41. ADC_HandleTypeDef hadc3;
  42. DMA_HandleTypeDef hdma_adc1;
  43. DMA_HandleTypeDef hdma_adc3;
  44. CRC_HandleTypeDef hcrc;
  45. I2C_HandleTypeDef hi2c2;
  46. TIM_HandleTypeDef htim6;
  47. UART_HandleTypeDef huart1;
  48. UART_HandleTypeDef huart2;
  49. DMA_HandleTypeDef hdma_usart1_rx;
  50. DMA_HandleTypeDef hdma_usart1_tx;
  51. /* USER CODE BEGIN PV */
  52. volatile uint16_t ADC1value[4];
  53. volatile uint16_t ADC3value[5];
  54. volatile uint32_t ADC1_Average_value[4];
  55. volatile uint32_t ADC3_Average_value[5];
  56. volatile uint32_t AdcTimerCnt = 0;
  57. volatile uint32_t LedTimerCnt = 0;
  58. volatile uint32_t UartRxTimerCnt = 0;
  59. volatile uint32_t LDTimerCnt = 0;
  60. /* USER CODE END PV */
  61. /* Private function prototypes -----------------------------------------------*/
  62. void SystemClock_Config(void);
  63. static void MX_GPIO_Init(void);
  64. static void MX_DMA_Init(void);
  65. static void MX_USART1_UART_Init(void);
  66. static void MX_ADC1_Init(void);
  67. static void MX_ADC3_Init(void);
  68. static void MX_USART2_UART_Init(void);
  69. static void MX_TIM6_Init(void);
  70. static void MX_CRC_Init(void);
  71. static void MX_I2C2_Init(void);
  72. static void MX_NVIC_Init(void);
  73. /* USER CODE BEGIN PFP */
  74. /* USER CODE END PFP */
  75. /* Private user code ---------------------------------------------------------*/
  76. /* USER CODE BEGIN 0 */
  77. void Pol_Delay_us(volatile uint32_t microseconds)
  78. {
  79. /* Go to number of cycles for system */
  80. microseconds *= (SystemCoreClock / 1000000);
  81. /* Delay till end */
  82. while (microseconds--);
  83. }
  84. int _write (int file, uint8_t *ptr, uint16_t len)
  85. {
  86. HAL_UART_Transmit(&huart1, ptr, len,10);
  87. return len;
  88. }
  89. uint8_t adc1cnt = 0 ;
  90. uint8_t adc3cnt = 0 ;
  91. void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)
  92. {
  93. //?��?��?�� 코드 ?��?��
  94. //만약 ?��?�� adc?���?? �???��?�� ?�� ?��?���?? ?��?���?? ?��?��?? 같� 조건�?? ?��?��
  95. if(hadc->Instance == hadc1.Instance)
  96. {
  97. if(adc1cnt < 100){
  98. for(int i = 0; i < 4; i++){
  99. ADC1_Average_value[i] += ADC1value[i] ;
  100. }
  101. adc1cnt++;
  102. }
  103. }
  104. if(hadc->Instance == hadc3.Instance)
  105. {
  106. if(adc3cnt < 100){
  107. for(int i = 0; i < 5; i++){
  108. ADC3_Average_value[i] += ADC3value[i] ;
  109. }
  110. adc3cnt++;
  111. }
  112. }
  113. }
  114. #if 0 // PYJ.2020.04.24_BEGIN --
  115. void HAL_I2C_MspInit(I2C_HandleTypeDef* i2cHandle)
  116. {
  117. GPIO_InitTypeDef GPIO_InitStruct;
  118. if(i2cHandle->Instance==I2C1)
  119. {
  120. /* USER CODE BEGIN I2C1_MspInit 0 */
  121. __HAL_RCC_I2C1_CLK_ENABLE();
  122. /* USER CODE END I2C1_MspInit 0 */
  123. /**I2C1 GPIO Configuration
  124. PB6 ------> I2C1_SCL
  125. PB7 ------> I2C1_SDA
  126. */
  127. GPIO_InitStruct.Pin = GPIO_PIN_6|GPIO_PIN_7;
  128. GPIO_InitStruct.Mode = GPIO_MODE_AF_OD;
  129. GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
  130. HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
  131. /* Peripheral clock enable */
  132. __HAL_RCC_I2C1_CLK_ENABLE();
  133. /* USER CODE BEGIN I2C1_MspInit 1 */
  134. /* USER CODE END I2C1_MspInit 1 */
  135. }
  136. else if(i2cHandle->Instance==I2C2)
  137. {
  138. /* USER CODE BEGIN I2C2_MspInit 0 */
  139. __HAL_RCC_I2C2_CLK_ENABLE();
  140. /* USER CODE END I2C2_MspInit 0 */
  141. /**I2C2 GPIO Configuration
  142. PB10 ------> I2C2_SCL
  143. PB11 ------> I2C2_SDA
  144. */
  145. GPIO_InitStruct.Pin = GPIO_PIN_10|GPIO_PIN_11;
  146. GPIO_InitStruct.Mode = GPIO_MODE_AF_OD;
  147. GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
  148. HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
  149. /* Peripheral clock enable */
  150. __HAL_RCC_I2C2_CLK_ENABLE();
  151. /* USER CODE BEGIN I2C2_MspInit 1 */
  152. /* USER CODE END I2C2_MspInit 1 */
  153. }
  154. #endif // PYJ.2020.04.24_END --
  155. #if 0 // PYJ.2020.04.23_BEGIN --
  156. uint8_t eepdata[100];
  157. void eepromtest(){
  158. memset(&eepdata[0],0x33,100);
  159. for(int i = 0; i < 100; i ++ ){
  160. printf("data[%d] : %x \r\n",i,eepdata[i]);
  161. EEPROM_M24C08_Bytewrite(EEPROM_M24C08_ID,EEPROM_ATT_BASE + i,&eepdata[i],1);
  162. }
  163. for(int i = 0; i < 100; i ++ ){
  164. EEPROM_M24C08_ByteRead(EEPROM_M24C08_ID,EEPROM_ATT_BASE + i,&eepdata[i],1);
  165. printf("data[%d] : %x \r\n",i,eepdata[i]);
  166. }
  167. // EEPROM_M24C08_Read(EEPROM_M24C08_ID,EEPROM_ATT_BASE,&eepdata[0],100);
  168. // for(int i = 0; i < 100; i ++ ){
  169. // printf("data[%d] : %x \r\n",i,eepdata[i]);
  170. // }
  171. }
  172. uint8_t i2ctest[10] = {22,};
  173. uint8_t i2cTestData[1] = {44};
  174. #endif // PYJ.2020.04.23_END --
  175. uint8_t eepromtestarray[1024 * 3];
  176. uint8_t eepromtestReadarray[1024 * 3];
  177. uint8_t eepromtestarray1[EEPROM_WINDOW_STATUS_ADDRESDS];
  178. uint8_t eepromtestReadarray1[EEPROM_WINDOW_STATUS_ADDRESDS];
  179. #define TESTINDEX sizeof(TEMP_TABLE_st)
  180. void EEPROMTEST_J(){
  181. #if 1 // PYJ.2020.04.25_BEGIN --
  182. for(int i = 0; i< TESTINDEX; i++)
  183. eepromtestarray[i] = i;
  184. printf("Value %x\r\n",eepromtestarray[1]);
  185. // EEPROM_M24C08_write(EEPROM_M24C08_ID ,(EEPROM_TEMP_DL2_TABLE_ADDRESDS),&eepromtestarray[0],TESTINDEX);
  186. EEPROM_M24C08_write(EEPROM_M24C08_ID ,(EEPROM_TEMP_DL4_TABLE_ADDRESDS),&eepromtestarray[0],sizeof(TEMP_TABLE_st));
  187. EEPROM_M24C08_Read(EEPROM_M24C08_ID ,(EEPROM_TEMP_DL4_TABLE_ADDRESDS),&eepromtestReadarray[0],sizeof(TEMP_TABLE_st));
  188. // EEPROM_M24C08_Read(EEPROM_M24C08_ID ,(EEPROM_TEMP_DL2_TABLE_ADDRESDS),&eepromtestReadarray[0],TESTINDEX);
  189. for(int i = 0; i< TESTINDEX; i++)
  190. printf("%d ",eepromtestReadarray[i]);
  191. printf("\r\n");
  192. #endif // PYJ.2020.04.25_END --
  193. }
  194. #if 1 // PYJ.2020.04.23_BEGIN --
  195. void eepromtest_j1(){
  196. uint8_t ret = 0;
  197. for(int i = 0; i < 128; i++)
  198. eepromtestarray[i] = i;
  199. printf("Value %x\r\n",eepromtestarray[1]);
  200. printf("Address Start %x\r\n",EEPROM_WINDOW_STATUS_ADDRESDS);
  201. #if 0 // PYJ.2020.04.25_BEGIN --
  202. EEPROM_M24C08_write(EEPROM_M24C08_ID ,
  203. (EEPROM_ATT_BASE),
  204. &eepromtestarray[0],
  205. TESTINDEX);
  206. // EEPROM_M24C08_write(EEPROM_M24C08_ID ,
  207. // (EEPROM_ATT_DL1_TABLE_ADDRESDS),
  208. // &eepromtestarray[sizeof(ATT_TABLE_st)],
  209. // sizeof(ATT_TABLE_st));
  210. EEPROM_M24C08_Read(EEPROM_M24C08_ID ,
  211. EEPROM_ATT_BASE ,
  212. &eepromtestReadarray[0],
  213. TESTINDEX);
  214. #endif // PYJ.2020.04.25_END --
  215. // EEPROM_M24C08_write(EEPROM_M24C08_ID ,(EEPROM_DET_UL4_TABLE_ADDRESDS),&eepromtestarray[0],sizeof(TEMP_TABLE_st));
  216. // EEPROM_M24C08_Read(EEPROM_M24C08_ID ,(EEPROM_DET_UL4_TABLE_ADDRESDS),&eepromtestReadarray[0],sizeof(TEMP_TABLE_st) );
  217. #if 0 // PYJ.2020.04.25_BEGIN --
  218. EEPROM_M24C08_write(EEPROM_M24C08_ID ,(EEPROM_WINDOW_STATUS_ADDRESDS),&eepromtestarray[0],sizeof(ATT_TABLE_st) );
  219. EEPROM_M24C08_Read(EEPROM_M24C08_ID ,(EEPROM_WINDOW_STATUS_ADDRESDS),&eepromtestReadarray[0],sizeof(ATT_TABLE_st) );
  220. #else
  221. EEPROM_M24C08_write(EEPROM_M24C08_ID ,(EEPROM_WINDOW_STATUS_ADDRESDS & 0xFFFF),eepromtestarray,128 );
  222. EEPROM_M24C08_Read(EEPROM_M24C08_ID ,(EEPROM_WINDOW_STATUS_ADDRESDS & 0xFFFF),eepromtestReadarray,128 );
  223. #endif // PYJ.2020.04.25_END --
  224. for(int i = 0; i< 128 ; i++)
  225. printf("%x ",eepromtestReadarray[i]);
  226. printf("\r\n");
  227. }
  228. #endif // PYJ.2020.04.23_END --
  229. #if 0 // PYJ.2020.04.23_BEGIN --
  230. void eepromtest_j1(){
  231. for(int i = 0; i< 128; i++)
  232. eepromtestarray[i] = i;
  233. HAL_I2C_Mem_Write(&hi2c2,0xa0|((0x01&0x0300>>7)),(0x01&0xff),I2C_MEMADD_SIZE_16BIT,eepromtestarray,128,100);
  234. HAL_Delay(10);
  235. HAL_I2C_Mem_Read(&hi2c2,0xa0|((0x01&0x0300>>7)),(0x01&0xff),I2C_MEMADD_SIZE_16BIT,eepromtestReadarray,128,100);
  236. for(int i = 0; i< 128; i++)
  237. printf("%d ",eepromtestReadarray[i]);
  238. printf("\r\n");
  239. }
  240. #endif // PYJ.2020.04.23_END --
  241. /* USER CODE END 0 */
  242. /**
  243. * @brief The application entry point.
  244. * @retval int
  245. */
  246. int main(void)
  247. {
  248. /* USER CODE BEGIN 1 */
  249. /* USER CODE END 1 */
  250. /* MCU Configuration--------------------------------------------------------*/
  251. /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  252. HAL_Init();
  253. /* USER CODE BEGIN Init */
  254. /* USER CODE END Init */
  255. /* Configure the system clock */
  256. SystemClock_Config();
  257. /* USER CODE BEGIN SysInit */
  258. /* USER CODE END SysInit */
  259. /* Initialize all configured peripherals */
  260. MX_GPIO_Init();
  261. MX_DMA_Init();
  262. MX_USART1_UART_Init();
  263. MX_ADC1_Init();
  264. MX_ADC3_Init();
  265. MX_USART2_UART_Init();
  266. MX_TIM6_Init();
  267. MX_CRC_Init();
  268. MX_I2C2_Init();
  269. /* Initialize interrupts */
  270. MX_NVIC_Init();
  271. /* USER CODE BEGIN 2 */
  272. while(!(HAL_ADCEx_Calibration_Start(&hadc3)==HAL_OK));
  273. while(!(HAL_ADCEx_Calibration_Start(&hadc1)==HAL_OK));
  274. HAL_ADC_Start_DMA(&hadc3, (uint16_t*)ADC3value, 5);
  275. HAL_ADC_Start_DMA(&hadc1, (uint16_t*)ADC1value, 4);
  276. InitUartQueue(&TerminalQueue);
  277. setbuf(stdout, NULL);
  278. PE43711_PinInit();
  279. EEPROM_M24C08_Init();
  280. Bluecell_DataInit();
  281. #if 0 // PYJ.2020.04.22_BEGIN --
  282. EEPROM_M24C08_write(0xA0,0,i2cTestData,1);
  283. printf("i2c Test Data1 %d\r\n",i2ctest[0]);
  284. EEPROM_M24C08_Read(0xA0,0x00,i2ctest,2);
  285. printf("i2c Test Data2 %d\r\n",i2ctest[0]);
  286. printf("i2c Test Data2 %d\r\n",i2ctest[1]);
  287. #endif // PYJ.2020.04.22_END --
  288. /* USER CODE END 2 */
  289. /* Infinite loop */
  290. /* USER CODE BEGIN WHILE */
  291. // uint16_t ret = 0;
  292. // EEPROMTEST_J();
  293. // eepromtest_j1();
  294. // eepromtest_j1();
  295. printf("Project Start\r\n");
  296. while (1)
  297. {
  298. // HAL_GPIO_TogglePin(GPIOG,GPIO_PIN_14);
  299. Boot_LED_Toggle();
  300. Uart_Check();
  301. ADC_Check();
  302. /* USER CODE END WHILE */
  303. /* USER CODE BEGIN 3 */
  304. }
  305. /* USER CODE END 3 */
  306. }
  307. /**
  308. * @brief System Clock Configuration
  309. * @retval None
  310. */
  311. void SystemClock_Config(void)
  312. {
  313. RCC_OscInitTypeDef RCC_OscInitStruct = {0};
  314. RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
  315. RCC_PeriphCLKInitTypeDef PeriphClkInit = {0};
  316. /** Initializes the CPU, AHB and APB busses clocks
  317. */
  318. RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
  319. RCC_OscInitStruct.HSIState = RCC_HSI_ON;
  320. RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
  321. RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  322. RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI_DIV2;
  323. RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL14;
  324. if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
  325. {
  326. Error_Handler();
  327. }
  328. /** Initializes the CPU, AHB and APB busses clocks
  329. */
  330. RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
  331. |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
  332. RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
  333. RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  334. RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
  335. RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
  336. if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK)
  337. {
  338. Error_Handler();
  339. }
  340. PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_ADC;
  341. PeriphClkInit.AdcClockSelection = RCC_ADCPCLK2_DIV4;
  342. if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK)
  343. {
  344. Error_Handler();
  345. }
  346. }
  347. /**
  348. * @brief NVIC Configuration.
  349. * @retval None
  350. */
  351. static void MX_NVIC_Init(void)
  352. {
  353. /* DMA1_Channel1_IRQn interrupt configuration */
  354. HAL_NVIC_SetPriority(DMA1_Channel1_IRQn, 0, 0);
  355. HAL_NVIC_EnableIRQ(DMA1_Channel1_IRQn);
  356. /* DMA1_Channel4_IRQn interrupt configuration */
  357. HAL_NVIC_SetPriority(DMA1_Channel4_IRQn, 0, 0);
  358. HAL_NVIC_EnableIRQ(DMA1_Channel4_IRQn);
  359. /* DMA1_Channel5_IRQn interrupt configuration */
  360. HAL_NVIC_SetPriority(DMA1_Channel5_IRQn, 0, 0);
  361. HAL_NVIC_EnableIRQ(DMA1_Channel5_IRQn);
  362. /* USART1_IRQn interrupt configuration */
  363. HAL_NVIC_SetPriority(USART1_IRQn, 0, 0);
  364. HAL_NVIC_EnableIRQ(USART1_IRQn);
  365. /* USART2_IRQn interrupt configuration */
  366. HAL_NVIC_SetPriority(USART2_IRQn, 0, 0);
  367. HAL_NVIC_EnableIRQ(USART2_IRQn);
  368. /* DMA2_Channel4_5_IRQn interrupt configuration */
  369. HAL_NVIC_SetPriority(DMA2_Channel4_5_IRQn, 0, 0);
  370. HAL_NVIC_EnableIRQ(DMA2_Channel4_5_IRQn);
  371. /* TIM6_IRQn interrupt configuration */
  372. HAL_NVIC_SetPriority(TIM6_IRQn, 0, 0);
  373. HAL_NVIC_EnableIRQ(TIM6_IRQn);
  374. /* ADC3_IRQn interrupt configuration */
  375. HAL_NVIC_SetPriority(ADC3_IRQn, 0, 0);
  376. HAL_NVIC_EnableIRQ(ADC3_IRQn);
  377. }
  378. /**
  379. * @brief ADC1 Initialization Function
  380. * @param None
  381. * @retval None
  382. */
  383. static void MX_ADC1_Init(void)
  384. {
  385. /* USER CODE BEGIN ADC1_Init 0 */
  386. /* USER CODE END ADC1_Init 0 */
  387. ADC_ChannelConfTypeDef sConfig = {0};
  388. /* USER CODE BEGIN ADC1_Init 1 */
  389. /* USER CODE END ADC1_Init 1 */
  390. /** Common config
  391. */
  392. hadc1.Instance = ADC1;
  393. hadc1.Init.ScanConvMode = ADC_SCAN_ENABLE;
  394. hadc1.Init.ContinuousConvMode = ENABLE;
  395. hadc1.Init.DiscontinuousConvMode = DISABLE;
  396. hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;
  397. hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
  398. hadc1.Init.NbrOfConversion = 4;
  399. if (HAL_ADC_Init(&hadc1) != HAL_OK)
  400. {
  401. Error_Handler();
  402. }
  403. /** Configure Regular Channel
  404. */
  405. sConfig.Channel = ADC_CHANNEL_4;
  406. sConfig.Rank = ADC_REGULAR_RANK_1;
  407. sConfig.SamplingTime = ADC_SAMPLETIME_239CYCLES_5;
  408. if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
  409. {
  410. Error_Handler();
  411. }
  412. /** Configure Regular Channel
  413. */
  414. sConfig.Channel = ADC_CHANNEL_5;
  415. sConfig.Rank = ADC_REGULAR_RANK_2;
  416. if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
  417. {
  418. Error_Handler();
  419. }
  420. /** Configure Regular Channel
  421. */
  422. sConfig.Channel = ADC_CHANNEL_6;
  423. sConfig.Rank = ADC_REGULAR_RANK_3;
  424. if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
  425. {
  426. Error_Handler();
  427. }
  428. /** Configure Regular Channel
  429. */
  430. sConfig.Channel = ADC_CHANNEL_12;
  431. sConfig.Rank = ADC_REGULAR_RANK_4;
  432. if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
  433. {
  434. Error_Handler();
  435. }
  436. /* USER CODE BEGIN ADC1_Init 2 */
  437. /* USER CODE END ADC1_Init 2 */
  438. }
  439. /**
  440. * @brief ADC3 Initialization Function
  441. * @param None
  442. * @retval None
  443. */
  444. static void MX_ADC3_Init(void)
  445. {
  446. /* USER CODE BEGIN ADC3_Init 0 */
  447. /* USER CODE END ADC3_Init 0 */
  448. ADC_ChannelConfTypeDef sConfig = {0};
  449. /* USER CODE BEGIN ADC3_Init 1 */
  450. /* USER CODE END ADC3_Init 1 */
  451. /** Common config
  452. */
  453. hadc3.Instance = ADC3;
  454. hadc3.Init.ScanConvMode = ADC_SCAN_ENABLE;
  455. hadc3.Init.ContinuousConvMode = ENABLE;
  456. hadc3.Init.DiscontinuousConvMode = DISABLE;
  457. hadc3.Init.ExternalTrigConv = ADC_SOFTWARE_START;
  458. hadc3.Init.DataAlign = ADC_DATAALIGN_RIGHT;
  459. hadc3.Init.NbrOfConversion = 5;
  460. if (HAL_ADC_Init(&hadc3) != HAL_OK)
  461. {
  462. Error_Handler();
  463. }
  464. /** Configure Regular Channel
  465. */
  466. sConfig.Channel = ADC_CHANNEL_4;
  467. sConfig.Rank = ADC_REGULAR_RANK_1;
  468. sConfig.SamplingTime = ADC_SAMPLETIME_239CYCLES_5;
  469. if (HAL_ADC_ConfigChannel(&hadc3, &sConfig) != HAL_OK)
  470. {
  471. Error_Handler();
  472. }
  473. /** Configure Regular Channel
  474. */
  475. sConfig.Channel = ADC_CHANNEL_5;
  476. sConfig.Rank = ADC_REGULAR_RANK_2;
  477. if (HAL_ADC_ConfigChannel(&hadc3, &sConfig) != HAL_OK)
  478. {
  479. Error_Handler();
  480. }
  481. /** Configure Regular Channel
  482. */
  483. sConfig.Channel = ADC_CHANNEL_6;
  484. sConfig.Rank = ADC_REGULAR_RANK_3;
  485. if (HAL_ADC_ConfigChannel(&hadc3, &sConfig) != HAL_OK)
  486. {
  487. Error_Handler();
  488. }
  489. /** Configure Regular Channel
  490. */
  491. sConfig.Channel = ADC_CHANNEL_7;
  492. sConfig.Rank = ADC_REGULAR_RANK_4;
  493. if (HAL_ADC_ConfigChannel(&hadc3, &sConfig) != HAL_OK)
  494. {
  495. Error_Handler();
  496. }
  497. /** Configure Regular Channel
  498. */
  499. sConfig.Channel = ADC_CHANNEL_8;
  500. sConfig.Rank = ADC_REGULAR_RANK_5;
  501. if (HAL_ADC_ConfigChannel(&hadc3, &sConfig) != HAL_OK)
  502. {
  503. Error_Handler();
  504. }
  505. /* USER CODE BEGIN ADC3_Init 2 */
  506. /* USER CODE END ADC3_Init 2 */
  507. }
  508. /**
  509. * @brief CRC Initialization Function
  510. * @param None
  511. * @retval None
  512. */
  513. static void MX_CRC_Init(void)
  514. {
  515. /* USER CODE BEGIN CRC_Init 0 */
  516. /* USER CODE END CRC_Init 0 */
  517. /* USER CODE BEGIN CRC_Init 1 */
  518. /* USER CODE END CRC_Init 1 */
  519. hcrc.Instance = CRC;
  520. if (HAL_CRC_Init(&hcrc) != HAL_OK)
  521. {
  522. Error_Handler();
  523. }
  524. /* USER CODE BEGIN CRC_Init 2 */
  525. /* USER CODE END CRC_Init 2 */
  526. }
  527. /**
  528. * @brief I2C2 Initialization Function
  529. * @param None
  530. * @retval None
  531. */
  532. static void MX_I2C2_Init(void)
  533. {
  534. /* USER CODE BEGIN I2C2_Init 0 */
  535. /* USER CODE END I2C2_Init 0 */
  536. /* USER CODE BEGIN I2C2_Init 1 */
  537. /* USER CODE END I2C2_Init 1 */
  538. hi2c2.Instance = I2C2;
  539. hi2c2.Init.ClockSpeed = 400000;
  540. hi2c2.Init.DutyCycle = I2C_DUTYCYCLE_2;
  541. hi2c2.Init.OwnAddress1 = 0;
  542. hi2c2.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;
  543. hi2c2.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE;
  544. hi2c2.Init.OwnAddress2 = 0;
  545. hi2c2.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;
  546. hi2c2.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;
  547. if (HAL_I2C_Init(&hi2c2) != HAL_OK)
  548. {
  549. Error_Handler();
  550. }
  551. /* USER CODE BEGIN I2C2_Init 2 */
  552. /* USER CODE END I2C2_Init 2 */
  553. }
  554. /**
  555. * @brief TIM6 Initialization Function
  556. * @param None
  557. * @retval None
  558. */
  559. static void MX_TIM6_Init(void)
  560. {
  561. /* USER CODE BEGIN TIM6_Init 0 */
  562. /* USER CODE END TIM6_Init 0 */
  563. TIM_MasterConfigTypeDef sMasterConfig = {0};
  564. /* USER CODE BEGIN TIM6_Init 1 */
  565. /* USER CODE END TIM6_Init 1 */
  566. htim6.Instance = TIM6;
  567. htim6.Init.Prescaler = 5600 - 1;
  568. htim6.Init.CounterMode = TIM_COUNTERMODE_UP;
  569. htim6.Init.Period = 10;
  570. htim6.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
  571. if (HAL_TIM_Base_Init(&htim6) != HAL_OK)
  572. {
  573. Error_Handler();
  574. }
  575. sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
  576. sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
  577. if (HAL_TIMEx_MasterConfigSynchronization(&htim6, &sMasterConfig) != HAL_OK)
  578. {
  579. Error_Handler();
  580. }
  581. /* USER CODE BEGIN TIM6_Init 2 */
  582. /* USER CODE END TIM6_Init 2 */
  583. }
  584. /**
  585. * @brief USART1 Initialization Function
  586. * @param None
  587. * @retval None
  588. */
  589. static void MX_USART1_UART_Init(void)
  590. {
  591. /* USER CODE BEGIN USART1_Init 0 */
  592. /* USER CODE END USART1_Init 0 */
  593. /* USER CODE BEGIN USART1_Init 1 */
  594. /* USER CODE END USART1_Init 1 */
  595. huart1.Instance = USART1;
  596. huart1.Init.BaudRate = 115200;
  597. huart1.Init.WordLength = UART_WORDLENGTH_8B;
  598. huart1.Init.StopBits = UART_STOPBITS_1;
  599. huart1.Init.Parity = UART_PARITY_NONE;
  600. huart1.Init.Mode = UART_MODE_TX_RX;
  601. huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  602. huart1.Init.OverSampling = UART_OVERSAMPLING_16;
  603. if (HAL_UART_Init(&huart1) != HAL_OK)
  604. {
  605. Error_Handler();
  606. }
  607. /* USER CODE BEGIN USART1_Init 2 */
  608. /* USER CODE END USART1_Init 2 */
  609. }
  610. /**
  611. * @brief USART2 Initialization Function
  612. * @param None
  613. * @retval None
  614. */
  615. static void MX_USART2_UART_Init(void)
  616. {
  617. /* USER CODE BEGIN USART2_Init 0 */
  618. /* USER CODE END USART2_Init 0 */
  619. /* USER CODE BEGIN USART2_Init 1 */
  620. /* USER CODE END USART2_Init 1 */
  621. huart2.Instance = USART2;
  622. huart2.Init.BaudRate = 115200;
  623. huart2.Init.WordLength = UART_WORDLENGTH_8B;
  624. huart2.Init.StopBits = UART_STOPBITS_1;
  625. huart2.Init.Parity = UART_PARITY_NONE;
  626. huart2.Init.Mode = UART_MODE_TX_RX;
  627. huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  628. huart2.Init.OverSampling = UART_OVERSAMPLING_16;
  629. if (HAL_UART_Init(&huart2) != HAL_OK)
  630. {
  631. Error_Handler();
  632. }
  633. /* USER CODE BEGIN USART2_Init 2 */
  634. /* USER CODE END USART2_Init 2 */
  635. }
  636. /**
  637. * Enable DMA controller clock
  638. */
  639. static void MX_DMA_Init(void)
  640. {
  641. /* DMA controller clock enable */
  642. __HAL_RCC_DMA1_CLK_ENABLE();
  643. __HAL_RCC_DMA2_CLK_ENABLE();
  644. }
  645. /**
  646. * @brief GPIO Initialization Function
  647. * @param None
  648. * @retval None
  649. */
  650. static void MX_GPIO_Init(void)
  651. {
  652. GPIO_InitTypeDef GPIO_InitStruct = {0};
  653. /* GPIO Ports Clock Enable */
  654. __HAL_RCC_GPIOE_CLK_ENABLE();
  655. __HAL_RCC_GPIOC_CLK_ENABLE();
  656. __HAL_RCC_GPIOF_CLK_ENABLE();
  657. __HAL_RCC_GPIOA_CLK_ENABLE();
  658. __HAL_RCC_GPIOG_CLK_ENABLE();
  659. __HAL_RCC_GPIOB_CLK_ENABLE();
  660. __HAL_RCC_GPIOD_CLK_ENABLE();
  661. /*Configure GPIO pin Output Level */
  662. HAL_GPIO_WritePin(GPIOE, GPIO_PIN_3|FAIL_MBIC_Pin|ATT_CLOCK4_Pin|ATT_DATA4_Pin
  663. |ATT_EN_DL4_Pin|ATT_EN_UL4_Pin|PATH_EN_DL4_Pin|PATH_EN_UL4_Pin, GPIO_PIN_RESET);
  664. /*Configure GPIO pin Output Level */
  665. HAL_GPIO_WritePin(GPIOC, BOOT_LED_Pin|PATH_EN_UL1_Pin, GPIO_PIN_RESET);
  666. /*Configure GPIO pin Output Level */
  667. HAL_GPIO_WritePin(GPIOG, ATT_CLOCK3_Pin|ATT_DATA3_Pin|ATT_EN_DL3_Pin|ATT_EN_UL3_Pin
  668. |PATH_EN_DL3_Pin|PATH_EN_UL3_Pin|_PATH_SW1_Pin|PATH_SW1_Pin
  669. |_PATH_SW2_Pin|PATH_SW2_Pin|_PATH_SW3_Pin|PATH_SW3_Pin
  670. |_PATH_SW4_Pin|PATH_SW4_Pin, GPIO_PIN_RESET);
  671. /*Configure GPIO pin Output Level */
  672. HAL_GPIO_WritePin(GPIOB, ATT_EN_UL1_Pin|PATH_EN_DL1_Pin|ATT_CLOCK1_Pin|ATT_DATA1_Pin
  673. |ATT_EN_DL1_Pin, GPIO_PIN_RESET);
  674. /*Configure GPIO pin Output Level */
  675. HAL_GPIO_WritePin(GPIOD, PATH_EN_DL2_Pin|PATH_EN_UL2_Pin|LED_ACT_Pin|GPIO_PIN_15
  676. |ATT_CLOCK2_Pin|ATT_DATA2_Pin|ATT_EN_DL2_Pin|ATT_EN_UL2_Pin, GPIO_PIN_RESET);
  677. /*Configure GPIO pins : PE3 FAIL_MBIC_Pin ATT_CLOCK4_Pin ATT_DATA4_Pin
  678. ATT_EN_DL4_Pin ATT_EN_UL4_Pin PATH_EN_DL4_Pin PATH_EN_UL4_Pin */
  679. GPIO_InitStruct.Pin = GPIO_PIN_3|FAIL_MBIC_Pin|ATT_CLOCK4_Pin|ATT_DATA4_Pin
  680. |ATT_EN_DL4_Pin|ATT_EN_UL4_Pin|PATH_EN_DL4_Pin|PATH_EN_UL4_Pin;
  681. GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  682. GPIO_InitStruct.Pull = GPIO_NOPULL;
  683. GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  684. HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);
  685. /*Configure GPIO pins : BOOT_LED_Pin PATH_EN_UL1_Pin */
  686. GPIO_InitStruct.Pin = BOOT_LED_Pin|PATH_EN_UL1_Pin;
  687. GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  688. GPIO_InitStruct.Pull = GPIO_NOPULL;
  689. GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  690. HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
  691. /*Configure GPIO pins : ATT_CLOCK3_Pin ATT_DATA3_Pin ATT_EN_DL3_Pin ATT_EN_UL3_Pin
  692. PATH_EN_DL3_Pin PATH_EN_UL3_Pin _PATH_SW1_Pin PATH_SW1_Pin
  693. _PATH_SW2_Pin PATH_SW2_Pin _PATH_SW3_Pin PATH_SW3_Pin
  694. _PATH_SW4_Pin PATH_SW4_Pin */
  695. GPIO_InitStruct.Pin = ATT_CLOCK3_Pin|ATT_DATA3_Pin|ATT_EN_DL3_Pin|ATT_EN_UL3_Pin
  696. |PATH_EN_DL3_Pin|PATH_EN_UL3_Pin|_PATH_SW1_Pin|PATH_SW1_Pin
  697. |_PATH_SW2_Pin|PATH_SW2_Pin|_PATH_SW3_Pin|PATH_SW3_Pin
  698. |_PATH_SW4_Pin|PATH_SW4_Pin;
  699. GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  700. GPIO_InitStruct.Pull = GPIO_NOPULL;
  701. GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  702. HAL_GPIO_Init(GPIOG, &GPIO_InitStruct);
  703. /*Configure GPIO pins : ATT_EN_UL1_Pin PATH_EN_DL1_Pin ATT_CLOCK1_Pin ATT_DATA1_Pin
  704. ATT_EN_DL1_Pin */
  705. GPIO_InitStruct.Pin = ATT_EN_UL1_Pin|PATH_EN_DL1_Pin|ATT_CLOCK1_Pin|ATT_DATA1_Pin
  706. |ATT_EN_DL1_Pin;
  707. GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  708. GPIO_InitStruct.Pull = GPIO_NOPULL;
  709. GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  710. HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
  711. /*Configure GPIO pins : PATH_EN_DL2_Pin PATH_EN_UL2_Pin LED_ACT_Pin PD15
  712. ATT_CLOCK2_Pin ATT_DATA2_Pin ATT_EN_DL2_Pin ATT_EN_UL2_Pin */
  713. GPIO_InitStruct.Pin = PATH_EN_DL2_Pin|PATH_EN_UL2_Pin|LED_ACT_Pin|GPIO_PIN_15
  714. |ATT_CLOCK2_Pin|ATT_DATA2_Pin|ATT_EN_DL2_Pin|ATT_EN_UL2_Pin;
  715. GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  716. GPIO_InitStruct.Pull = GPIO_NOPULL;
  717. GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  718. HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
  719. }
  720. /* USER CODE BEGIN 4 */
  721. /* USER CODE END 4 */
  722. /**
  723. * @brief Period elapsed callback in non blocking mode
  724. * @note This function is called when TIM2 interrupt took place, inside
  725. * HAL_TIM_IRQHandler(). It makes a direct call to HAL_IncTick() to increment
  726. * a global variable "uwTick" used as application time base.
  727. * @param htim : TIM handle
  728. * @retval None
  729. */
  730. void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
  731. {
  732. /* USER CODE BEGIN Callback 0 */
  733. /* USER CODE END Callback 0 */
  734. if (htim->Instance == TIM2) {
  735. HAL_IncTick();
  736. }
  737. /* USER CODE BEGIN Callback 1 */
  738. if(htim->Instance == TIM6){
  739. UartRxTimerCnt++;
  740. LedTimerCnt++;
  741. AdcTimerCnt++;
  742. LDTimerCnt++;
  743. }
  744. /* USER CODE END Callback 1 */
  745. }
  746. /**
  747. * @brief This function is executed in case of error occurrence.
  748. * @retval None
  749. */
  750. void Error_Handler(void)
  751. {
  752. /* USER CODE BEGIN Error_Handler_Debug */
  753. /* User can add his own implementation to report the HAL error return state */
  754. /* USER CODE END Error_Handler_Debug */
  755. }
  756. #ifdef USE_FULL_ASSERT
  757. /**
  758. * @brief Reports the name of the source file and the source line number
  759. * where the assert_param error has occurred.
  760. * @param file: pointer to the source file name
  761. * @param line: assert_param error line source number
  762. * @retval None
  763. */
  764. void assert_failed(uint8_t *file, uint32_t line)
  765. {
  766. /* USER CODE BEGIN 6 */
  767. /* User can add his own implementation to report the file name and line number,
  768. tex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
  769. /* USER CODE END 6 */
  770. }
  771. #endif /* USE_FULL_ASSERT */
  772. /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/