Rev 9 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 9 | Rev 10 | ||
|---|---|---|---|
| Line 38... | Line 38... | ||
| 38 | /* USER CODE BEGIN PM */ |
38 | /* USER CODE BEGIN PM */ |
| 39 | 39 | ||
| 40 | /* USER CODE END PM */ |
40 | /* USER CODE END PM */ |
| 41 | 41 | ||
| 42 | /* Private variables ---------------------------------------------------------*/ |
42 | /* Private variables ---------------------------------------------------------*/ |
| 43 | I2C_HandleTypeDef hi2c1; |
43 | I2C_HandleTypeDef hi2c1; |
| 44 | 44 | ||
| 45 | SPI_HandleTypeDef hspi1; |
45 | SPI_HandleTypeDef hspi1; |
| 46 | 46 | ||
| 47 | /* USER CODE BEGIN PV */ |
47 | /* USER CODE BEGIN PV */ |
| 48 | 48 | ||
| Line 58... | Line 58... | ||
| 58 | /* USER CODE END PFP */ |
58 | /* USER CODE END PFP */ |
| 59 | 59 | ||
| 60 | /* Private user code ---------------------------------------------------------*/ |
60 | /* Private user code ---------------------------------------------------------*/ |
| 61 | /* USER CODE BEGIN 0 */ |
61 | /* USER CODE BEGIN 0 */ |
| 62 | 62 | ||
| 63 | void HAL_GPIO_WRITE_ODR(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin) |
63 | void HAL_GPIO_WRITE_ODR(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin) |
| 64 | { |
64 | { |
| 65 | /* Check the parameters */ |
65 | /* Check the parameters */ |
| 66 | assert_param(IS_GPIO_PIN(GPIO_Pin)); |
66 | assert_param(IS_GPIO_PIN(GPIO_Pin)); |
| 67 | 67 | ||
| 68 | GPIOx->ODR |= GPIO_Pin; |
68 | GPIOx->ODR |= GPIO_Pin; |
| 69 | } |
69 | } |
| 70 | 70 | ||
| 71 | - | ||
| 72 | /** Errata code from Stack Overflow |
71 | /** Errata code from Stack Overflow |
| 73 | 1. Disable the I2C peripheral by clearing the PE bit in I2Cx_CR1 register. |
72 | 1. Disable the I2C peripheral by clearing the PE bit in I2Cx_CR1 register. |
| 74 | 2. Configure the SCL and SDA I/Os as General Purpose Output Open-Drain, High level |
73 | 2. Configure the SCL and SDA I/Os as General Purpose Output Open-Drain, High level |
| 75 | (Write 1 to GPIOx_ODR). |
74 | (Write 1 to GPIOx_ODR). |
| 76 | 3. Check SCL and SDA High level in GPIOx_IDR. |
75 | 3. Check SCL and SDA High level in GPIOx_IDR. |
| 77 | 4. Configure the SDA I/O as General Purpose Output Open-Drain, Low level (Write 0 to |
76 | 4. Configure the SDA I/O as General Purpose Output Open-Drain, Low level (Write 0 to |
| Line 98... | Line 97... | ||
| 98 | static uint8_t resetTried = 0; |
97 | static uint8_t resetTried = 0; |
| 99 | if (resetTried == 1) |
98 | if (resetTried == 1) |
| 100 | { |
99 | { |
| 101 | return; |
100 | return; |
| 102 | } |
101 | } |
| 103 | uint32_t const SDA_PIN = GPIO_PIN_7; |
102 | uint32_t const SDA_PIN = GPIO_PIN_7; |
| 104 | uint32_t const SCL_PIN = GPIO_PIN_6; |
103 | uint32_t const SCL_PIN = GPIO_PIN_6; |
| 105 | GPIO_InitTypeDef GPIO_InitStruct; |
104 | GPIO_InitTypeDef GPIO_InitStruct; |
| 106 | 105 | ||
| 107 | // 1 |
106 | // 1 |
| 108 | __HAL_I2C_DISABLE(hi2c); |
107 | __HAL_I2C_DISABLE(hi2c); |
| Line 189... | Line 188... | ||
| 189 | } |
188 | } |
| 190 | 189 | ||
| 191 | // 12 |
190 | // 12 |
| 192 | GPIO_InitStruct.Pin = SDA_PIN | SCL_PIN; |
191 | GPIO_InitStruct.Pin = SDA_PIN | SCL_PIN; |
| 193 | GPIO_InitStruct.Mode = GPIO_MODE_AF_OD; |
192 | GPIO_InitStruct.Mode = GPIO_MODE_AF_OD; |
| 194 | GPIO_InitStruct.Pull = GPIO_PULLUP; |
193 | GPIO_InitStruct.Pull = GPIO_PULLUP; |
| 195 | HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); |
194 | HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); |
| 196 | 195 | ||
| 197 | // 13 |
196 | // 13 |
| 198 | hi2c->Instance->CR1 |= I2C_CR1_SWRST; |
197 | hi2c->Instance->CR1 |= I2C_CR1_SWRST; |
| 199 | 198 | ||
| Line 207... | Line 206... | ||
| 207 | } |
206 | } |
| 208 | 207 | ||
| 209 | /* USER CODE END 0 */ |
208 | /* USER CODE END 0 */ |
| 210 | 209 | ||
| 211 | /** |
210 | /** |
| 212 | * @brief The application entry point. |
211 | * @brief The application entry point. |
| 213 | * @retval int |
212 | * @retval int |
| 214 | */ |
213 | */ |
| 215 | int main(void) |
214 | int main(void) |
| 216 | { |
215 | { |
| 217 | /* USER CODE BEGIN 1 */ |
216 | /* USER CODE BEGIN 1 */ |
| 218 | 217 | ||
| 219 | /* USER CODE END 1 */ |
218 | /* USER CODE END 1 */ |
| Line 266... | Line 265... | ||
| 266 | if (rslt == 0) |
265 | if (rslt == 0) |
| 267 | { |
266 | { |
| 268 | uint8_t rslt2 = bmp280_get_comp_pres_32bit(&comp_pres, ucomp_data.uncomp_press, &bmp); |
267 | uint8_t rslt2 = bmp280_get_comp_pres_32bit(&comp_pres, ucomp_data.uncomp_press, &bmp); |
| 269 | 268 | ||
| 270 | uint8_t rslt3 = bmp280_get_comp_temp_32bit(&comp_temp, ucomp_data.uncomp_temp, &bmp); |
269 | uint8_t rslt3 = bmp280_get_comp_temp_32bit(&comp_temp, ucomp_data.uncomp_temp, &bmp); |
| - | 270 | ||
| - | 271 | cc_feed(comp_pres, comp_temp); |
|
| 271 | } |
272 | } |
| 272 | } |
273 | } |
| 273 | /* USER CODE END WHILE */ |
274 | /* USER CODE END WHILE */ |
| 274 | 275 | ||
| 275 | /* USER CODE BEGIN 3 */ |
276 | /* USER CODE BEGIN 3 */ |
| 276 | } |
277 | } |
| 277 | /* USER CODE END 3 */ |
278 | /* USER CODE END 3 */ |
| 278 | } |
279 | } |
| 279 | 280 | ||
| 280 | /** |
281 | /** |
| 281 | * @brief System Clock Configuration |
282 | * @brief System Clock Configuration |
| 282 | * @retval None |
283 | * @retval None |
| 283 | */ |
284 | */ |
| 284 | void SystemClock_Config(void) |
285 | void SystemClock_Config(void) |
| 285 | { |
286 | { |
| 286 | RCC_OscInitTypeDef RCC_OscInitStruct = {0}; |
287 | RCC_OscInitTypeDef RCC_OscInitStruct = {0}; |
| 287 | RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; |
288 | RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; |
| 288 | 289 | ||
| 289 | /** Initializes the RCC Oscillators according to the specified parameters |
290 | /** Initializes the RCC Oscillators according to the specified parameters |
| 290 | * in the RCC_OscInitTypeDef structure. |
291 | * in the RCC_OscInitTypeDef structure. |
| 291 | */ |
292 | */ |
| 292 | RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; |
293 | RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; |
| 293 | RCC_OscInitStruct.HSEState = RCC_HSE_ON; |
294 | RCC_OscInitStruct.HSEState = RCC_HSE_ON; |
| 294 | RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1; |
295 | RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1; |
| 295 | RCC_OscInitStruct.HSIState = RCC_HSI_ON; |
296 | RCC_OscInitStruct.HSIState = RCC_HSI_ON; |
| 296 | RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; |
297 | RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; |
| Line 300... | Line 301... | ||
| 300 | { |
301 | { |
| 301 | Error_Handler(); |
302 | Error_Handler(); |
| 302 | } |
303 | } |
| 303 | 304 | ||
| 304 | /** Initializes the CPU, AHB and APB buses clocks |
305 | /** Initializes the CPU, AHB and APB buses clocks |
| 305 | */ |
306 | */ |
| 306 | RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK |
307 | RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2; |
| 307 | |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; |
- | |
| 308 | RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; |
308 | RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; |
| 309 | RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; |
309 | RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; |
| 310 | RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; |
310 | RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; |
| 311 | RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; |
311 | RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; |
| 312 | 312 | ||
| Line 315... | Line 315... | ||
| 315 | Error_Handler(); |
315 | Error_Handler(); |
| 316 | } |
316 | } |
| 317 | } |
317 | } |
| 318 | 318 | ||
| 319 | /** |
319 | /** |
| 320 | * @brief I2C1 Initialization Function |
320 | * @brief I2C1 Initialization Function |
| 321 | * @param None |
321 | * @param None |
| 322 | * @retval None |
322 | * @retval None |
| 323 | */ |
323 | */ |
| 324 | static void MX_I2C1_Init(void) |
324 | static void MX_I2C1_Init(void) |
| 325 | { |
325 | { |
| 326 | 326 | ||
| 327 | /* USER CODE BEGIN I2C1_Init 0 */ |
327 | /* USER CODE BEGIN I2C1_Init 0 */ |
| 328 | 328 | ||
| Line 345... | Line 345... | ||
| 345 | Error_Handler(); |
345 | Error_Handler(); |
| 346 | } |
346 | } |
| 347 | /* USER CODE BEGIN I2C1_Init 2 */ |
347 | /* USER CODE BEGIN I2C1_Init 2 */ |
| 348 | 348 | ||
| 349 | /* USER CODE END I2C1_Init 2 */ |
349 | /* USER CODE END I2C1_Init 2 */ |
| 350 | - | ||
| 351 | } |
350 | } |
| 352 | 351 | ||
| 353 | /** |
352 | /** |
| 354 | * @brief SPI1 Initialization Function |
353 | * @brief SPI1 Initialization Function |
| 355 | * @param None |
354 | * @param None |
| 356 | * @retval None |
355 | * @retval None |
| 357 | */ |
356 | */ |
| 358 | static void MX_SPI1_Init(void) |
357 | static void MX_SPI1_Init(void) |
| 359 | { |
358 | { |
| 360 | 359 | ||
| 361 | /* USER CODE BEGIN SPI1_Init 0 */ |
360 | /* USER CODE BEGIN SPI1_Init 0 */ |
| 362 | 361 | ||
| Line 383... | Line 382... | ||
| 383 | Error_Handler(); |
382 | Error_Handler(); |
| 384 | } |
383 | } |
| 385 | /* USER CODE BEGIN SPI1_Init 2 */ |
384 | /* USER CODE BEGIN SPI1_Init 2 */ |
| 386 | 385 | ||
| 387 | /* USER CODE END SPI1_Init 2 */ |
386 | /* USER CODE END SPI1_Init 2 */ |
| 388 | - | ||
| 389 | } |
387 | } |
| 390 | 388 | ||
| 391 | /** |
389 | /** |
| 392 | * @brief GPIO Initialization Function |
390 | * @brief GPIO Initialization Function |
| 393 | * @param None |
391 | * @param None |
| 394 | * @retval None |
392 | * @retval None |
| 395 | */ |
393 | */ |
| 396 | static void MX_GPIO_Init(void) |
394 | static void MX_GPIO_Init(void) |
| 397 | { |
395 | { |
| 398 | GPIO_InitTypeDef GPIO_InitStruct = {0}; |
396 | GPIO_InitTypeDef GPIO_InitStruct = {0}; |
| 399 | 397 | ||
| 400 | /* GPIO Ports Clock Enable */ |
398 | /* GPIO Ports Clock Enable */ |
| 401 | __HAL_RCC_GPIOD_CLK_ENABLE(); |
399 | __HAL_RCC_GPIOD_CLK_ENABLE(); |
| 402 | __HAL_RCC_GPIOA_CLK_ENABLE(); |
400 | __HAL_RCC_GPIOA_CLK_ENABLE(); |
| 403 | __HAL_RCC_GPIOB_CLK_ENABLE(); |
401 | __HAL_RCC_GPIOB_CLK_ENABLE(); |
| 404 | 402 | ||
| 405 | /*Configure GPIO pin Output Level */ |
403 | /*Configure GPIO pin Output Level */ |
| 406 | HAL_GPIO_WritePin(GPIOA, SPI_NSS1_Pin|SPI_RESET_Pin, GPIO_PIN_RESET); |
404 | HAL_GPIO_WritePin(GPIOA, SPI_NSS1_Pin | SPI_RESET_Pin, GPIO_PIN_RESET); |
| 407 | 405 | ||
| 408 | /*Configure GPIO pin Output Level */ |
406 | /*Configure GPIO pin Output Level */ |
| 409 | HAL_GPIO_WritePin(SPI_CD_GPIO_Port, SPI_CD_Pin, GPIO_PIN_RESET); |
407 | HAL_GPIO_WritePin(SPI_CD_GPIO_Port, SPI_CD_Pin, GPIO_PIN_RESET); |
| 410 | 408 | ||
| 411 | /*Configure GPIO pins : SPI_NSS1_Pin SPI_RESET_Pin */ |
409 | /*Configure GPIO pins : SPI_NSS1_Pin SPI_RESET_Pin */ |
| 412 | GPIO_InitStruct.Pin = SPI_NSS1_Pin|SPI_RESET_Pin; |
410 | GPIO_InitStruct.Pin = SPI_NSS1_Pin | SPI_RESET_Pin; |
| 413 | GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; |
411 | GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; |
| 414 | GPIO_InitStruct.Pull = GPIO_NOPULL; |
412 | GPIO_InitStruct.Pull = GPIO_NOPULL; |
| 415 | GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; |
413 | GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; |
| 416 | HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); |
414 | HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); |
| 417 | 415 | ||
| Line 419... | Line 417... | ||
| 419 | GPIO_InitStruct.Pin = SPI_CD_Pin; |
417 | GPIO_InitStruct.Pin = SPI_CD_Pin; |
| 420 | GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; |
418 | GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; |
| 421 | GPIO_InitStruct.Pull = GPIO_NOPULL; |
419 | GPIO_InitStruct.Pull = GPIO_NOPULL; |
| 422 | GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; |
420 | GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; |
| 423 | HAL_GPIO_Init(SPI_CD_GPIO_Port, &GPIO_InitStruct); |
421 | HAL_GPIO_Init(SPI_CD_GPIO_Port, &GPIO_InitStruct); |
| 424 | - | ||
| 425 | } |
422 | } |
| 426 | 423 | ||
| 427 | /* USER CODE BEGIN 4 */ |
424 | /* USER CODE BEGIN 4 */ |
| 428 | 425 | ||
| 429 | /* USER CODE END 4 */ |
426 | /* USER CODE END 4 */ |
| 430 | 427 | ||
| 431 | /** |
428 | /** |
| 432 | * @brief This function is executed in case of error occurrence. |
429 | * @brief This function is executed in case of error occurrence. |
| 433 | * @retval None |
430 | * @retval None |
| 434 | */ |
431 | */ |
| 435 | void Error_Handler(void) |
432 | void Error_Handler(void) |
| 436 | { |
433 | { |
| 437 | /* USER CODE BEGIN Error_Handler_Debug */ |
434 | /* USER CODE BEGIN Error_Handler_Debug */ |
| 438 | /* User can add his own implementation to report the HAL error return state */ |
435 | /* User can add his own implementation to report the HAL error return state */ |
| 439 | __disable_irq(); |
436 | __disable_irq(); |
| Line 441... | Line 438... | ||
| 441 | { |
438 | { |
| 442 | } |
439 | } |
| 443 | /* USER CODE END Error_Handler_Debug */ |
440 | /* USER CODE END Error_Handler_Debug */ |
| 444 | } |
441 | } |
| 445 | 442 | ||
| 446 | #ifdef USE_FULL_ASSERT |
443 | #ifdef USE_FULL_ASSERT |
| 447 | /** |
444 | /** |
| 448 | * @brief Reports the name of the source file and the source line number |
445 | * @brief Reports the name of the source file and the source line number |
| 449 | * where the assert_param error has occurred. |
446 | * where the assert_param error has occurred. |
| 450 | * @param file: pointer to the source file name |
447 | * @param file: pointer to the source file name |
| 451 | * @param line: assert_param error line source number |
448 | * @param line: assert_param error line source number |
| 452 | * @retval None |
449 | * @retval None |
| 453 | */ |
450 | */ |
| 454 | void assert_failed(uint8_t *file, uint32_t line) |
451 | void assert_failed(uint8_t *file, uint32_t line) |
| 455 | { |
452 | { |
| 456 | /* USER CODE BEGIN 6 */ |
453 | /* USER CODE BEGIN 6 */ |
| 457 | /* User can add his own implementation to report the file name and line number, |
454 | /* User can add his own implementation to report the file name and line number, |
| 458 | ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ |
455 | ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ |