Rev 3 | Rev 5 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 3 | Rev 4 | ||
|---|---|---|---|
| Line 1... | Line 1... | ||
| 1 | /** |
1 | /** |
| 2 | ****************************************************************************** |
2 | ****************************************************************************** |
| 3 | * File Name : main.c |
3 | * File Name : main.c |
| 4 | * Description : Main program body |
4 | * Description : Main program body |
| 5 | ****************************************************************************** |
5 | ****************************************************************************** |
| 6 | * |
6 | * |
| 7 | * COPYRIGHT(c) 2016 STMicroelectronics |
7 | * COPYRIGHT(c) 2016 STMicroelectronics |
| 8 | * |
8 | * |
| 9 | * Redistribution and use in source and binary forms, with or without modification, |
9 | * Redistribution and use in source and binary forms, with or without modification, |
| 10 | * are permitted provided that the following conditions are met: |
10 | * are permitted provided that the following conditions are met: |
| 11 | * 1. Redistributions of source code must retain the above copyright notice, |
11 | * 1. Redistributions of source code must retain the above copyright notice, |
| 12 | * this list of conditions and the following disclaimer. |
12 | * this list of conditions and the following disclaimer. |
| 13 | * 2. Redistributions in binary form must reproduce the above copyright notice, |
13 | * 2. Redistributions in binary form must reproduce the above copyright notice, |
| 14 | * this list of conditions and the following disclaimer in the documentation |
14 | * this list of conditions and the following disclaimer in the documentation |
| 15 | * and/or other materials provided with the distribution. |
15 | * and/or other materials provided with the distribution. |
| 16 | * 3. Neither the name of STMicroelectronics nor the names of its contributors |
16 | * 3. Neither the name of STMicroelectronics nor the names of its contributors |
| 17 | * may be used to endorse or promote products derived from this software |
17 | * may be used to endorse or promote products derived from this software |
| 18 | * without specific prior written permission. |
18 | * without specific prior written permission. |
| 19 | * |
19 | * |
| 20 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" |
20 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" |
| 21 | * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
21 | * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
| 22 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
22 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
| 23 | * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE |
23 | * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE |
| 24 | * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
24 | * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
| 25 | * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR |
25 | * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR |
| 26 | * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER |
26 | * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER |
| 27 | * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, |
27 | * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, |
| 28 | * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
28 | * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
| 29 | * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
29 | * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| 30 | * |
30 | * |
| 31 | ****************************************************************************** |
31 | ****************************************************************************** |
| 32 | */ |
32 | */ |
| 33 | /* Includes ------------------------------------------------------------------*/ |
33 | /* Includes ------------------------------------------------------------------*/ |
| 34 | #include "stm32f1xx_hal.h" |
34 | #include "stm32f1xx_hal.h" |
| 35 | 35 | ||
| 36 | /* USER CODE BEGIN Includes */ |
36 | /* USER CODE BEGIN Includes */ |
| 37 | #include "ap_math.h" |
37 | #include "ap_math.h" |
| 38 | #include "serial.h" |
38 | #include "serial.h" |
| 39 | #include "SSD1306.h" |
39 | #include "SSD1306.h" |
| 40 | #include "dials.h" |
40 | #include "dials.h" |
| - | 41 | #include "switches.h" |
|
| 41 | #include <math.h> |
42 | #include <math.h> |
| 42 | - | ||
| - | 43 | #include "plx.h" |
|
| 43 | 44 | ||
| 44 | /* USER CODE END Includes */ |
45 | /* USER CODE END Includes */ |
| 45 | 46 | ||
| 46 | /* Private variables ---------------------------------------------------------*/ |
47 | /* Private variables ---------------------------------------------------------*/ |
| 47 | ADC_HandleTypeDef hadc1; |
48 | ADC_HandleTypeDef hadc1; |
| Line 75... | Line 76... | ||
| 75 | 76 | ||
| 76 | } |
77 | } |
| 77 | 78 | ||
| 78 | /* USER CODE END 0 */ |
79 | /* USER CODE END 0 */ |
| 79 | 80 | ||
| 80 | int main(void) |
81 | int main(void) { |
| 81 | { |
- | |
| 82 | 82 | ||
| 83 | /* USER CODE BEGIN 1 */ |
83 | /* USER CODE BEGIN 1 */ |
| 84 | 84 | ||
| 85 | GPIO_InitTypeDef GPIO_InitStruct; |
85 | GPIO_InitTypeDef GPIO_InitStruct; |
| 86 | 86 | ||
| 87 | __HAL_RCC_SPI1_CLK_ENABLE() |
87 | __HAL_RCC_SPI1_CLK_ENABLE() |
| 88 | ; |
88 | ; |
| 89 | __HAL_RCC_USART1_CLK_ENABLE(); // PLX main port |
89 | __HAL_RCC_USART1_CLK_ENABLE() |
| - | 90 | ; // PLX main port |
|
| 90 | __HAL_RCC_USART2_CLK_ENABLE(); // debug port |
91 | __HAL_RCC_USART2_CLK_ENABLE() |
| - | 92 | ; // debug port |
|
| 91 | /* USER CODE END 1 */ |
93 | /* USER CODE END 1 */ |
| 92 | 94 | ||
| 93 | /* MCU Configuration----------------------------------------------------------*/ |
95 | /* MCU Configuration----------------------------------------------------------*/ |
| 94 | 96 | ||
| 95 | /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ |
97 | /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ |
| 96 | HAL_Init(); |
98 | HAL_Init(); |
| 97 | 99 | ||
| 98 | /* Configure the system clock */ |
100 | /* Configure the system clock */ |
| 99 | SystemClock_Config(); |
101 | SystemClock_Config(); |
| 100 | 102 | ||
| 101 | /* Initialize all configured peripherals */ |
103 | /* Initialize all configured peripherals */ |
| 102 | MX_GPIO_Init(); |
104 | MX_GPIO_Init(); |
| 103 | MX_ADC1_Init(); |
105 | MX_ADC1_Init(); |
| 104 | MX_SPI1_Init(); |
106 | MX_SPI1_Init(); |
| 105 | MX_USART2_UART_Init(); |
107 | MX_USART2_UART_Init(); |
| 106 | MX_USART1_UART_Init(); |
108 | MX_USART1_UART_Init(); |
| 107 | 109 | ||
| 108 | /* USER CODE BEGIN 2 */ |
110 | /* USER CODE BEGIN 2 */ |
| 109 | /* Need to set AF mode for output pins DURR. */ |
111 | /* Need to set AF mode for output pins DURR. */ |
| 110 | /* SPI bus AF pin selects */ |
112 | /* SPI bus AF pin selects */ |
| 111 | GPIO_InitStruct.Speed = GPIO_SPEED_HIGH; |
113 | GPIO_InitStruct.Speed = GPIO_SPEED_HIGH; |
| 112 | 114 | ||
| 113 | GPIO_InitStruct.Pin = GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_7; |
115 | GPIO_InitStruct.Pin = GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_7; |
| Line 129... | Line 131... | ||
| 129 | 131 | ||
| 130 | /* Turn on USART1 IRQ */ |
132 | /* Turn on USART1 IRQ */ |
| 131 | HAL_NVIC_SetPriority(USART1_IRQn, 2, 0); |
133 | HAL_NVIC_SetPriority(USART1_IRQn, 2, 0); |
| 132 | HAL_NVIC_EnableIRQ(USART1_IRQn); |
134 | HAL_NVIC_EnableIRQ(USART1_IRQn); |
| 133 | 135 | ||
| 134 | - | ||
| 135 | /* setup the USART control blocks */ |
136 | /* setup the USART control blocks */ |
| 136 | init_usart_ctl(&uc1, huart1.Instance); |
137 | init_usart_ctl(&uc1, huart1.Instance); |
| 137 | init_usart_ctl(&uc2, hirda2.Instance); |
138 | init_usart_ctl(&uc2, huart2.Instance); |
| 138 | 139 | ||
| 139 | EnableSerialRxInterrupt(&uc1); |
140 | EnableSerialRxInterrupt(&uc1); |
| 140 | EnableSerialRxInterrupt(&uc2); |
141 | EnableSerialRxInterrupt(&uc2); |
| 141 | 142 | ||
| 142 | ap_init(); // set up the approximate math library |
143 | ap_init(); // set up the approximate math library |
| 143 | 144 | ||
| 144 | ssd1306_begin(1, 0); |
145 | ssd1306_begin(1, 0); |
| 145 | clearDisplay(); |
146 | clearDisplay(); |
| 146 | dim(1); |
147 | dim(0); |
| 147 | //font_puts( |
148 | //font_puts( |
| 148 | // "Hello world !!\rThis text is a test of the text rendering library in a 5*7 font"); |
149 | // "Hello world !!\rThis text is a test of the text rendering library in a 5*7 font"); |
| 149 | 150 | ||
| 150 | static const xp = 128 - 42; |
151 | static const xp = 128 - 42; |
| 151 | dial_origin(xp, 40); |
152 | dial_origin(xp, 40); |
| 152 | dial_size(40); |
153 | dial_size(40); |
| 153 | dial_draw_scale(10, 20, 16 , 2); |
154 | dial_draw_scale(10, 20, 16, 2); |
| 154 | 155 | ||
| 155 | display(); |
156 | display(); |
| 156 | 157 | ||
| 157 | /* USER CODE END 2 */ |
158 | InitSwitches(); |
| 158 | 159 | ||
| - | 160 | /* USER CODE END 2 */ |
|
| - | 161 | ||
| 159 | /* Infinite loop */ |
162 | /* Infinite loop */ |
| 160 | /* USER CODE BEGIN WHILE */ |
163 | /* USER CODE BEGIN WHILE */ |
| 161 | uint32_t Ticks = HAL_GetTick()+100; |
164 | uint32_t Ticks = HAL_GetTick() + 100; |
| 162 | int16_t dial0 = 0; |
165 | int16_t dial0 = 0; |
| 163 | int16_t dial1 = -1; |
166 | int16_t dial1 = -1; |
| 164 | 167 | ||
| 165 | int c = 0; |
168 | int c = 0; |
| 166 | int i; |
169 | int i; |
| 167 | char buff[10]; |
170 | char buff[10]; |
| 168 | 171 | ||
| - | 172 | // PLX decoder protocol |
|
| - | 173 | #define MAXRDG 10 |
|
| - | 174 | char PLXPacket = 0; |
|
| - | 175 | union { |
|
| - | 176 | PLX_SensorInfo Sensor[MAXRDG]; |
|
| - | 177 | char Bytes[MAXRDG * sizeof(PLX_SensorInfo)]; |
|
| - | 178 | ||
| - | 179 | } Data; |
|
| - | 180 | int Max[MAXRDG]; |
|
| - | 181 | int Min[MAXRDG]; |
|
| - | 182 | for (i = 0; i < MAXRDG; i++) { |
|
| - | 183 | Max[i] = 0; |
|
| - | 184 | Min[i] = 0xFFF; // 12 bit max value |
|
| - | 185 | } |
|
| - | 186 | ||
| - | 187 | int PLXPtr; |
|
| - | 188 | int PLXItems; |
|
| 169 | 189 | ||
| - | 190 | int OldObservation = -1; // illegal initial value |
|
| - | 191 | int OldObservationIndex = -1; // if more than one sensor this will be printed |
|
| 170 | while (1) { |
192 | while (1) { |
| - | 193 | // poll switches |
|
| - | 194 | HandleSwitches(); |
|
| - | 195 | int ItemIndex = dial_pos[0]; |
|
| - | 196 | ||
| - | 197 | uint16_t cc = SerialCharsReceived(&uc1); |
|
| - | 198 | for (i = 0; i < cc; i++) { |
|
| - | 199 | char c = GetCharSerial(&uc1); |
|
| - | 200 | if (c == PLX_Start) // at any time if the start byte appears, reset the pointers |
|
| - | 201 | { |
|
| - | 202 | PLXPtr = 0; // reset the pointer |
|
| - | 203 | PLXPacket = 1; |
|
| - | 204 | continue; |
|
| - | 205 | } |
|
| - | 206 | ||
| - | 207 | if (c == PLX_Stop) { |
|
| - | 208 | // we can now decode the selected parameter |
|
| - | 209 | PLXPacket = 0; |
|
| - | 210 | PLXItems = PLXPtr / sizeof(PLX_SensorInfo); |
|
| - | 211 | // saturate the rotary switch position |
|
| - | 212 | if(ItemIndex > PLXItems) |
|
| - | 213 | { |
|
| - | 214 | dial_pos[0]= PLXItems; |
|
| - | 215 | ItemIndex = PLXItems; |
|
| - | 216 | } |
|
| - | 217 | ||
| - | 218 | int DataVal; |
|
| - | 219 | // process min/max |
|
| - | 220 | for (i = 0; i < PLXItems; i++) { |
|
| - | 221 | DataVal = ConvPLX(Data.Sensor[i].ObsH, Data.Sensor[i].ObsL); |
|
| - | 222 | if (DataVal > Max[i]) { |
|
| - | 223 | Max[i] = DataVal; |
|
| - | 224 | } |
|
| - | 225 | if (DataVal < Min[i]) { |
|
| - | 226 | Min[i] = DataVal; |
|
| - | 227 | } |
|
| - | 228 | } |
|
| - | 229 | ||
| - | 230 | DataVal = ConvPLX(Data.Sensor[ItemIndex].ObsH, |
|
| - | 231 | Data.Sensor[ItemIndex].ObsL); |
|
| - | 232 | int Observation = ConvPLX(Data.Sensor[ItemIndex].ObsH, |
|
| - | 233 | Data.Sensor[ItemIndex].ObsL); |
|
| - | 234 | int ObservationIndex = ConvPLX(0, Data.Sensor[index].ObsIndex); |
|
| - | 235 | // now to convert the readings and format strings |
|
| - | 236 | // find out limits |
|
| - | 237 | if (Observation != OldObservation |
|
| - | 238 | || ObservationIndex != OldObservationIndex) { |
|
| - | 239 | ||
| - | 240 | dial_draw_scale( |
|
| - | 241 | DisplayInfo[Observation].Low |
|
| - | 242 | / DisplayInfo[Observation].TickScale, |
|
| - | 243 | DisplayInfo[Observation].High |
|
| - | 244 | / DisplayInfo[Observation].TickScale, 16, |
|
| - | 245 | 1); |
|
| - | 246 | int len; |
|
| - | 247 | if (ObservationIndex > 0) { |
|
| - | 248 | len=4; |
|
| - | 249 | buff[5] = ObservationIndex + '1'; |
|
| - | 250 | } else { |
|
| - | 251 | len=5; |
|
| - | 252 | } |
|
| - | 253 | for(i=0;i<len;i++) |
|
| - | 254 | { |
|
| - | 255 | buff[i] = DisplayInfo[Observation].name; |
|
| - | 256 | } |
|
| - | 257 | print_large_string(buff, 0, 0, 5); // this prints spaces for \0 at end of string |
|
| - | 258 | ||
| - | 259 | OldObservation = Observation; |
|
| - | 260 | OldObservationIndex = ObservationIndex; |
|
| - | 261 | } |
|
| - | 262 | // |
|
| - | 263 | ||
| - | 264 | double max_rdg; |
|
| - | 265 | double min_rdg; |
|
| - | 266 | double cur_rdg; |
|
| - | 267 | ||
| - | 268 | max_rdg = ConveriMFDRaw2Data(Observation, DisplayInfo[Observation].Units, Max[ItemIndex]); |
|
| - | 269 | min_rdg = ConveriMFDRaw2Data(Observation, DisplayInfo[Observation].Units, Min[ItemIndex]); |
|
| - | 270 | cur_rdg = ConveriMFDRaw2Data(Observation, DisplayInfo[Observation].Units, DataVal); |
|
| - | 271 | ||
| - | 272 | ||
| - | 273 | ||
| - | 274 | ||
| - | 275 | ||
| - | 276 | } |
|
| - | 277 | if (c > PLX_Stop) // illegal char, restart reading |
|
| - | 278 | { |
|
| - | 279 | PLXPacket = 0; |
|
| - | 280 | } |
|
| - | 281 | if (PLXPtr < sizeof(Data.Bytes)) { |
|
| - | 282 | Data.Bytes[PLXPtr++] = c; |
|
| - | 283 | } |
|
| - | 284 | } |
|
| 171 | 285 | ||
| 172 | uint16_t cc = SerialCharsReceived(&uc3); |
- | |
| 173 | HAL_Delay(1); |
286 | HAL_Delay(1); |
| 174 | CDC_Poll_UART(); /* keep the traffic flowing */ |
- | |
| 175 | 287 | ||
| - | 288 | ||
| 176 | dial0 = (c * 2)% 100; |
289 | /* now scale and decode the dial position etc . |
| - | 290 | * |
|
| - | 291 | */ |
|
| 177 | uint32_t CurrTicks = HAL_GetTick(); |
292 | uint32_t CurrTicks = HAL_GetTick(); |
| 178 | if (CurrTicks > Ticks) { |
293 | if (CurrTicks > Ticks) { |
| - | 294 | /* Lookup the dial etc . */ |
|
| - | 295 | ||
| - | 296 | ||
| 179 | Ticks = CurrTicks+100; |
297 | Ticks = CurrTicks + 100; |
| 180 | /* old needle un-draw */ |
298 | /* old needle un-draw */ |
| 181 | if (dial1 >= 0) { |
299 | if (dial1 >= 0) { |
| 182 | dial_draw_needle(dial1); |
300 | dial_draw_needle(dial1); |
| 183 | } |
301 | } |
| 184 | // print value overlaid by needle |
302 | // print value overlaid by needle |
| - | 303 | // this is actual reading |
|
| 185 | print_digits(xp-16, 48, 4, 3, c); |
304 | print_digits(xp - 16, 48, 4, 3, c); |
| 186 | - | ||
| 187 | - | ||
| 188 | 305 | ||
| 189 | dial_draw_needle(dial0); |
306 | dial_draw_needle(dial0); |
| 190 | dial1 = dial0; |
307 | dial1 = dial0; |
| 191 | 308 | ||
| 192 | - | ||
| 193 | - | ||
| 194 | c++; |
309 | c++; |
| 195 | for(i=0; i< 5; i++) |
- | |
| 196 | buff[i]=i+c; |
- | |
| 197 | print_large_string(buff,0,0,5); |
- | |
| 198 | //font_gotoxy(0, 2); |
310 | //font_gotoxy(0, 2); |
| 199 | //font_puts("baud\r\n"); |
311 | //font_puts("baud\r\n"); |
| 200 | //char buff[10]; |
312 | //char buff[10]; |
| 201 | //itoa(hirda3.Init.BaudRate, buff, 10); |
313 | //itoa(hirda3.Init.BaudRate, buff, 10); |
| 202 | //char l = 6 - strlen(buff); |
314 | //char l = 6 - strlen(buff); |
| 203 | /* pad with leading spaces */ |
315 | /* pad with leading spaces */ |
| 204 | //while (l > 0) { |
316 | //while (l > 0) { |
| 205 | // font_putchar(' '); |
317 | // font_putchar(' '); |
| 206 | // l--; |
318 | // l--; |
| 207 | //} |
319 | //} |
| 208 | - | ||
| 209 | //font_puts(itoa(hirda3.Init.BaudRate, buff, 10)); |
320 | //font_puts(itoa(hirda3.Init.BaudRate, buff, 10)); |
| 210 | - | ||
| 211 | display(); |
321 | display(); |
| 212 | } |
322 | } |
| 213 | /* USER CODE END WHILE */ |
323 | /* USER CODE END WHILE */ |
| 214 | 324 | ||
| 215 | /* USER CODE BEGIN 3 */ |
325 | /* USER CODE BEGIN 3 */ |
| 216 | 326 | ||
| 217 | } |
327 | } |
| 218 | /* USER CODE END 3 */ |
328 | /* USER CODE END 3 */ |
| 219 | 329 | ||
| 220 | } |
330 | } |
| 221 | 331 | ||
| 222 | /** System Clock Configuration |
332 | /** System Clock Configuration |
| 223 | */ |
333 | */ |
| 224 | void SystemClock_Config(void) |
334 | void SystemClock_Config(void) { |
| 225 | { |
- | |
| 226 | 335 | ||
| 227 | RCC_OscInitTypeDef RCC_OscInitStruct; |
336 | RCC_OscInitTypeDef RCC_OscInitStruct; |
| 228 | RCC_ClkInitTypeDef RCC_ClkInitStruct; |
337 | RCC_ClkInitTypeDef RCC_ClkInitStruct; |
| 229 | RCC_PeriphCLKInitTypeDef PeriphClkInit; |
338 | RCC_PeriphCLKInitTypeDef PeriphClkInit; |
| 230 | 339 | ||
| 231 | RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; |
340 | RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; |
| 232 | RCC_OscInitStruct.HSEState = RCC_HSE_BYPASS; |
341 | RCC_OscInitStruct.HSEState = RCC_HSE_BYPASS; |
| 233 | RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1; |
342 | RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1; |
| 234 | RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; |
343 | RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; |
| 235 | RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; |
344 | RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; |
| 236 | RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9; |
345 | RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9; |
| 237 | HAL_RCC_OscConfig(&RCC_OscInitStruct); |
346 | HAL_RCC_OscConfig(&RCC_OscInitStruct); |
| 238 | 347 | ||
| 239 | RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK |
348 | RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK |
| 240 | |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; |
349 | | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2; |
| 241 | RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; |
350 | RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; |
| 242 | RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; |
351 | RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; |
| 243 | RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; |
352 | RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; |
| 244 | RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; |
353 | RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; |
| 245 | HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2); |
354 | HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2); |
| 246 | 355 | ||
| 247 | PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_ADC; |
356 | PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_ADC; |
| 248 | PeriphClkInit.AdcClockSelection = RCC_ADCPCLK2_DIV6; |
357 | PeriphClkInit.AdcClockSelection = RCC_ADCPCLK2_DIV6; |
| 249 | HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit); |
358 | HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit); |
| 250 | 359 | ||
| 251 | HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000); |
360 | HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq() / 1000); |
| 252 | 361 | ||
| 253 | HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK); |
362 | HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK); |
| 254 | 363 | ||
| 255 | /* SysTick_IRQn interrupt configuration */ |
364 | /* SysTick_IRQn interrupt configuration */ |
| 256 | HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0); |
365 | HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0); |
| 257 | } |
366 | } |
| 258 | 367 | ||
| 259 | /* ADC1 init function */ |
368 | /* ADC1 init function */ |
| 260 | void MX_ADC1_Init(void) |
369 | void MX_ADC1_Init(void) { |
| 261 | { |
- | |
| 262 | 370 | ||
| 263 | ADC_ChannelConfTypeDef sConfig; |
371 | ADC_ChannelConfTypeDef sConfig; |
| 264 | 372 | ||
| 265 | /**Common config |
373 | /**Common config |
| 266 | */ |
374 | */ |
| 267 | hadc1.Instance = ADC1; |
375 | hadc1.Instance = ADC1; |
| 268 | hadc1.Init.ScanConvMode = ADC_SCAN_DISABLE; |
376 | hadc1.Init.ScanConvMode = ADC_SCAN_DISABLE; |
| 269 | hadc1.Init.ContinuousConvMode = DISABLE; |
377 | hadc1.Init.ContinuousConvMode = DISABLE; |
| 270 | hadc1.Init.DiscontinuousConvMode = DISABLE; |
378 | hadc1.Init.DiscontinuousConvMode = DISABLE; |
| 271 | hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START; |
379 | hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START; |
| 272 | hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT; |
380 | hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT; |
| 273 | hadc1.Init.NbrOfConversion = 1; |
381 | hadc1.Init.NbrOfConversion = 1; |
| 274 | HAL_ADC_Init(&hadc1); |
382 | HAL_ADC_Init(&hadc1); |
| 275 | 383 | ||
| 276 | /**Configure Regular Channel |
384 | /**Configure Regular Channel |
| 277 | */ |
385 | */ |
| 278 | sConfig.Channel = ADC_CHANNEL_0; |
386 | sConfig.Channel = ADC_CHANNEL_0; |
| 279 | sConfig.Rank = 1; |
387 | sConfig.Rank = 1; |
| 280 | sConfig.SamplingTime = ADC_SAMPLETIME_1CYCLE_5; |
388 | sConfig.SamplingTime = ADC_SAMPLETIME_1CYCLE_5; |
| 281 | HAL_ADC_ConfigChannel(&hadc1, &sConfig); |
389 | HAL_ADC_ConfigChannel(&hadc1, &sConfig); |
| 282 | 390 | ||
| 283 | } |
391 | } |
| 284 | 392 | ||
| 285 | /* SPI1 init function */ |
393 | /* SPI1 init function */ |
| 286 | void MX_SPI1_Init(void) |
394 | void MX_SPI1_Init(void) { |
| 287 | { |
- | |
| 288 | 395 | ||
| 289 | hspi1.Instance = SPI1; |
396 | hspi1.Instance = SPI1; |
| 290 | hspi1.Init.Mode = SPI_MODE_MASTER; |
397 | hspi1.Init.Mode = SPI_MODE_MASTER; |
| 291 | hspi1.Init.Direction = SPI_DIRECTION_1LINE; |
398 | hspi1.Init.Direction = SPI_DIRECTION_1LINE; |
| 292 | hspi1.Init.DataSize = SPI_DATASIZE_8BIT; |
399 | hspi1.Init.DataSize = SPI_DATASIZE_8BIT; |
| 293 | hspi1.Init.CLKPolarity = SPI_POLARITY_HIGH; |
400 | hspi1.Init.CLKPolarity = SPI_POLARITY_HIGH; |
| 294 | hspi1.Init.CLKPhase = SPI_PHASE_1EDGE; |
401 | hspi1.Init.CLKPhase = SPI_PHASE_1EDGE; |
| 295 | hspi1.Init.NSS = SPI_NSS_SOFT; |
402 | hspi1.Init.NSS = SPI_NSS_SOFT; |
| 296 | hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_8; |
403 | hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_8; |
| 297 | hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB; |
404 | hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB; |
| 298 | hspi1.Init.TIMode = SPI_TIMODE_DISABLE; |
405 | hspi1.Init.TIMode = SPI_TIMODE_DISABLE; |
| 299 | hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; |
406 | hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; |
| 300 | hspi1.Init.CRCPolynomial = 10; |
407 | hspi1.Init.CRCPolynomial = 10; |
| 301 | HAL_SPI_Init(&hspi1); |
408 | HAL_SPI_Init(&hspi1); |
| 302 | 409 | ||
| 303 | } |
410 | } |
| 304 | 411 | ||
| 305 | /* USART1 init function */ |
412 | /* USART1 init function */ |
| 306 | void MX_USART1_UART_Init(void) |
413 | void MX_USART1_UART_Init(void) { |
| 307 | { |
- | |
| 308 | 414 | ||
| 309 | huart1.Instance = USART1; |
415 | huart1.Instance = USART1; |
| 310 | huart1.Init.BaudRate = 115200; |
416 | huart1.Init.BaudRate = 115200; |
| 311 | huart1.Init.WordLength = UART_WORDLENGTH_8B; |
417 | huart1.Init.WordLength = UART_WORDLENGTH_8B; |
| 312 | huart1.Init.StopBits = UART_STOPBITS_1; |
418 | huart1.Init.StopBits = UART_STOPBITS_1; |
| 313 | huart1.Init.Parity = UART_PARITY_NONE; |
419 | huart1.Init.Parity = UART_PARITY_NONE; |
| 314 | huart1.Init.Mode = UART_MODE_TX_RX; |
420 | huart1.Init.Mode = UART_MODE_TX_RX; |
| 315 | huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE; |
421 | huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE; |
| 316 | huart1.Init.OverSampling = UART_OVERSAMPLING_16; |
422 | huart1.Init.OverSampling = UART_OVERSAMPLING_16; |
| 317 | HAL_UART_Init(&huart1); |
423 | HAL_UART_Init(&huart1); |
| 318 | 424 | ||
| 319 | } |
425 | } |
| 320 | 426 | ||
| 321 | /* USART2 init function */ |
427 | /* USART2 init function */ |
| 322 | void MX_USART2_UART_Init(void) |
428 | void MX_USART2_UART_Init(void) { |
| 323 | { |
- | |
| 324 | 429 | ||
| 325 | huart2.Instance = USART2; |
430 | huart2.Instance = USART2; |
| 326 | huart2.Init.BaudRate = 115200; |
431 | huart2.Init.BaudRate = 115200; |
| 327 | huart2.Init.WordLength = UART_WORDLENGTH_8B; |
432 | huart2.Init.WordLength = UART_WORDLENGTH_8B; |
| 328 | huart2.Init.StopBits = UART_STOPBITS_1; |
433 | huart2.Init.StopBits = UART_STOPBITS_1; |
| 329 | huart2.Init.Parity = UART_PARITY_NONE; |
434 | huart2.Init.Parity = UART_PARITY_NONE; |
| 330 | huart2.Init.Mode = UART_MODE_TX_RX; |
435 | huart2.Init.Mode = UART_MODE_TX_RX; |
| 331 | huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE; |
436 | huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE; |
| 332 | huart2.Init.OverSampling = UART_OVERSAMPLING_16; |
437 | huart2.Init.OverSampling = UART_OVERSAMPLING_16; |
| 333 | HAL_UART_Init(&huart2); |
438 | HAL_UART_Init(&huart2); |
| 334 | 439 | ||
| 335 | } |
440 | } |
| 336 | 441 | ||
| 337 | /** Configure pins as |
442 | /** Configure pins as |
| 338 | * Analog |
443 | * Analog |
| 339 | * Input |
444 | * Input |
| 340 | * Output |
445 | * Output |
| 341 | * EVENT_OUT |
446 | * EVENT_OUT |
| 342 | * EXTI |
447 | * EXTI |
| 343 | */ |
448 | */ |
| 344 | void MX_GPIO_Init(void) |
449 | void MX_GPIO_Init(void) { |
| - | 450 | ||
| - | 451 | GPIO_InitTypeDef GPIO_InitStruct; |
|
| 345 | { |
452 | |
| - | 453 | /* GPIO Ports Clock Enable */ |
|
| - | 454 | __HAL_RCC_GPIOD_CLK_ENABLE() |
|
| - | 455 | ; |
|
| - | 456 | __HAL_RCC_GPIOA_CLK_ENABLE() |
|
| - | 457 | ; |
|
| - | 458 | __HAL_RCC_GPIOC_CLK_ENABLE() |
|
| - | 459 | ; |
|
| - | 460 | __HAL_RCC_GPIOB_CLK_ENABLE() |
|
| - | 461 | ; |
|
| 346 | 462 | ||
| - | 463 | /*Configure GPIO pin Output Level */ |
|
| - | 464 | HAL_GPIO_WritePin(GPIOA, SPI1_NSS1_Pin | SPI1CD_Pin, GPIO_PIN_RESET); |
|
| - | 465 | ||
| - | 466 | /*Configure GPIO pin Output Level */ |
|
| - | 467 | HAL_GPIO_WritePin(GPIOC, |
|
| - | 468 | SPI_RESET_Pin | SPI_NSS2_Pin | USART3_INVERT_Pin | USB_PWR_Pin, |
|
| - | 469 | GPIO_PIN_RESET); |
|
| - | 470 | ||
| - | 471 | /*Configure GPIO pins : SPI1_NSS1_Pin SPI1CD_Pin */ |
|
| - | 472 | GPIO_InitStruct.Pin = SPI1_NSS1_Pin | SPI1CD_Pin; |
|
| - | 473 | GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; |
|
| - | 474 | GPIO_InitStruct.Speed = GPIO_SPEED_LOW; |
|
| 347 | GPIO_InitTypeDef GPIO_InitStruct; |
475 | HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); |
| 348 | 476 | ||
| 349 | /* GPIO Ports Clock Enable */ |
- | |
| 350 | __HAL_RCC_GPIOD_CLK_ENABLE(); |
- | |
| 351 | __HAL_RCC_GPIOA_CLK_ENABLE(); |
- | |
| 352 | __HAL_RCC_GPIOC_CLK_ENABLE(); |
- | |
| 353 | __HAL_RCC_GPIOB_CLK_ENABLE(); |
- | |
| 354 | - | ||
| 355 | /*Configure GPIO pin Output Level */ |
- | |
| 356 | HAL_GPIO_WritePin(GPIOA, SPI1_NSS1_Pin|SPI1CD_Pin, GPIO_PIN_RESET); |
- | |
| 357 | - | ||
| 358 | /*Configure GPIO pin Output Level */ |
- | |
| 359 | HAL_GPIO_WritePin(GPIOC, SPI_RESET_Pin|SPI_NSS2_Pin|USART3_INVERT_Pin|USB_PWR_Pin, GPIO_PIN_RESET); |
- | |
| 360 | - | ||
| 361 | /*Configure GPIO pins : SPI1_NSS1_Pin SPI1CD_Pin */ |
- | |
| 362 | GPIO_InitStruct.Pin = SPI1_NSS1_Pin|SPI1CD_Pin; |
- | |
| 363 | GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; |
- | |
| 364 | GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; |
- | |
| 365 | HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); |
- | |
| 366 | - | ||
| 367 | /*Configure GPIO pins : SPI_RESET_Pin SPI_NSS2_Pin USART3_INVERT_Pin USB_PWR_Pin */ |
477 | /*Configure GPIO pins : SPI_RESET_Pin SPI_NSS2_Pin USART3_INVERT_Pin USB_PWR_Pin */ |
| 368 | GPIO_InitStruct.Pin = SPI_RESET_Pin|SPI_NSS2_Pin|USART3_INVERT_Pin|USB_PWR_Pin; |
478 | GPIO_InitStruct.Pin = SPI_RESET_Pin | SPI_NSS2_Pin | USART3_INVERT_Pin |
| - | 479 | | USB_PWR_Pin; |
|
| 369 | GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; |
480 | GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; |
| 370 | GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; |
481 | GPIO_InitStruct.Speed = GPIO_SPEED_LOW; |
| 371 | HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); |
482 | HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); |
| 372 | 483 | ||
| 373 | /*Configure GPIO pins : SW1_PUSH_Pin SW1_I_Pin SW1_Q_Pin SW2_PUSH_Pin */ |
484 | /*Configure GPIO pins : SW1_PUSH_Pin SW1_I_Pin SW1_Q_Pin SW2_PUSH_Pin */ |
| 374 | GPIO_InitStruct.Pin = SW1_PUSH_Pin|SW1_I_Pin|SW1_Q_Pin|SW2_PUSH_Pin; |
485 | GPIO_InitStruct.Pin = SW1_PUSH_Pin | SW1_I_Pin | SW1_Q_Pin | SW2_PUSH_Pin; |
| 375 | GPIO_InitStruct.Mode = GPIO_MODE_INPUT; |
486 | GPIO_InitStruct.Mode = GPIO_MODE_INPUT; |
| 376 | GPIO_InitStruct.Pull = GPIO_PULLUP; |
487 | GPIO_InitStruct.Pull = GPIO_PULLUP; |
| 377 | HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); |
488 | HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); |
| 378 | 489 | ||
| 379 | /*Configure GPIO pins : SW2_I_Pin SW2_Q_Pin */ |
490 | /*Configure GPIO pins : SW2_I_Pin SW2_Q_Pin */ |
| 380 | GPIO_InitStruct.Pin = SW2_I_Pin|SW2_Q_Pin; |
491 | GPIO_InitStruct.Pin = SW2_I_Pin | SW2_Q_Pin; |
| 381 | GPIO_InitStruct.Mode = GPIO_MODE_INPUT; |
492 | GPIO_InitStruct.Mode = GPIO_MODE_INPUT; |
| 382 | GPIO_InitStruct.Pull = GPIO_PULLUP; |
493 | GPIO_InitStruct.Pull = GPIO_PULLUP; |
| 383 | HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); |
494 | HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); |
| 384 | 495 | ||
| 385 | } |
496 | } |
| 386 | 497 | ||
| 387 | /* USER CODE BEGIN 4 */ |
498 | /* USER CODE BEGIN 4 */ |
| 388 | 499 | ||
| 389 | /* USER CODE END 4 */ |
500 | /* USER CODE END 4 */ |
| 390 | 501 | ||
| 391 | #ifdef USE_FULL_ASSERT |
502 | #ifdef USE_FULL_ASSERT |
| 392 | 503 | ||
| 393 | /** |
504 | /** |
| 394 | * @brief Reports the name of the source file and the source line number |
505 | * @brief Reports the name of the source file and the source line number |
| 395 | * where the assert_param error has occurred. |
506 | * where the assert_param error has occurred. |
| 396 | * @param file: pointer to the source file name |
507 | * @param file: pointer to the source file name |
| 397 | * @param line: assert_param error line source number |
508 | * @param line: assert_param error line source number |
| 398 | * @retval None |
509 | * @retval None |
| 399 | */ |
510 | */ |
| 400 | void assert_failed(uint8_t* file, uint32_t line) |
511 | void assert_failed(uint8_t* file, uint32_t line) |
| 401 | { |
512 | { |
| 402 | /* USER CODE BEGIN 6 */ |
513 | /* USER CODE BEGIN 6 */ |
| 403 | /* User can add his own implementation to report the file name and line number, |
514 | /* User can add his own implementation to report the file name and line number, |
| 404 | ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ |
515 | ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ |
| 405 | /* USER CODE END 6 */ |
516 | /* USER CODE END 6 */ |
| 406 | 517 | ||
| 407 | } |
518 | } |
| 408 | 519 | ||
| 409 | #endif |
520 | #endif |
| 410 | 521 | ||
| 411 | /** |
522 | /** |
| 412 | * @} |
523 | * @} |
| 413 | */ |
524 | */ |
| 414 | 525 | ||
| 415 | /** |
526 | /** |
| 416 | * @} |
527 | * @} |
| 417 | */ |
528 | */ |
| 418 | 529 | ||
| 419 | /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ |
530 | /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ |