Advertisement
Guest User

Untitled

a guest
Oct 21st, 2019
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.93 KB | None | 0 0
  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.  
  21. /* Includes ------------------------------------------------------------------*/
  22. #include "main.h"
  23.  
  24. /* Private includes ----------------------------------------------------------*/
  25. /* USER CODE BEGIN Includes */
  26. #include <stdio.h>
  27. /* USER CODE END Includes */
  28.  
  29. /* Private typedef -----------------------------------------------------------*/
  30. /* USER CODE BEGIN PTD */
  31. typedef enum {
  32. HONEYWELL_HSC_STATUS_OK = 0x00,
  33. HONEYWELL_HSC_STATUS_CMD_MODE = 0x01,
  34. HONEYWELL_HSC_STATUS_STALE_DATA = 0x02,
  35. HONEYWELL_HSC_STATUS_HW_FAULT = 0x03,
  36. HONEYWELL_HSC_STATUS_I2C_ERROR = 0x10
  37. } HoneywellHSC_StatusTypeDef;
  38. /* USER CODE END PTD */
  39.  
  40. /* Private define ------------------------------------------------------------*/
  41. /* USER CODE BEGIN PD */
  42.  
  43. /* USER CODE END PD */
  44.  
  45. /* Private macro -------------------------------------------------------------*/
  46. /* USER CODE BEGIN PM */
  47. #define SIZE 10
  48.  
  49. /* USER CODE END PM */
  50.  
  51. /* Private variables ---------------------------------------------------------*/
  52. SPI_HandleTypeDef hspi1;
  53.  
  54. TIM_HandleTypeDef htim2;
  55.  
  56. UART_HandleTypeDef huart2;
  57.  
  58. /* USER CODE BEGIN PV */
  59. uint8_t volatile measurementCounter = 0;
  60. uint8_t volatile currMeasurementsPosition = 0;
  61. uint16_t volatile currentMeasurement;
  62. uint16_t volatile measurements[SIZE];
  63. uint32_t globalCnt = 0;
  64. /* USER CODE END PV */
  65.  
  66. /* Private function prototypes -----------------------------------------------*/
  67. void SystemClock_Config(void);
  68. static void MX_GPIO_Init(void);
  69. static void MX_USART2_UART_Init(void);
  70. static void MX_SPI1_Init(void);
  71. static void MX_TIM2_Init(void);
  72. /* USER CODE BEGIN PFP */
  73. HoneywellHSC_StatusTypeDef readHSC(uint16_t *pressData);
  74. float averageMeasurements(uint16_t *measurementsTable, uint8_t size);
  75.  
  76. /* USER CODE END PFP */
  77.  
  78. /* Private user code ---------------------------------------------------------*/
  79. /* USER CODE BEGIN 0 */
  80.  
  81. /* USER CODE END 0 */
  82.  
  83. /**
  84. * @brief The application entry point.
  85. * @retval int
  86. */
  87. int main(void)
  88. {
  89. /* USER CODE BEGIN 1 */
  90.  
  91. /* USER CODE END 1 */
  92.  
  93.  
  94. /* MCU Configuration--------------------------------------------------------*/
  95.  
  96. /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  97. HAL_Init();
  98.  
  99. /* USER CODE BEGIN Init */
  100.  
  101. /* USER CODE END Init */
  102.  
  103. /* Configure the system clock */
  104. SystemClock_Config();
  105.  
  106. /* USER CODE BEGIN SysInit */
  107.  
  108. /* USER CODE END SysInit */
  109.  
  110. /* Initialize all configured peripherals */
  111. MX_GPIO_Init();
  112. MX_USART2_UART_Init();
  113. MX_SPI1_Init();
  114. MX_TIM2_Init();
  115. /* USER CODE BEGIN 2 */
  116. HAL_NVIC_SetPriority(TIM2_IRQn, 0, 0);
  117. HAL_NVIC_EnableIRQ(TIM2_IRQn);
  118. HAL_TIM_Base_Start_IT(&htim2);//(&htim2, TIM_CHANNEL_ALL);
  119. HAL_SPI_Init(&hspi1);
  120.  
  121. /* USER CODE END 2 */
  122.  
  123. /* Infinite loop */
  124. /* USER CODE BEGIN WHILE */
  125. char data[5] = "HWDP\0";
  126. uint32_t licznik = 0;
  127. char sstring[100] = {0};
  128. uint16_t stringLength = 0;
  129. uint16_t pressData = 0;
  130. uint8_t stat;
  131. float averagedMeasurements = 0;
  132. while (1)
  133. {
  134. //HAL_GPIO_TogglePin(LD3_GPIO_Port, LD3_Pin);
  135. //HAL_UART_Transmit(&huart2, &data, 5, 1);
  136. HAL_Delay(1000);
  137. //licznik = __HAL_TIM_GET_COUNTER(&htim2);
  138. globalCnt++;
  139. averagedMeasurements = averageMeasurements(measurements, SIZE);
  140. stringLength = sprintf(sstring, "%d\t %lu\n", globalCnt, (uint16_t)averagedMeasurements);
  141. HAL_UART_Transmit(&huart2, sstring, stringLength, 15);
  142. /* USER CODE END WHILE */
  143.  
  144. /* USER CODE BEGIN 3 */
  145. }
  146. /* USER CODE END 3 */
  147. }
  148.  
  149. /**
  150. * @brief System Clock Configuration
  151. * @retval None
  152. */
  153. void SystemClock_Config(void)
  154. {
  155. RCC_OscInitTypeDef RCC_OscInitStruct = {0};
  156. RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
  157. RCC_PeriphCLKInitTypeDef PeriphClkInit = {0};
  158.  
  159. /** Configure the main internal regulator output voltage
  160. */
  161. __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
  162. /** Initializes the CPU, AHB and APB busses clocks
  163. */
  164. RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
  165. RCC_OscInitStruct.HSIState = RCC_HSI_ON;
  166. RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
  167. RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  168. RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI;
  169. RCC_OscInitStruct.PLL.PLLMUL = RCC_PLLMUL_4;
  170. RCC_OscInitStruct.PLL.PLLDIV = RCC_PLLDIV_2;
  171. if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
  172. {
  173. Error_Handler();
  174. }
  175. /** Initializes the CPU, AHB and APB busses clocks
  176. */
  177. RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
  178. |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
  179. RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
  180. RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  181. RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
  182. RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
  183.  
  184. if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_1) != HAL_OK)
  185. {
  186. Error_Handler();
  187. }
  188. PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_USART2;
  189. PeriphClkInit.Usart2ClockSelection = RCC_USART2CLKSOURCE_PCLK1;
  190. if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK)
  191. {
  192. Error_Handler();
  193. }
  194. }
  195.  
  196. /**
  197. * @brief SPI1 Initialization Function
  198. * @param None
  199. * @retval None
  200. */
  201. static void MX_SPI1_Init(void)
  202. {
  203.  
  204. /* USER CODE BEGIN SPI1_Init 0 */
  205.  
  206. /* USER CODE END SPI1_Init 0 */
  207.  
  208. /* USER CODE BEGIN SPI1_Init 1 */
  209.  
  210. /* USER CODE END SPI1_Init 1 */
  211. /* SPI1 parameter configuration*/
  212. hspi1.Instance = SPI1;
  213. hspi1.Init.Mode = SPI_MODE_MASTER;
  214. hspi1.Init.Direction = SPI_DIRECTION_2LINES;
  215. hspi1.Init.DataSize = SPI_DATASIZE_8BIT;
  216. hspi1.Init.CLKPolarity = SPI_POLARITY_LOW;
  217. hspi1.Init.CLKPhase = SPI_PHASE_1EDGE;
  218. hspi1.Init.NSS = SPI_NSS_SOFT;
  219. hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_256;
  220. hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB;
  221. hspi1.Init.TIMode = SPI_TIMODE_DISABLE;
  222. hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
  223. hspi1.Init.CRCPolynomial = 7;
  224. if (HAL_SPI_Init(&hspi1) != HAL_OK)
  225. {
  226. Error_Handler();
  227. }
  228. /* USER CODE BEGIN SPI1_Init 2 */
  229.  
  230. /* USER CODE END SPI1_Init 2 */
  231.  
  232. }
  233.  
  234. /**
  235. * @brief TIM2 Initialization Function
  236. * @param None
  237. * @retval None
  238. */
  239. static void MX_TIM2_Init(void)
  240. {
  241.  
  242. /* USER CODE BEGIN TIM2_Init 0 */
  243.  
  244. /* USER CODE END TIM2_Init 0 */
  245.  
  246. TIM_ClockConfigTypeDef sClockSourceConfig = {0};
  247. TIM_MasterConfigTypeDef sMasterConfig = {0};
  248.  
  249. /* USER CODE BEGIN TIM2_Init 1 */
  250.  
  251. /* USER CODE END TIM2_Init 1 */
  252. htim2.Instance = TIM2;
  253. htim2.Init.Prescaler = 32000-1;
  254. htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
  255. htim2.Init.Period = 99;
  256. htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  257. htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
  258. if (HAL_TIM_Base_Init(&htim2) != HAL_OK)
  259. {
  260. Error_Handler();
  261. }
  262. sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
  263. if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK)
  264. {
  265. Error_Handler();
  266. }
  267. sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
  268. sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
  269. if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK)
  270. {
  271. Error_Handler();
  272. }
  273. /* USER CODE BEGIN TIM2_Init 2 */
  274.  
  275. /* USER CODE END TIM2_Init 2 */
  276.  
  277. }
  278.  
  279. /**
  280. * @brief USART2 Initialization Function
  281. * @param None
  282. * @retval None
  283. */
  284. static void MX_USART2_UART_Init(void)
  285. {
  286.  
  287. /* USER CODE BEGIN USART2_Init 0 */
  288.  
  289. /* USER CODE END USART2_Init 0 */
  290.  
  291. /* USER CODE BEGIN USART2_Init 1 */
  292.  
  293. /* USER CODE END USART2_Init 1 */
  294. huart2.Instance = USART2;
  295. huart2.Init.BaudRate = 115200;
  296. huart2.Init.WordLength = UART_WORDLENGTH_8B;
  297. huart2.Init.StopBits = UART_STOPBITS_1;
  298. huart2.Init.Parity = UART_PARITY_NONE;
  299. huart2.Init.Mode = UART_MODE_TX_RX;
  300. huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  301. huart2.Init.OverSampling = UART_OVERSAMPLING_16;
  302. huart2.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
  303. huart2.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
  304. if (HAL_UART_Init(&huart2) != HAL_OK)
  305. {
  306. Error_Handler();
  307. }
  308. /* USER CODE BEGIN USART2_Init 2 */
  309.  
  310. /* USER CODE END USART2_Init 2 */
  311.  
  312. }
  313.  
  314. /**
  315. * @brief GPIO Initialization Function
  316. * @param None
  317. * @retval None
  318. */
  319. static void MX_GPIO_Init(void)
  320. {
  321. GPIO_InitTypeDef GPIO_InitStruct = {0};
  322.  
  323. /* GPIO Ports Clock Enable */
  324. __HAL_RCC_GPIOC_CLK_ENABLE();
  325. __HAL_RCC_GPIOA_CLK_ENABLE();
  326. __HAL_RCC_GPIOB_CLK_ENABLE();
  327.  
  328. /*Configure GPIO pin Output Level */
  329. HAL_GPIO_WritePin(HSC_SS_GPIO_Port, HSC_SS_Pin, GPIO_PIN_RESET);
  330.  
  331. /*Configure GPIO pin Output Level */
  332. HAL_GPIO_WritePin(LD3_GPIO_Port, LD3_Pin, GPIO_PIN_RESET);
  333.  
  334. /*Configure GPIO pin : HSC_SS_Pin */
  335. GPIO_InitStruct.Pin = HSC_SS_Pin;
  336. GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  337. GPIO_InitStruct.Pull = GPIO_NOPULL;
  338. GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  339. HAL_GPIO_Init(HSC_SS_GPIO_Port, &GPIO_InitStruct);
  340.  
  341. /*Configure GPIO pin : LD3_Pin */
  342. GPIO_InitStruct.Pin = LD3_Pin;
  343. GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  344. GPIO_InitStruct.Pull = GPIO_NOPULL;
  345. GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  346. HAL_GPIO_Init(LD3_GPIO_Port, &GPIO_InitStruct);
  347.  
  348. }
  349.  
  350. /* USER CODE BEGIN 4 */
  351.  
  352. void TIM2_IRQ_Handler(void) {
  353. HAL_TIM_IRQHandler(&htim2);
  354. }
  355.  
  356. void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *timer){
  357. //if (timer == &htim2) {
  358.  
  359. char buffer[100];
  360. uint16_t len = 0;
  361.  
  362. currMeasurementsPosition++;
  363. if (currMeasurementsPosition == SIZE) {
  364. currMeasurementsPosition = 0;
  365. }
  366.  
  367. HAL_GPIO_TogglePin(LD3_GPIO_Port, LD3_Pin);
  368. readHSC(&currentMeasurement);
  369. measurements[currMeasurementsPosition] = currentMeasurement;
  370. measurementCounter++;
  371. if (measurementCounter == 50) {
  372. len = sprintf(buffer, "Licznik: %d \n\r", currentMeasurement);
  373. //HAL_UART_Transmit(&huart2, buffer, len+1, 20);
  374. measurementCounter = 0;
  375. }
  376. //}
  377. }
  378.  
  379. float averageMeasurements(uint16_t *measurementsTable, uint8_t size) {
  380.  
  381. int temp = 0;
  382. for (int i = 0; i < size; i++) {
  383. temp += (float)measurementsTable[i];
  384. }
  385. return temp/((float)size);
  386. }
  387.  
  388. HoneywellHSC_StatusTypeDef readHSC(uint16_t *pressData){
  389. uint8_t buffer1, buffer2;
  390. uint8_t buffer[50] = {0};
  391. HAL_GPIO_WritePin(HSC_SS_GPIO_Port, HSC_SS_Pin, GPIO_PIN_RESET);
  392. HAL_SPI_Receive(&hspi1, &buffer1, 1, 5);
  393. HAL_SPI_Receive(&hspi1, &buffer2, 1, 5);
  394. HAL_GPIO_WritePin(HSC_SS_GPIO_Port, HSC_SS_Pin, GPIO_PIN_SET);
  395. *pressData = ((uint16_t)(buffer1 << 8)) | ((uint16_t)(buffer2));
  396. uint8_t status = buffer1 >> 6;
  397. //sprintf(buffer, "---BYTES: %02X, %02X --- STATUS: %02X \n\r", buffer1, buffer2, status);
  398. //HAL_UART_Transmit(&huart2, buffer, 50, 15);
  399. return status;
  400. }
  401. /* USER CODE END 4 */
  402.  
  403. /**
  404. * @brief This function is executed in case of error occurrence.
  405. * @retval None
  406. */
  407. void Error_Handler(void)
  408. {
  409. /* USER CODE BEGIN Error_Handler_Debug */
  410. /* User can add his own implementation to report the HAL error return state */
  411.  
  412. /* USER CODE END Error_Handler_Debug */
  413. }
  414.  
  415. #ifdef USE_FULL_ASSERT
  416. /**
  417. * @brief Reports the name of the source file and the source line number
  418. * where the assert_param error has occurred.
  419. * @param file: pointer to the source file name
  420. * @param line: assert_param error line source number
  421. * @retval None
  422. */
  423. void assert_failed(uint8_t *file, uint32_t line)
  424. {
  425. /* USER CODE BEGIN 6 */
  426. /* User can add his own implementation to report the file name and line number,
  427. tex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
  428. /* USER CODE END 6 */
  429. }
  430. #endif /* USE_FULL_ASSERT */
  431.  
  432. /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement