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 |