Advertisement
Guest User

Untitled

a guest
Mar 3rd, 2022
218
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 15.46 KB | None | 0 0
  1. /* USER CODE BEGIN Header */
  2. /**
  3. ******************************************************************************
  4. * @file : main.c
  5. * @brief : Main program body
  6. *
  7. ******************************************************************************
  8. * @attention
  9. *
  10. * Copyright (c) 2020-2021 STMicroelectronics.
  11. * All rights reserved.
  12. *
  13. * This software is licensed under terms that can be found in the LICENSE file
  14. * in the root directory of this software component.
  15. * If no LICENSE file comes with this software, it is provided AS-IS.
  16. *
  17. ******************************************************************************
  18. @verbatim
  19. ==============================================================================
  20. ##### IMPORTANT NOTE #####
  21. ==============================================================================
  22.  
  23. This application requests having the stm32wb5x_Zigbee_fw.bin binary
  24. flashed on the Wireless Coprocessor.
  25. If it is not the case, you need to use STM32CubeProgrammer to load the appropriate
  26. binary.
  27.  
  28. All available binaries are located under following directory:
  29. /Projects/STM32_Copro_Wireless_Binaries
  30.  
  31. Refer to UM2237 to learn how to use/install STM32CubeProgrammer.
  32. Refer to /Projects/STM32_Copro_Wireless_Binaries/ReleaseNote.html for the
  33. detailed procedure to change the Wireless Coprocessor binary.
  34.  
  35. @endverbatim
  36. ******************************************************************************
  37. ******************************************************************************
  38. */
  39. /* USER CODE END Header */
  40. /* Includes ------------------------------------------------------------------*/
  41. #include "main.h"
  42.  
  43. /* Private includes ----------------------------------------------------------*/
  44. /* USER CODE BEGIN Includes */
  45.  
  46. #include "dbg_trace.h"
  47. #include "hw_conf.h"
  48. #include "otp.h"
  49. #include "stm32_seq.h"
  50. #include "stm32wbxx_it.h"
  51.  
  52. /* USER CODE END Includes */
  53.  
  54. /* Private typedef -----------------------------------------------------------*/
  55. /* USER CODE BEGIN PTD */
  56.  
  57. /* USER CODE END PTD */
  58.  
  59. /* Private define ------------------------------------------------------------*/
  60. /* USER CODE BEGIN PD */
  61. /* ASH CODE BEGIN */
  62. #define si7021 (0x40 << 1)
  63. /* ASH CODE END */
  64. /* USER CODE END PD */
  65.  
  66. /* Private macro -------------------------------------------------------------*/
  67. /* USER CODE BEGIN PM */
  68.  
  69. /* USER CODE END PM */
  70.  
  71. /* Private variables ---------------------------------------------------------*/
  72. I2C_HandleTypeDef hi2c1;
  73.  
  74. IPCC_HandleTypeDef hipcc;
  75.  
  76. UART_HandleTypeDef hlpuart1;
  77. UART_HandleTypeDef huart1;
  78. DMA_HandleTypeDef hdma_lpuart1_tx;
  79. DMA_HandleTypeDef hdma_usart1_tx;
  80.  
  81. RTC_HandleTypeDef hrtc;
  82.  
  83. /* USER CODE BEGIN PV */
  84.  
  85. /* USER CODE END PV */
  86.  
  87. /* Private function prototypes -----------------------------------------------*/
  88. void SystemClock_Config(void);
  89. void PeriphCommonClock_Config(void);
  90. static void MX_GPIO_Init(void);
  91. static void MX_DMA_Init(void);
  92. static void MX_RF_Init(void);
  93. static void MX_RTC_Init(void);
  94. static void MX_IPCC_Init(void);
  95. static void MX_I2C1_Init(void);
  96. /* USER CODE BEGIN PFP */
  97.  
  98. /* USER CODE END PFP */
  99.  
  100. /* Private user code ---------------------------------------------------------*/
  101. /* USER CODE BEGIN 0 */
  102.  
  103. /* USER CODE END 0 */
  104.  
  105. /**
  106. * @brief The application entry point.
  107. * @retval int
  108. */
  109. int main(void)
  110. {
  111. /* USER CODE BEGIN 1 */
  112.  
  113. /* USER CODE END 1 */
  114.  
  115. /* MCU Configuration--------------------------------------------------------*/
  116.  
  117. /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  118. HAL_Init();
  119. /* Config code for STM32_WPAN (HSE Tuning must be done before system clock configuration) */
  120. MX_APPE_Config();
  121.  
  122. /* USER CODE BEGIN Init */
  123.  
  124. /* USER CODE END Init */
  125.  
  126. /* Configure the system clock */
  127. SystemClock_Config();
  128.  
  129. /* Configure the peripherals common clocks */
  130. PeriphCommonClock_Config();
  131.  
  132. /* IPCC initialisation */
  133. MX_IPCC_Init();
  134.  
  135. /* USER CODE BEGIN SysInit */
  136.  
  137. /* USER CODE END SysInit */
  138.  
  139. /* Initialize all configured peripherals */
  140. MX_GPIO_Init();
  141. MX_DMA_Init();
  142. MX_RF_Init();
  143. MX_RTC_Init();
  144. MX_I2C1_Init();
  145. /* USER CODE BEGIN 2 */
  146. HAL_StatusTypeDef ret;
  147. uint8_t buf[12];
  148. int16_t temp_code;
  149. // uint16_t hum_code;
  150. float temp_c;
  151. // float hum_c;
  152. /* USER CODE END 2 */
  153.  
  154. /* Init code for STM32_WPAN */
  155. MX_APPE_Init();
  156. /* Infinite loop */
  157. /* USER CODE BEGIN WHILE */
  158. while (1)
  159. {
  160. /* USER CODE END WHILE */
  161. MX_APPE_Process();
  162.  
  163. buf[0] = 0xE3;
  164. ret = HAL_I2C_Master_Transmit(&hi2c1, si7021, buf, 1, 10000);
  165. if (ret != HAL_OK){
  166. strcpy((char*)buf, "Error TX\r\n");
  167. } else {
  168. ret = HAL_I2C_Master_Receive(&hi2c1, si7021 | 0x01, buf, 2, 10000);
  169. if (ret != HAL_OK) {
  170. strcpy((char*)buf, "Error RX\r\n");
  171. } else {
  172. temp_code = (buf[0] << 8) + buf[1];
  173. if (temp_code > 0x7FFF) {
  174. temp_code |= 0xF000;
  175. }
  176. temp_c = ((175.72*temp_code) / 65536.0) - 46.85;
  177. }
  178. }
  179.  
  180. // buf[0] = 0xE5;
  181. // ret = HAL_I2C_Master_Transmit(&hi2c1, si7021, buf, 1, 10000);
  182. // if (ret != HAL_OK) {
  183. // strcpy((char*)buf, "Error TX\r\n");
  184. // } else {
  185. // ret = HAL_I2C_Master_Receive(&hi2c1, si7021 | 0x01, buf, 2, 10000);
  186. // if (ret != HAL_OK) {
  187. // strcpy((char*)buf, "Error RX\r\n");
  188. // } else {
  189. // hum_code = (buf[0] << 8) + buf[1];
  190. // hum_c = ((125*hum_code) / 65536) - 6;
  191. // }
  192. // }
  193.  
  194. if (temp_c >= 26.0) {
  195. HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, 1);
  196. } else {
  197. HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, 0);
  198. }
  199.  
  200. /* USER CODE BEGIN 3 */
  201. }
  202. /* USER CODE END 3 */
  203. }
  204.  
  205. /**
  206. * @brief System Clock Configuration
  207. * @retval None
  208. */
  209. void SystemClock_Config(void)
  210. {
  211. RCC_OscInitTypeDef RCC_OscInitStruct = {0};
  212. RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
  213.  
  214. /** Configure LSE Drive Capability
  215. */
  216. HAL_PWR_EnableBkUpAccess();
  217. __HAL_RCC_LSEDRIVE_CONFIG(RCC_LSEDRIVE_LOW);
  218. /** Configure the main internal regulator output voltage
  219. */
  220. __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
  221. /** Initializes the RCC Oscillators according to the specified parameters
  222. * in the RCC_OscInitTypeDef structure.
  223. */
  224. RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI|RCC_OSCILLATORTYPE_HSE
  225. |RCC_OSCILLATORTYPE_LSE;
  226. RCC_OscInitStruct.HSEState = RCC_HSE_ON;
  227. RCC_OscInitStruct.LSEState = RCC_LSE_ON;
  228. RCC_OscInitStruct.HSIState = RCC_HSI_ON;
  229. RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
  230. RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
  231. if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
  232. {
  233. Error_Handler();
  234. }
  235. /** Configure the SYSCLKSource, HCLK, PCLK1 and PCLK2 clocks dividers
  236. */
  237. RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK4|RCC_CLOCKTYPE_HCLK2
  238. |RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
  239. |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
  240. RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSE;
  241. RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  242. RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
  243. RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
  244. RCC_ClkInitStruct.AHBCLK2Divider = RCC_SYSCLK_DIV1;
  245. RCC_ClkInitStruct.AHBCLK4Divider = RCC_SYSCLK_DIV1;
  246.  
  247. if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_1) != HAL_OK)
  248. {
  249. Error_Handler();
  250. }
  251. }
  252.  
  253. /**
  254. * @brief Peripherals Common Clock Configuration
  255. * @retval None
  256. */
  257. void PeriphCommonClock_Config(void)
  258. {
  259. RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0};
  260.  
  261. /** Initializes the peripherals clock
  262. */
  263. PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_SMPS|RCC_PERIPHCLK_RFWAKEUP;
  264. PeriphClkInitStruct.RFWakeUpClockSelection = RCC_RFWKPCLKSOURCE_LSE;
  265. PeriphClkInitStruct.SmpsClockSelection = RCC_SMPSCLKSOURCE_HSE;
  266. PeriphClkInitStruct.SmpsDivSelection = RCC_SMPSCLKDIV_RANGE0;
  267.  
  268. if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK)
  269. {
  270. Error_Handler();
  271. }
  272. /* USER CODE BEGIN Smps */
  273.  
  274. /* USER CODE END Smps */
  275. }
  276.  
  277. /**
  278. * @brief I2C1 Initialization Function
  279. * @param None
  280. * @retval None
  281. */
  282. static void MX_I2C1_Init(void)
  283. {
  284.  
  285. /* USER CODE BEGIN I2C1_Init 0 */
  286.  
  287. /* USER CODE END I2C1_Init 0 */
  288.  
  289. /* USER CODE BEGIN I2C1_Init 1 */
  290.  
  291. /* USER CODE END I2C1_Init 1 */
  292. hi2c1.Instance = I2C1;
  293. hi2c1.Init.Timing = 0x00707CBB;
  294. hi2c1.Init.OwnAddress1 = 0;
  295. hi2c1.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;
  296. hi2c1.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE;
  297. hi2c1.Init.OwnAddress2 = 0;
  298. hi2c1.Init.OwnAddress2Masks = I2C_OA2_NOMASK;
  299. hi2c1.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;
  300. hi2c1.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;
  301. if (HAL_I2C_Init(&hi2c1) != HAL_OK)
  302. {
  303. Error_Handler();
  304. }
  305. /** Configure Analogue filter
  306. */
  307. if (HAL_I2CEx_ConfigAnalogFilter(&hi2c1, I2C_ANALOGFILTER_ENABLE) != HAL_OK)
  308. {
  309. Error_Handler();
  310. }
  311. /** Configure Digital filter
  312. */
  313. if (HAL_I2CEx_ConfigDigitalFilter(&hi2c1, 0) != HAL_OK)
  314. {
  315. Error_Handler();
  316. }
  317. /* USER CODE BEGIN I2C1_Init 2 */
  318.  
  319. /* USER CODE END I2C1_Init 2 */
  320.  
  321. }
  322.  
  323. /**
  324. * @brief IPCC Initialization Function
  325. * @param None
  326. * @retval None
  327. */
  328. static void MX_IPCC_Init(void)
  329. {
  330.  
  331. /* USER CODE BEGIN IPCC_Init 0 */
  332.  
  333. /* USER CODE END IPCC_Init 0 */
  334.  
  335. /* USER CODE BEGIN IPCC_Init 1 */
  336.  
  337. /* USER CODE END IPCC_Init 1 */
  338. hipcc.Instance = IPCC;
  339. if (HAL_IPCC_Init(&hipcc) != HAL_OK)
  340. {
  341. Error_Handler();
  342. }
  343. /* USER CODE BEGIN IPCC_Init 2 */
  344.  
  345. /* USER CODE END IPCC_Init 2 */
  346.  
  347. }
  348.  
  349. /**
  350. * @brief LPUART1 Initialization Function
  351. * @param None
  352. * @retval None
  353. */
  354. void MX_LPUART1_UART_Init(void)
  355. {
  356.  
  357. /* USER CODE BEGIN LPUART1_Init 0 */
  358.  
  359. /* USER CODE END LPUART1_Init 0 */
  360.  
  361. /* USER CODE BEGIN LPUART1_Init 1 */
  362.  
  363. /* USER CODE END LPUART1_Init 1 */
  364. hlpuart1.Instance = LPUART1;
  365. hlpuart1.Init.BaudRate = 115200;
  366. hlpuart1.Init.WordLength = UART_WORDLENGTH_8B;
  367. hlpuart1.Init.StopBits = UART_STOPBITS_1;
  368. hlpuart1.Init.Parity = UART_PARITY_NONE;
  369. hlpuart1.Init.Mode = UART_MODE_TX_RX;
  370. hlpuart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  371. hlpuart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
  372. hlpuart1.Init.ClockPrescaler = UART_PRESCALER_DIV1;
  373. hlpuart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
  374. hlpuart1.FifoMode = UART_FIFOMODE_DISABLE;
  375. if (HAL_UART_Init(&hlpuart1) != HAL_OK)
  376. {
  377. Error_Handler();
  378. }
  379. if (HAL_UARTEx_SetTxFifoThreshold(&hlpuart1, UART_TXFIFO_THRESHOLD_1_8) != HAL_OK)
  380. {
  381. Error_Handler();
  382. }
  383. if (HAL_UARTEx_SetRxFifoThreshold(&hlpuart1, UART_RXFIFO_THRESHOLD_1_8) != HAL_OK)
  384. {
  385. Error_Handler();
  386. }
  387. if (HAL_UARTEx_DisableFifoMode(&hlpuart1) != HAL_OK)
  388. {
  389. Error_Handler();
  390. }
  391. /* USER CODE BEGIN LPUART1_Init 2 */
  392.  
  393. /* USER CODE END LPUART1_Init 2 */
  394.  
  395. }
  396.  
  397. /**
  398. * @brief USART1 Initialization Function
  399. * @param None
  400. * @retval None
  401. */
  402. void MX_USART1_UART_Init(void)
  403. {
  404.  
  405. /* USER CODE BEGIN USART1_Init 0 */
  406.  
  407. /* USER CODE END USART1_Init 0 */
  408.  
  409. /* USER CODE BEGIN USART1_Init 1 */
  410.  
  411. /* USER CODE END USART1_Init 1 */
  412. huart1.Instance = USART1;
  413. huart1.Init.BaudRate = 115200;
  414. huart1.Init.WordLength = UART_WORDLENGTH_8B;
  415. huart1.Init.StopBits = UART_STOPBITS_1;
  416. huart1.Init.Parity = UART_PARITY_NONE;
  417. huart1.Init.Mode = UART_MODE_TX_RX;
  418. huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  419. huart1.Init.OverSampling = UART_OVERSAMPLING_8;
  420. huart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
  421. huart1.Init.ClockPrescaler = UART_PRESCALER_DIV1;
  422. huart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
  423. if (HAL_UART_Init(&huart1) != HAL_OK)
  424. {
  425. Error_Handler();
  426. }
  427. if (HAL_UARTEx_SetTxFifoThreshold(&huart1, UART_TXFIFO_THRESHOLD_1_8) != HAL_OK)
  428. {
  429. Error_Handler();
  430. }
  431. if (HAL_UARTEx_SetRxFifoThreshold(&huart1, UART_RXFIFO_THRESHOLD_1_8) != HAL_OK)
  432. {
  433. Error_Handler();
  434. }
  435. if (HAL_UARTEx_DisableFifoMode(&huart1) != HAL_OK)
  436. {
  437. Error_Handler();
  438. }
  439. /* USER CODE BEGIN USART1_Init 2 */
  440.  
  441. /* USER CODE END USART1_Init 2 */
  442.  
  443. }
  444.  
  445. /**
  446. * @brief RF Initialization Function
  447. * @param None
  448. * @retval None
  449. */
  450. static void MX_RF_Init(void)
  451. {
  452.  
  453. /* USER CODE BEGIN RF_Init 0 */
  454.  
  455. /* USER CODE END RF_Init 0 */
  456.  
  457. /* USER CODE BEGIN RF_Init 1 */
  458.  
  459. /* USER CODE END RF_Init 1 */
  460. /* USER CODE BEGIN RF_Init 2 */
  461.  
  462. /* USER CODE END RF_Init 2 */
  463.  
  464. }
  465.  
  466. /**
  467. * @brief RTC Initialization Function
  468. * @param None
  469. * @retval None
  470. */
  471. static void MX_RTC_Init(void)
  472. {
  473.  
  474. /* USER CODE BEGIN RTC_Init 0 */
  475.  
  476. /* USER CODE END RTC_Init 0 */
  477.  
  478. /* USER CODE BEGIN RTC_Init 1 */
  479.  
  480. /* USER CODE END RTC_Init 1 */
  481. /** Initialize RTC Only
  482. */
  483. hrtc.Instance = RTC;
  484. hrtc.Init.HourFormat = RTC_HOURFORMAT_24;
  485. hrtc.Init.AsynchPrediv = CFG_RTC_ASYNCH_PRESCALER;
  486. hrtc.Init.SynchPrediv = CFG_RTC_SYNCH_PRESCALER;
  487. hrtc.Init.OutPut = RTC_OUTPUT_DISABLE;
  488. hrtc.Init.OutPutPolarity = RTC_OUTPUT_POLARITY_HIGH;
  489. hrtc.Init.OutPutType = RTC_OUTPUT_TYPE_OPENDRAIN;
  490. hrtc.Init.OutPutRemap = RTC_OUTPUT_REMAP_NONE;
  491. if (HAL_RTC_Init(&hrtc) != HAL_OK)
  492. {
  493. Error_Handler();
  494. }
  495. /** Enable the WakeUp
  496. */
  497. if (HAL_RTCEx_SetWakeUpTimer_IT(&hrtc, 0, RTC_WAKEUPCLOCK_RTCCLK_DIV16) != HAL_OK)
  498. {
  499. Error_Handler();
  500. }
  501. /* USER CODE BEGIN RTC_Init 2 */
  502.  
  503. /* USER CODE END RTC_Init 2 */
  504.  
  505. }
  506.  
  507. /**
  508. * Enable DMA controller clock
  509. */
  510. static void MX_DMA_Init(void)
  511. {
  512.  
  513. /* DMA controller clock enable */
  514. __HAL_RCC_DMAMUX1_CLK_ENABLE();
  515. __HAL_RCC_DMA1_CLK_ENABLE();
  516.  
  517. /* DMA interrupt init */
  518. /* DMA1_Channel1_IRQn interrupt configuration */
  519. HAL_NVIC_SetPriority(DMA1_Channel1_IRQn, 0, 0);
  520. HAL_NVIC_EnableIRQ(DMA1_Channel1_IRQn);
  521. /* DMA1_Channel2_IRQn interrupt configuration */
  522. HAL_NVIC_SetPriority(DMA1_Channel2_IRQn, 0, 0);
  523. HAL_NVIC_EnableIRQ(DMA1_Channel2_IRQn);
  524.  
  525. }
  526.  
  527. /**
  528. * @brief GPIO Initialization Function
  529. * @param None
  530. * @retval None
  531. */
  532. static void MX_GPIO_Init(void)
  533. {
  534. GPIO_InitTypeDef GPIO_InitStruct = {0};
  535.  
  536. /* GPIO Ports Clock Enable */
  537. __HAL_RCC_GPIOC_CLK_ENABLE();
  538. __HAL_RCC_GPIOB_CLK_ENABLE();
  539. __HAL_RCC_GPIOA_CLK_ENABLE();
  540.  
  541. /*Configure GPIO pin Output Level */
  542. HAL_GPIO_WritePin(Green_LED_GPIO_Port, Green_LED_Pin, GPIO_PIN_RESET);
  543.  
  544. /*Configure GPIO pin : Green_LED_Pin */
  545. GPIO_InitStruct.Pin = Green_LED_Pin;
  546. GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  547. GPIO_InitStruct.Pull = GPIO_NOPULL;
  548. GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  549. HAL_GPIO_Init(Green_LED_GPIO_Port, &GPIO_InitStruct);
  550.  
  551. }
  552.  
  553. /* USER CODE BEGIN 4 */
  554.  
  555. /* USER CODE END 4 */
  556.  
  557. /**
  558. * @brief This function is executed in case of error occurrence.
  559. * @retval None
  560. */
  561. void Error_Handler(void)
  562. {
  563. /* USER CODE BEGIN Error_Handler_Debug */
  564. /* User can add his own implementation to report the HAL error return state */
  565.  
  566. /* USER CODE END Error_Handler_Debug */
  567. }
  568.  
  569. #ifdef USE_FULL_ASSERT
  570. /**
  571. * @brief Reports the name of the source file and the source line number
  572. * where the assert_param error has occurred.
  573. * @param file: pointer to the source file name
  574. * @param line: assert_param error line source number
  575. * @retval None
  576. */
  577. void assert_failed(uint8_t *file, uint32_t line)
  578. {
  579. /* USER CODE BEGIN 6 */
  580. /* User can add his own implementation to report the file name and line number,
  581. ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
  582. /* USER CODE END 6 */
  583. }
  584. #endif /* USE_FULL_ASSERT */
  585.  
  586.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement