Rev 27 | Rev 29 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 27 | Rev 28 | ||
|---|---|---|---|
| Line 41... | Line 41... | ||
| 41 | /* USER CODE BEGIN PM */ |
41 | /* USER CODE BEGIN PM */ |
| 42 | 42 | ||
| 43 | /* USER CODE END PM */ |
43 | /* USER CODE END PM */ |
| 44 | 44 | ||
| 45 | /* Private variables ---------------------------------------------------------*/ |
45 | /* Private variables ---------------------------------------------------------*/ |
| - | 46 | I2C_HandleTypeDef hi2c1; |
|
| 46 | I2C_HandleTypeDef hi2c2; |
47 | I2C_HandleTypeDef hi2c2; |
| 47 | 48 | ||
| 48 | IWDG_HandleTypeDef hiwdg; |
49 | IWDG_HandleTypeDef hiwdg; |
| 49 | 50 | ||
| 50 | RTC_HandleTypeDef hrtc; |
51 | RTC_HandleTypeDef hrtc; |
| Line 65... | Line 66... | ||
| 65 | static int8_t |
66 | static int8_t |
| 66 | user_i2c_write (uint8_t i2c_addr, uint8_t reg_addr, uint8_t *reg_data, |
67 | user_i2c_write (uint8_t i2c_addr, uint8_t reg_addr, uint8_t *reg_data, |
| 67 | uint32_t len) |
68 | uint32_t len) |
| 68 | { |
69 | { |
| 69 | HAL_StatusTypeDef st = HAL_I2C_Mem_Write (&hi2c2, i2c_addr << 1, reg_addr, 1, |
70 | HAL_StatusTypeDef st = HAL_I2C_Mem_Write (&hi2c2, i2c_addr << 1, reg_addr, 1, |
| 70 | reg_data, len, 10000); |
71 | reg_data, len, 1000); |
| 71 | 72 | ||
| 72 | return st != HAL_OK ? BMP280_E_COMM_FAIL : BMP280_OK; |
73 | return st != HAL_OK ? BMP280_E_COMM_FAIL : BMP280_OK; |
| 73 | 74 | ||
| 74 | } |
75 | } |
| 75 | static int8_t |
76 | static int8_t |
| 76 | user_i2c_read (uint8_t i2c_addr, uint8_t reg_addr, uint8_t *reg_data, |
77 | user_i2c_read (uint8_t i2c_addr, uint8_t reg_addr, uint8_t *reg_data, |
| 77 | uint32_t len) |
78 | uint32_t len) |
| 78 | { |
79 | { |
| 79 | HAL_StatusTypeDef st = HAL_I2C_Mem_Read (&hi2c2, i2c_addr << 1, reg_addr, 1, |
80 | HAL_StatusTypeDef st = HAL_I2C_Mem_Read (&hi2c2, i2c_addr << 1, reg_addr, 1, |
| 80 | reg_data, len, 10000); |
81 | reg_data, len, 1000); |
| 81 | 82 | ||
| 82 | return st != HAL_OK ? BMP280_E_COMM_FAIL : BMP280_OK; |
83 | return st != HAL_OK ? BMP280_E_COMM_FAIL : BMP280_OK; |
| 83 | 84 | ||
| 84 | } |
85 | } |
| - | 86 | // the second I2C bus is I2C1, this is used for the external I2C thermometer to avoid problems with noise pickup . |
|
| - | 87 | static int8_t |
|
| - | 88 | user_i2c2_write (uint8_t i2c_addr, uint8_t reg_addr, uint8_t *reg_data, |
|
| - | 89 | uint32_t len) |
|
| - | 90 | { |
|
| - | 91 | HAL_StatusTypeDef st = HAL_I2C_Mem_Write (&hi2c1, i2c_addr << 1, reg_addr, 1, |
|
| - | 92 | reg_data, len, 1000); |
|
| - | 93 | ||
| - | 94 | return st != HAL_OK ? BMP280_E_COMM_FAIL : BMP280_OK; |
|
| - | 95 | ||
| - | 96 | } |
|
| - | 97 | static int8_t |
|
| - | 98 | user_i2c2_read (uint8_t i2c_addr, uint8_t reg_addr, uint8_t *reg_data, |
|
| - | 99 | uint32_t len) |
|
| - | 100 | { |
|
| - | 101 | HAL_StatusTypeDef st = HAL_I2C_Mem_Read (&hi2c1, i2c_addr << 1, reg_addr, 1, |
|
| - | 102 | reg_data, len, 1000); |
|
| - | 103 | ||
| - | 104 | return st != HAL_OK ? BMP280_E_COMM_FAIL : BMP280_OK; |
|
| - | 105 | ||
| - | 106 | } |
|
| - | 107 | ||
| - | 108 | static void reset_i2c2(void) |
|
| - | 109 | { |
|
| - | 110 | ||
| - | 111 | ||
| - | 112 | ||
| - | 113 | ||
| - | 114 | ||
| - | 115 | } |
|
| 85 | 116 | ||
| 86 | static void |
117 | static void |
| 87 | user_delay_ms (uint32_t ms, void *handle) |
118 | user_delay_ms (uint32_t ms, void *handle) |
| 88 | { |
119 | { |
| 89 | HAL_Delay (ms); |
120 | HAL_Delay (ms); |
| Line 102... | Line 133... | ||
| 102 | }; |
133 | }; |
| 103 | 134 | ||
| 104 | struct bmp280_dev bmp2 = |
135 | struct bmp280_dev bmp2 = |
| 105 | { |
136 | { |
| 106 | .intf = BMP280_I2C_INTF, |
137 | .intf = BMP280_I2C_INTF, |
| 107 | .read = user_i2c_read, |
138 | .read = user_i2c2_read, |
| 108 | .write = user_i2c_write, |
139 | .write = user_i2c2_write, |
| 109 | .delay_ms = user_delay_ms, |
140 | .delay_ms = user_delay_ms, |
| 110 | 141 | ||
| 111 | /* Update interface pointer with the structure that contains both device address and file descriptor */ |
142 | /* Update interface pointer with the structure that contains both device address and file descriptor */ |
| 112 | .dev_id = BMP280_I2C_ADDR_SEC |
143 | .dev_id = BMP280_I2C_ADDR_PRIM |
| 113 | }; |
144 | }; |
| 114 | 145 | ||
| 115 | int8_t rslt; |
146 | int8_t rslt; |
| 116 | 147 | ||
| 117 | 148 | ||
| Line 128... | Line 159... | ||
| 128 | static void MX_USART1_UART_Init(void); |
159 | static void MX_USART1_UART_Init(void); |
| 129 | static void MX_TIM3_Init(void); |
160 | static void MX_TIM3_Init(void); |
| 130 | static void MX_I2C2_Init(void); |
161 | static void MX_I2C2_Init(void); |
| 131 | static void MX_RTC_Init(void); |
162 | static void MX_RTC_Init(void); |
| 132 | static void MX_IWDG_Init(void); |
163 | static void MX_IWDG_Init(void); |
| - | 164 | static void MX_I2C1_Init(void); |
|
| 133 | /* USER CODE BEGIN PFP */ |
165 | /* USER CODE BEGIN PFP */ |
| 134 | 166 | ||
| 135 | /* USER CODE END PFP */ |
167 | /* USER CODE END PFP */ |
| 136 | 168 | ||
| 137 | /* Private user code ---------------------------------------------------------*/ |
169 | /* Private user code ---------------------------------------------------------*/ |
| Line 170... | Line 202... | ||
| 170 | if (rslt != BMP280_OK) |
202 | if (rslt != BMP280_OK) |
| 171 | return rslt; |
203 | return rslt; |
| 172 | 204 | ||
| 173 | } |
205 | } |
| 174 | 206 | ||
| - | 207 | static void reset_I2C1(void) |
|
| - | 208 | { |
|
| - | 209 | HAL_GPIO_WritePin ( GPIOB, GPIO_PIN_9, GPIO_PIN_SET); |
|
| - | 210 | HAL_GPIO_WritePin ( GPIOB, GPIO_PIN_8, GPIO_PIN_SET); |
|
| - | 211 | __HAL_AFIO_REMAP_I2C1_DISABLE(); |
|
| - | 212 | int i; |
|
| - | 213 | // clock 18 times |
|
| - | 214 | for (i=0;i<18;++i) |
|
| - | 215 | { |
|
| - | 216 | HAL_Delay (1); |
|
| - | 217 | HAL_GPIO_WritePin ( GPIOB, GPIO_PIN_9, GPIO_PIN_SET); |
|
| - | 218 | HAL_Delay (1); |
|
| - | 219 | HAL_GPIO_WritePin ( GPIOB, GPIO_PIN_9, GPIO_PIN_SET); |
|
| - | 220 | } |
|
| - | 221 | __HAL_AFIO_REMAP_I2C1_ENABLE(); |
|
| - | 222 | ||
| - | 223 | } |
|
| 175 | 224 | ||
| 176 | 225 | ||
| 177 | 226 | ||
| 178 | 227 | ||
| 179 | /* USER CODE END 0 */ |
228 | /* USER CODE END 0 */ |
| Line 212... | Line 261... | ||
| 212 | MX_TIM3_Init(); |
261 | MX_TIM3_Init(); |
| 213 | MX_I2C2_Init(); |
262 | MX_I2C2_Init(); |
| 214 | MX_RTC_Init(); |
263 | MX_RTC_Init(); |
| 215 | MX_USB_DEVICE_Init(); |
264 | MX_USB_DEVICE_Init(); |
| 216 | MX_IWDG_Init(); |
265 | MX_IWDG_Init(); |
| - | 266 | MX_I2C1_Init(); |
|
| 217 | /* USER CODE BEGIN 2 */ |
267 | /* USER CODE BEGIN 2 */ |
| 218 | 268 | ||
| 219 | HAL_GPIO_WritePin ( USB_PULLUP_GPIO_Port, USB_PULLUP_Pin, GPIO_PIN_RESET); |
269 | HAL_GPIO_WritePin ( USB_PULLUP_GPIO_Port, USB_PULLUP_Pin, GPIO_PIN_RESET); |
| 220 | HAL_Delay (1000); |
270 | HAL_Delay (1000); |
| 221 | HAL_GPIO_WritePin ( USB_PULLUP_GPIO_Port, USB_PULLUP_Pin, GPIO_PIN_SET); |
271 | HAL_GPIO_WritePin ( USB_PULLUP_GPIO_Port, USB_PULLUP_Pin, GPIO_PIN_SET); |
| 222 | - | ||
| 223 | /* setup the USART control blocks */ |
272 | /* setup the USART control blocks */ |
| 224 | 273 | ||
| 225 | #if defined SERIAL_UART1 |
274 | #if defined SERIAL_UART1 |
| 226 | init_usart_ctl (&uc1, &huart1); |
275 | init_usart_ctl (&uc1, &huart1); |
| 227 | 276 | ||
| Line 310... | Line 359... | ||
| 310 | Error_Handler(); |
359 | Error_Handler(); |
| 311 | } |
360 | } |
| 312 | } |
361 | } |
| 313 | 362 | ||
| 314 | /** |
363 | /** |
| - | 364 | * @brief I2C1 Initialization Function |
|
| - | 365 | * @param None |
|
| - | 366 | * @retval None |
|
| - | 367 | */ |
|
| - | 368 | static void MX_I2C1_Init(void) |
|
| - | 369 | { |
|
| - | 370 | ||
| - | 371 | /* USER CODE BEGIN I2C1_Init 0 */ |
|
| - | 372 | ||
| - | 373 | /* USER CODE END I2C1_Init 0 */ |
|
| - | 374 | ||
| - | 375 | /* USER CODE BEGIN I2C1_Init 1 */ |
|
| - | 376 | ||
| - | 377 | /* USER CODE END I2C1_Init 1 */ |
|
| - | 378 | hi2c1.Instance = I2C1; |
|
| - | 379 | hi2c1.Init.ClockSpeed = 100000; |
|
| - | 380 | hi2c1.Init.DutyCycle = I2C_DUTYCYCLE_2; |
|
| - | 381 | hi2c1.Init.OwnAddress1 = 0; |
|
| - | 382 | hi2c1.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT; |
|
| - | 383 | hi2c1.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE; |
|
| - | 384 | hi2c1.Init.OwnAddress2 = 0; |
|
| - | 385 | hi2c1.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE; |
|
| - | 386 | hi2c1.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE; |
|
| - | 387 | if (HAL_I2C_Init(&hi2c1) != HAL_OK) |
|
| - | 388 | { |
|
| - | 389 | Error_Handler(); |
|
| - | 390 | } |
|
| - | 391 | /* USER CODE BEGIN I2C1_Init 2 */ |
|
| - | 392 | ||
| - | 393 | /* USER CODE END I2C1_Init 2 */ |
|
| - | 394 | ||
| - | 395 | } |
|
| - | 396 | ||
| - | 397 | /** |
|
| 315 | * @brief I2C2 Initialization Function |
398 | * @brief I2C2 Initialization Function |
| 316 | * @param None |
399 | * @param None |
| 317 | * @retval None |
400 | * @retval None |
| 318 | */ |
401 | */ |
| 319 | static void MX_I2C2_Init(void) |
402 | static void MX_I2C2_Init(void) |