Rev 2 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 2 | Rev 3 | ||
|---|---|---|---|
| Line 22... | Line 22... | ||
| 22 | /* Private includes ----------------------------------------------------------*/ |
22 | /* Private includes ----------------------------------------------------------*/ |
| 23 | /* USER CODE BEGIN Includes */ |
23 | /* USER CODE BEGIN Includes */ |
| 24 | #include "libSerial/serial.h" |
24 | #include "libSerial/serial.h" |
| 25 | #include "libPLX/commsLib.h" |
25 | #include "libPLX/commsLib.h" |
| 26 | #include "libTinyWB/tinyWB.h" |
26 | #include "libTinyWB/tinyWB.h" |
| - | 27 | ||
| - | 28 | // Semihosting enable : see |
|
| - | 29 | // https://community.st.com/t5/stm32-mcus/how-to-use-semihosting-with-stm32cubeide-and-stm32/ta-p/49742 |
|
| - | 30 | /// #include <stdio.h> |
|
| - | 31 | // extern void initialise_monitor_handles(void); |
|
| 27 | /* USER CODE END Includes */ |
32 | /* USER CODE END Includes */ |
| 28 | 33 | ||
| 29 | /* Private typedef -----------------------------------------------------------*/ |
34 | /* Private typedef -----------------------------------------------------------*/ |
| 30 | /* USER CODE BEGIN PTD */ |
35 | /* USER CODE BEGIN PTD */ |
| 31 | 36 | ||
| Line 42... | Line 47... | ||
| 42 | /* USER CODE END PM */ |
47 | /* USER CODE END PM */ |
| 43 | 48 | ||
| 44 | /* Private variables ---------------------------------------------------------*/ |
49 | /* Private variables ---------------------------------------------------------*/ |
| 45 | CAN_HandleTypeDef hcan; |
50 | CAN_HandleTypeDef hcan; |
| 46 | 51 | ||
| - | 52 | IWDG_HandleTypeDef hiwdg; |
|
| - | 53 | ||
| 47 | SPI_HandleTypeDef hspi1; |
54 | SPI_HandleTypeDef hspi1; |
| 48 | 55 | ||
| 49 | UART_HandleTypeDef huart1; |
56 | UART_HandleTypeDef huart1; |
| 50 | UART_HandleTypeDef huart2; |
57 | UART_HandleTypeDef huart2; |
| 51 | 58 | ||
| Line 73... | Line 80... | ||
| 73 | static void MX_GPIO_Init(void); |
80 | static void MX_GPIO_Init(void); |
| 74 | static void MX_CAN_Init(void); |
81 | static void MX_CAN_Init(void); |
| 75 | static void MX_SPI1_Init(void); |
82 | static void MX_SPI1_Init(void); |
| 76 | static void MX_USART1_UART_Init(void); |
83 | static void MX_USART1_UART_Init(void); |
| 77 | static void MX_USART2_UART_Init(void); |
84 | static void MX_USART2_UART_Init(void); |
| - | 85 | static void MX_IWDG_Init(void); |
|
| 78 | /* USER CODE BEGIN PFP */ |
86 | /* USER CODE BEGIN PFP */ |
| 79 | 87 | ||
| 80 | // user provided callback symbol |
88 | // user provided callback symbol |
| 81 | void libPLXcallbackSendUserData() |
89 | void libPLXcallbackSendUserData() |
| 82 | { |
90 | { |
| 83 | 91 | ||
| 84 | if (heaterEnable) |
- | |
| 85 | HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin); |
92 | HAL_GPIO_TogglePin(YELLOW_LED_GPIO_Port, YELLOW_LED_Pin); |
| 86 | else |
- | |
| 87 | HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin,GPIO_PIN_RESET); |
- | |
| 88 | // send AFR |
93 | // send AFR |
| 89 | - | ||
| 90 | PLX_SensorInfo info; |
94 | PLX_SensorInfo info; |
| 91 | ConvToPLXInstance(libPLXgetNextInstance(PLX_AFR), &info); |
95 | ConvToPLXInstance(libPLXgetNextInstance(PLX_AFR), &info); |
| 92 | ConvToPLXAddr(PLX_AFR, &info); |
96 | ConvToPLXAddr(PLX_AFR, &info); |
| 93 | ConvToPLXReading(ConveriMFDData2Raw(PLX_AFR, AFR_Gasoline, AFRValue), &info); |
97 | ConvToPLXReading(ConveriMFDData2Raw(PLX_AFR, AFR_Gasoline, AFRValue), &info); |
| 94 | sendInfo(&uc2, &info); |
98 | sendInfo(&uc2, &info); |
| Line 114... | Line 118... | ||
| 114 | { |
118 | { |
| 115 | 119 | ||
| 116 | heaterEnable = (HAL_GetTick() - timeValue) > MIN_RPM_TIME_ACTIVE; |
120 | heaterEnable = (HAL_GetTick() - timeValue) > MIN_RPM_TIME_ACTIVE; |
| 117 | // Active low pin to enable AFR if RPM has exceeded minimum for at least the active time |
121 | // Active low pin to enable AFR if RPM has exceeded minimum for at least the active time |
| 118 | HAL_GPIO_WritePin(enableAFRN_GPIO_Port, enableAFRN_Pin, heaterEnable ? GPIO_PIN_RESET : GPIO_PIN_SET); |
122 | HAL_GPIO_WritePin(enableAFRN_GPIO_Port, enableAFRN_Pin, heaterEnable ? GPIO_PIN_RESET : GPIO_PIN_SET); |
| - | 123 | ||
| - | 124 | HAL_GPIO_WritePin(GREEN_LED_GPIO_Port, GREEN_LED_Pin, heaterEnable); |
|
| - | 125 | } |
|
| - | 126 | ||
| - | 127 | // refresh watchdog timer |
|
| - | 128 | void watchdogWrite() |
|
| - | 129 | { |
|
| - | 130 | HAL_IWDG_Refresh(&hiwdg); |
|
| 119 | } |
131 | } |
| 120 | 132 | ||
| 121 | /* USER CODE END PFP */ |
133 | /* USER CODE END PFP */ |
| 122 | 134 | ||
| 123 | /* Private user code ---------------------------------------------------------*/ |
135 | /* Private user code ---------------------------------------------------------*/ |
| Line 130... | Line 142... | ||
| 130 | * @retval int |
142 | * @retval int |
| 131 | */ |
143 | */ |
| 132 | int main(void) |
144 | int main(void) |
| 133 | { |
145 | { |
| 134 | /* USER CODE BEGIN 1 */ |
146 | /* USER CODE BEGIN 1 */ |
| - | 147 | // initialise_monitor_handles(); |
|
| 135 | 148 | ||
| 136 | /* USER CODE END 1 */ |
149 | /* USER CODE END 1 */ |
| 137 | 150 | ||
| 138 | /* MCU Configuration--------------------------------------------------------*/ |
151 | /* MCU Configuration--------------------------------------------------------*/ |
| 139 | 152 | ||
| Line 155... | Line 168... | ||
| 155 | MX_GPIO_Init(); |
168 | MX_GPIO_Init(); |
| 156 | MX_CAN_Init(); |
169 | MX_CAN_Init(); |
| 157 | MX_SPI1_Init(); |
170 | MX_SPI1_Init(); |
| 158 | MX_USART1_UART_Init(); |
171 | MX_USART1_UART_Init(); |
| 159 | MX_USART2_UART_Init(); |
172 | MX_USART2_UART_Init(); |
| - | 173 | MX_IWDG_Init(); |
|
| 160 | /* USER CODE BEGIN 2 */ |
174 | /* USER CODE BEGIN 2 */ |
| 161 | init_usart_ctl(&uc1, &huart1, tx1Buffer, rx1Buffer, TX_USART_BUFF_SIZ, RX_USART_BUFF_SIZ); |
175 | init_usart_ctl(&uc1, &huart1, tx1Buffer, rx1Buffer, TX_USART_BUFF_SIZ, RX_USART_BUFF_SIZ); |
| 162 | init_usart_ctl(&uc2, &huart2, tx2Buffer, rx2Buffer, TX_USART_BUFF_SIZ, RX_USART_BUFF_SIZ); |
176 | init_usart_ctl(&uc2, &huart2, tx2Buffer, rx2Buffer, TX_USART_BUFF_SIZ, RX_USART_BUFF_SIZ); |
| 163 | 177 | ||
| 164 | ResetRxBuffer(&uc1); |
178 | ResetRxBuffer(&uc1); |
| Line 176... | Line 190... | ||
| 176 | pollTinyWB(&uc1, &AFRValue, &temperature); |
190 | pollTinyWB(&uc1, &AFRValue, &temperature); |
| 177 | // Handle PLX |
191 | // Handle PLX |
| 178 | libPLXpollData(&uc2); |
192 | libPLXpollData(&uc2); |
| 179 | 193 | ||
| 180 | checkHeaterEnable(); |
194 | checkHeaterEnable(); |
| - | 195 | watchdogWrite(); |
|
| - | 196 | ||
| - | 197 | HAL_Delay(10); |
|
| 181 | /* USER CODE END WHILE */ |
198 | /* USER CODE END WHILE */ |
| 182 | 199 | ||
| 183 | /* USER CODE BEGIN 3 */ |
200 | /* USER CODE BEGIN 3 */ |
| 184 | } |
201 | } |
| 185 | /* USER CODE END 3 */ |
202 | /* USER CODE END 3 */ |
| Line 195... | Line 212... | ||
| 195 | RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; |
212 | RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; |
| 196 | 213 | ||
| 197 | /** Initializes the RCC Oscillators according to the specified parameters |
214 | /** Initializes the RCC Oscillators according to the specified parameters |
| 198 | * in the RCC_OscInitTypeDef structure. |
215 | * in the RCC_OscInitTypeDef structure. |
| 199 | */ |
216 | */ |
| 200 | RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; |
217 | RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_LSI | RCC_OSCILLATORTYPE_HSE; |
| 201 | RCC_OscInitStruct.HSEState = RCC_HSE_ON; |
218 | RCC_OscInitStruct.HSEState = RCC_HSE_ON; |
| 202 | RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1; |
219 | RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1; |
| 203 | RCC_OscInitStruct.HSIState = RCC_HSI_ON; |
220 | RCC_OscInitStruct.HSIState = RCC_HSI_ON; |
| - | 221 | RCC_OscInitStruct.LSIState = RCC_LSI_ON; |
|
| 204 | RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; |
222 | RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; |
| 205 | RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; |
223 | RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; |
| 206 | RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL8; |
224 | RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL8; |
| 207 | if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) |
225 | if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) |
| 208 | { |
226 | { |
| Line 258... | Line 276... | ||
| 258 | 276 | ||
| 259 | /* USER CODE END CAN_Init 2 */ |
277 | /* USER CODE END CAN_Init 2 */ |
| 260 | } |
278 | } |
| 261 | 279 | ||
| 262 | /** |
280 | /** |
| - | 281 | * @brief IWDG Initialization Function |
|
| - | 282 | * @param None |
|
| - | 283 | * @retval None |
|
| - | 284 | */ |
|
| - | 285 | static void MX_IWDG_Init(void) |
|
| - | 286 | { |
|
| - | 287 | ||
| - | 288 | /* USER CODE BEGIN IWDG_Init 0 */ |
|
| - | 289 | ||
| - | 290 | /* USER CODE END IWDG_Init 0 */ |
|
| - | 291 | ||
| - | 292 | /* USER CODE BEGIN IWDG_Init 1 */ |
|
| - | 293 | ||
| - | 294 | /* USER CODE END IWDG_Init 1 */ |
|
| - | 295 | hiwdg.Instance = IWDG; |
|
| - | 296 | hiwdg.Init.Prescaler = IWDG_PRESCALER_32; |
|
| - | 297 | hiwdg.Init.Reload = 4095; |
|
| - | 298 | if (HAL_IWDG_Init(&hiwdg) != HAL_OK) |
|
| - | 299 | { |
|
| - | 300 | Error_Handler(); |
|
| - | 301 | } |
|
| - | 302 | /* USER CODE BEGIN IWDG_Init 2 */ |
|
| - | 303 | ||
| - | 304 | /* USER CODE END IWDG_Init 2 */ |
|
| - | 305 | } |
|
| - | 306 | ||
| - | 307 | /** |
|
| 263 | * @brief SPI1 Initialization Function |
308 | * @brief SPI1 Initialization Function |
| 264 | * @param None |
309 | * @param None |
| 265 | * @retval None |
310 | * @retval None |
| 266 | */ |
311 | */ |
| 267 | static void MX_SPI1_Init(void) |
312 | static void MX_SPI1_Init(void) |
| Line 379... | Line 424... | ||
| 379 | 424 | ||
| 380 | /*Configure GPIO pin Output Level */ |
425 | /*Configure GPIO pin Output Level */ |
| 381 | HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_SET); |
426 | HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_SET); |
| 382 | 427 | ||
| 383 | /*Configure GPIO pin Output Level */ |
428 | /*Configure GPIO pin Output Level */ |
| 384 | HAL_GPIO_WritePin(GPIOA, SPI_CD_Pin | SPI_NSS_Pin, GPIO_PIN_RESET); |
429 | HAL_GPIO_WritePin(GPIOA, GREEN_LED_Pin | YELLOW_LED_Pin | SPI_CD_Pin | SPI_NSS_Pin, GPIO_PIN_RESET); |
| 385 | 430 | ||
| 386 | /*Configure GPIO pin Output Level */ |
431 | /*Configure GPIO pin Output Level */ |
| 387 | HAL_GPIO_WritePin(SPI_RESET_GPIO_Port, SPI_RESET_Pin, GPIO_PIN_RESET); |
432 | HAL_GPIO_WritePin(SPI_RESET_GPIO_Port, SPI_RESET_Pin, GPIO_PIN_RESET); |
| 388 | 433 | ||
| 389 | /*Configure GPIO pin Output Level */ |
434 | /*Configure GPIO pin Output Level */ |
| 390 | HAL_GPIO_WritePin(enableAFRN_GPIO_Port, enableAFRN_Pin, GPIO_PIN_RESET); |
435 | HAL_GPIO_WritePin(enableAFRN_GPIO_Port, enableAFRN_Pin, GPIO_PIN_SET); |
| 391 | 436 | ||
| 392 | /*Configure GPIO pin : LED_Pin */ |
437 | /*Configure GPIO pin : LED_Pin */ |
| 393 | GPIO_InitStruct.Pin = LED_Pin; |
438 | GPIO_InitStruct.Pin = LED_Pin; |
| 394 | GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; |
439 | GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; |
| 395 | GPIO_InitStruct.Pull = GPIO_NOPULL; |
440 | GPIO_InitStruct.Pull = GPIO_NOPULL; |
| 396 | GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; |
441 | GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; |
| 397 | HAL_GPIO_Init(LED_GPIO_Port, &GPIO_InitStruct); |
442 | HAL_GPIO_Init(LED_GPIO_Port, &GPIO_InitStruct); |
| 398 | 443 | ||
| 399 | /*Configure GPIO pins : SPI_CD_Pin SPI_NSS_Pin */ |
444 | /*Configure GPIO pins : GREEN_LED_Pin YELLOW_LED_Pin SPI_CD_Pin SPI_NSS_Pin */ |
| 400 | GPIO_InitStruct.Pin = SPI_CD_Pin | SPI_NSS_Pin; |
445 | GPIO_InitStruct.Pin = GREEN_LED_Pin | YELLOW_LED_Pin | SPI_CD_Pin | SPI_NSS_Pin; |
| 401 | GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; |
446 | GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; |
| 402 | GPIO_InitStruct.Pull = GPIO_NOPULL; |
447 | GPIO_InitStruct.Pull = GPIO_NOPULL; |
| 403 | GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; |
448 | GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; |
| 404 | HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); |
449 | HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); |
| 405 | 450 | ||