Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* USER CODE BEGIN Header */
- /**
- ******************************************************************************
- * @file : main.c
- * @brief : Main program body
- ******************************************************************************
- * @attention
- *
- * <h2><center>© Copyright (c) 2019 STMicroelectronics.
- * All rights reserved.</center></h2>
- *
- * This software component is licensed by ST under BSD 3-Clause license,
- * the "License"; You may not use this file except in compliance with the
- * License. You may obtain a copy of the License at:
- * opensource.org/licenses/BSD-3-Clause
- *
- ******************************************************************************
- */
- /* USER CODE END Header */
- /* Includes ------------------------------------------------------------------*/
- #include "main.h"
- /* Private includes ----------------------------------------------------------*/
- /* USER CODE BEGIN Includes */
- /* USER CODE END Includes */
- /* Private typedef -----------------------------------------------------------*/
- /* USER CODE BEGIN PTD */
- /* USER CODE END PTD */
- /* Private define ------------------------------------------------------------*/
- /* USER CODE BEGIN PD */
- #define ALL_SEG_OFF() LL_GPIO_SetOutputPin(SEG_PORT,SH|SG|SF|SE|SD|SC|SB|SA);
- #define I2C_REQUEST_WRITE 0x00
- #define I2C_REQUEST_READ 0x01
- #define SLAVE_OWN_ADDRESS 0xEE
- /* USER CODE END PD */
- /* Private macro -------------------------------------------------------------*/
- /* USER CODE BEGIN PM */
- /* USER CODE END PM */
- /* Private variables ---------------------------------------------------------*/
- /* USER CODE BEGIN PV */
- uint16_t AD,AD1,AD2;
- extern uint16_t num_gl;
- uint8_t rd_value[20] = {0};
- uint8_t wr_value[20] = {0x14,0x13,0x12,0x11,0x10,
- 0x0F,0x0E,0x0D,0x0C,0x0B,
- 0x0A,0x09,0x08,0x07,0x06,
- 0x05,0x04,0x03,0x02,0x01};
- uint16_t buf[2] = {0};
- /* USER CODE END PV */
- /* Private function prototypes -----------------------------------------------*/
- void SystemClock_Config(void);
- static void MX_GPIO_Init(void);
- static void MX_I2C1_Init(void);
- /* USER CODE BEGIN PFP */
- /* USER CODE END PFP */
- /* Private user code ---------------------------------------------------------*/
- /* USER CODE BEGIN 0 */
- void BMP085_SendCmd (uint8_t Reg, uint8_t Cntr)
- {
- //Disable Pos
- LL_I2C_DisableBitPOS(I2C1);
- LL_I2C_AcknowledgeNextData(I2C1, LL_I2C_ACK);
- LL_I2C_GenerateStartCondition(I2C1);
- while(!LL_I2C_IsActiveFlag_SB(I2C1)){};
- (void) I2C1->SR1;
- LL_I2C_TransmitData8(I2C1, SLAVE_OWN_ADDRESS | I2C_REQUEST_WRITE);
- while(!LL_I2C_IsActiveFlag_ADDR(I2C1)){};
- LL_I2C_ClearFlag_ADDR(I2C1);
- // LL_I2C_TransmitData8(I2C1, (uint8_t) (addr>>8));
- // while(!LL_I2C_IsActiveFlag_TXE(I2C1)){};
- LL_I2C_TransmitData8(I2C1, Reg);
- while(!LL_I2C_IsActiveFlag_TXE(I2C1)){};
- LL_I2C_TransmitData8(I2C1, Cntr);
- while(!LL_I2C_IsActiveFlag_TXE(I2C1)){};
- LL_I2C_GenerateStopCondition(I2C1);
- }
- void BMP085_ReadTemp(uint8_t Reg)
- {
- uint8_t i;
- LL_I2C_DisableBitPOS(I2C1);
- LL_I2C_AcknowledgeNextData(I2C1, LL_I2C_ACK);
- LL_I2C_GenerateStartCondition(I2C1);
- while(!LL_I2C_IsActiveFlag_SB(I2C1)){};
- (void) I2C1->SR1;
- LL_I2C_TransmitData8(I2C1, SLAVE_OWN_ADDRESS | I2C_REQUEST_WRITE);
- while(!LL_I2C_IsActiveFlag_ADDR(I2C1)){};
- LL_I2C_ClearFlag_ADDR(I2C1);
- LL_I2C_TransmitData8(I2C1, Reg);
- while(!LL_I2C_IsActiveFlag_TXE(I2C1)){};
- LL_I2C_GenerateStartCondition(I2C1);
- while(!LL_I2C_IsActiveFlag_SB(I2C1)){};
- (void) I2C1->SR1;
- LL_I2C_TransmitData8(I2C1, SLAVE_OWN_ADDRESS | I2C_REQUEST_READ);
- while (!LL_I2C_IsActiveFlag_ADDR(I2C1)){};
- LL_I2C_ClearFlag_ADDR(I2C1);
- for(i=0;i<2;i++)
- {
- if(i<(2-1))
- {
- while(!LL_I2C_IsActiveFlag_RXNE(I2C1)){};
- buf[i] = LL_I2C_ReceiveData8(I2C1);
- }
- else
- {
- LL_I2C_AcknowledgeNextData(I2C1, LL_I2C_NACK);
- LL_I2C_GenerateStopCondition(I2C1);
- while(!LL_I2C_IsActiveFlag_RXNE(I2C1)){};
- buf[i] = LL_I2C_ReceiveData8(I2C1);
- }
- }
- AD=buf[0];
- AD1=buf[1];
- }
- //------------------------------------------------
- /* USER CODE END 0 */
- /**
- * @brief The application entry point.
- * @retval int
- */
- int main(void)
- {
- /* USER CODE BEGIN 1 */
- /* USER CODE END 1 */
- /* MCU Configuration--------------------------------------------------------*/
- /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
- LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_SYSCFG);
- LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_PWR);
- NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_4);
- /* System interrupt init*/
- /* USER CODE BEGIN Init */
- /* USER CODE END Init */
- /* Configure the system clock */
- SystemClock_Config();
- /* USER CODE BEGIN SysInit */
- /* USER CODE END SysInit */
- /* Initialize all configured peripherals */
- MX_GPIO_Init();
- MX_I2C1_Init();
- /* USER CODE BEGIN 2 */
- BMP085_SendCmd (0xF4, 0x2E);
- BMP085_ReadTemp(0xF6);
- /* USER CODE END 2 */
- /* Infinite loop */
- /* USER CODE BEGIN WHILE */
- while (1)
- {
- LL_mDelay(1000);
- LL_GPIO_ResetOutputPin(GPIOC, LL_GPIO_PIN_13);
- LL_mDelay(1000);
- LL_GPIO_SetOutputPin(GPIOC, LL_GPIO_PIN_13);
- /* USER CODE END WHILE */
- /* USER CODE BEGIN 3 */
- }
- /* USER CODE END 3 */
- }
- /**
- * @brief System Clock Configuration
- * @retval None
- */
- void SystemClock_Config(void)
- {
- LL_FLASH_SetLatency(LL_FLASH_LATENCY_0);
- if(LL_FLASH_GetLatency() != LL_FLASH_LATENCY_0)
- {
- Error_Handler();
- }
- LL_PWR_SetRegulVoltageScaling(LL_PWR_REGU_VOLTAGE_SCALE2);
- LL_RCC_HSI_SetCalibTrimming(16);
- LL_RCC_HSI_Enable();
- /* Wait till HSI is ready */
- while(LL_RCC_HSI_IsReady() != 1)
- {
- }
- LL_RCC_SetAHBPrescaler(LL_RCC_SYSCLK_DIV_1);
- LL_RCC_SetAPB1Prescaler(LL_RCC_APB1_DIV_1);
- LL_RCC_SetAPB2Prescaler(LL_RCC_APB2_DIV_1);
- LL_RCC_SetSysClkSource(LL_RCC_SYS_CLKSOURCE_HSI);
- /* Wait till System clock is ready */
- while(LL_RCC_GetSysClkSource() != LL_RCC_SYS_CLKSOURCE_STATUS_HSI)
- {
- }
- LL_Init1msTick(16000000);
- LL_SYSTICK_SetClkSource(LL_SYSTICK_CLKSOURCE_HCLK);
- LL_SetSystemCoreClock(16000000);
- LL_RCC_SetTIMPrescaler(LL_RCC_TIM_PRESCALER_TWICE);
- }
- /**
- * @brief I2C1 Initialization Function
- * @param None
- * @retval None
- */
- static void MX_I2C1_Init(void)
- {
- /* USER CODE BEGIN I2C1_Init 0 */
- /* USER CODE END I2C1_Init 0 */
- LL_I2C_InitTypeDef I2C_InitStruct = {0};
- LL_GPIO_InitTypeDef GPIO_InitStruct = {0};
- LL_AHB1_GRP1_EnableClock(LL_AHB1_GRP1_PERIPH_GPIOB);
- /**I2C1 GPIO Configuration
- PB6 ------> I2C1_SCL
- PB7 ------> I2C1_SDA
- */
- GPIO_InitStruct.Pin = LL_GPIO_PIN_6|LL_GPIO_PIN_7;
- GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE;
- GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_VERY_HIGH;
- GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_OPENDRAIN;
- GPIO_InitStruct.Pull = LL_GPIO_PULL_UP;
- GPIO_InitStruct.Alternate = LL_GPIO_AF_4;
- LL_GPIO_Init(GPIOB, &GPIO_InitStruct);
- /* Peripheral clock enable */
- LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_I2C1);
- /* USER CODE BEGIN I2C1_Init 1 */
- /* USER CODE END I2C1_Init 1 */
- /** I2C Initialization
- */
- LL_I2C_DisableOwnAddress2(I2C1);
- LL_I2C_DisableGeneralCall(I2C1);
- LL_I2C_EnableClockStretching(I2C1);
- I2C_InitStruct.PeripheralMode = LL_I2C_MODE_I2C;
- I2C_InitStruct.ClockSpeed = 100000;
- I2C_InitStruct.DutyCycle = LL_I2C_DUTYCYCLE_2;
- I2C_InitStruct.OwnAddress1 = 0;
- I2C_InitStruct.TypeAcknowledge = LL_I2C_ACK;
- I2C_InitStruct.OwnAddrSize = LL_I2C_OWNADDRESS1_7BIT;
- LL_I2C_Init(I2C1, &I2C_InitStruct);
- LL_I2C_SetOwnAddress2(I2C1, 0);
- /* USER CODE BEGIN I2C1_Init 2 */
- /* USER CODE END I2C1_Init 2 */
- }
- /**
- * @brief GPIO Initialization Function
- * @param None
- * @retval None
- */
- static void MX_GPIO_Init(void)
- {
- LL_GPIO_InitTypeDef GPIO_InitStruct = {0};
- /* GPIO Ports Clock Enable */
- LL_AHB1_GRP1_EnableClock(LL_AHB1_GRP1_PERIPH_GPIOC);
- LL_AHB1_GRP1_EnableClock(LL_AHB1_GRP1_PERIPH_GPIOH);
- LL_AHB1_GRP1_EnableClock(LL_AHB1_GRP1_PERIPH_GPIOA);
- LL_AHB1_GRP1_EnableClock(LL_AHB1_GRP1_PERIPH_GPIOB);
- /**/
- LL_GPIO_ResetOutputPin(GPIOC, LL_GPIO_PIN_13);
- /**/
- GPIO_InitStruct.Pin = LL_GPIO_PIN_13;
- GPIO_InitStruct.Mode = LL_GPIO_MODE_OUTPUT;
- GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_LOW;
- GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
- GPIO_InitStruct.Pull = LL_GPIO_PULL_NO;
- LL_GPIO_Init(GPIOC, &GPIO_InitStruct);
- }
- /* USER CODE BEGIN 4 */
- /* USER CODE END 4 */
- /**
- * @brief This function is executed in case of error occurrence.
- * @retval None
- */
- void Error_Handler(void)
- {
- /* USER CODE BEGIN Error_Handler_Debug */
- /* User can add his own implementation to report the HAL error return state */
- /* USER CODE END Error_Handler_Debug */
- }
- #ifdef USE_FULL_ASSERT
- /**
- * @brief Reports the name of the source file and the source line number
- * where the assert_param error has occurred.
- * @param file: pointer to the source file name
- * @param line: assert_param error line source number
- * @retval None
- */
- void assert_failed(uint8_t *file, uint32_t line)
- {
- /* USER CODE BEGIN 6 */
- /* User can add his own implementation to report the file name and line number,
- tex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
- /* USER CODE END 6 */
- }
- #endif /* USE_FULL_ASSERT */
- /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement