QuakeGod
2024-11-25 9aed5d7e7b3c7bf09da712e9c272ece401a7acc9
提交 | 用户 | age
5dd1b7 1 /**
Q 2   ******************************************************************************
3   * @file           : BSP.c
4   * @brief          : Board Speciafic program 
5   ******************************************************************************
6   *
7   ******************************************************************************
8   */
9 /* Includes ------------------------------------------------------------------*/
10
11 #include "BSP.h"
12
13 #include "Globaldef.h"
14 #include "Functions.h"
15 #if (BOARD_TYPE == 14)
16 #include "fpx.h"
17 #endif
18
19 /*    
20     if ((nCurTick &0xff) ==0)
21     {
22         if (freqdir)         {    freq+=1+freq/10;if (freq>=1500) {freq=1500;freqdir=0;}}
23         else        {freq-=1+freq/10;if (freq<=10) {freq=10;freqdir=1;}    }
24     }
25 */    
26
27 /*    
28     static int outputsum=0;
29     static int freq=10;
30     static int freqdir=1;
31     static int phase=0;
32     static int somb=0;
33     static int len=0;
34     static int curbb=0;
35     
36     if ((nCurTick &0x3ff) ==1)
37     {
38         curbb++;
39         if (curbb+1==len)
40         {
41 //                freq=0;
42         }else    if (curbb>=len)
43         {    
44             somb=musictab1[cur_musicpos*2];
45             len=musictab1[cur_musicpos*2+1];
46             freq=freqtab[somb];
47             curbb=0;cur_musicpos++;        if (cur_musicpos >= Totalmusiccount) {cur_musicpos=0;}
48         }
49     }
50     if ((nCurTick &0x3ff) ==0x1ff)
51     {
52         if (curbb+1==len)
53         {
54                 freq=0;
55         }
56     }
57     phase+=freq;
58     if (phase>=5000) {phase-=5000;}
59
60
61     if (outtype==1)
62     {
63         outputsum+=freq;
64         if (outputsum>=5000)
65         {
66             //LL_GPIO_SetOutputPin(GPIOB,LL_GPIO_PIN_3);
67             LL_GPIO_TogglePin(GPIOB,LL_GPIO_PIN_3);
68             outputsum-=5000;
69         }
70         else
71         {
72             //LL_GPIO_ResetOutputPin(GPIOB,LL_GPIO_PIN_3);
73         }        
74     }else if (outtype==2)
75     {
76         const int volume = 2500;        
77         int amp;        
78         if (phase<1250)
79         {
80             amp=2500+sintab[(phase -0)*256/1250]*volume/256;
81             
82         }else if (phase <2500)
83         {
84             amp=2500+sintab[(2500-1-phase)*256/1250]*volume/256;
85         }else if (phase <3750)
86         {
87             amp=2500-sintab[(phase-2500)*256/1250]*volume/256;        
88         }else
89         {
90             amp=2500-sintab[(5000-1-phase)*256/1250]*volume/256;        
91         }        
92         outputsum+=amp;
93         if (outputsum>=5000)
94         {
95             LL_GPIO_SetOutputPin(GPIOB,LL_GPIO_PIN_3);
96             //LL_GPIO_TogglePin(GPIOB,LL_GPIO_PIN_3);
97             outputsum-=5000;
98         }
99         else
100         {
101             LL_GPIO_ResetOutputPin(GPIOB,LL_GPIO_PIN_3);
102         }        
103     }
104 */
105
106
107 /**
108   * @brief System Clock Configuration
109   * @retval None
110   */
111
112 void SystemClock_Config(void)
113 {
114     RCC_OscInitTypeDef RCC_OscInitStruct = {0};
115   RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
116
117   /** Initializes the CPU, AHB and APB busses clocks 
118   */
119   RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
120   RCC_OscInitStruct.HSEState = RCC_HSE_ON;
121   RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
122   RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
123 //  RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI;
124     
125 #if (XLAT_FREQ == 12)    
126   RCC_OscInitStruct.PLL.PREDIV = RCC_PREDIV_DIV3;
127 #else
128   RCC_OscInitStruct.PLL.PREDIV = RCC_PREDIV_DIV2;
129 #endif
130
131     RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL12;    
132   if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
133   {
134     Error_Handler();
135   }
136   /** Initializes the CPU, AHB and APB busses clocks 
137   */
138   RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
139                               |RCC_CLOCKTYPE_PCLK1;
140   RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
141   RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
142   RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
143
144   if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_1) != HAL_OK)
145   {
146     Error_Handler();
147   }
148
149   //RCC_OscInitTypeDef RCC_OscInitStruct;
150   //RCC_ClkInitTypeDef RCC_ClkInitStruct;
151   RCC_PeriphCLKInitTypeDef PeriphClkInit;
152
153     /**Initializes the CPU, AHB and APB busses clocks 
154     */
155
156   PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_USART1;
157   PeriphClkInit.Usart1ClockSelection = RCC_USART1CLKSOURCE_SYSCLK;
158     
159   if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK)
160   {
161     _Error_Handler(__FILE__, __LINE__);
162   }
163
164     /**Configure the Systick interrupt time 
165     */
166 //  HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/10000);
167   HAL_SYSTICK_Config(48000000/10000);
168
169     /**Configure the Systick 
170     */
171   HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);
172
173   /* SysTick_IRQn interrupt configuration */
174   HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);
175 }
176
177 void MX_IWDG_Init(void)
178 {
179
180   /* USER CODE BEGIN IWDG_Init 0 */
181
182   /* USER CODE END IWDG_Init 0 */
183
184   /* USER CODE BEGIN IWDG_Init 1 */
185
186   /* USER CODE END IWDG_Init 1 */
187   LL_IWDG_Enable(IWDG);
188   LL_IWDG_EnableWriteAccess(IWDG);
189   LL_IWDG_SetPrescaler(IWDG, LL_IWDG_PRESCALER_64);
190   LL_IWDG_SetReloadCounter(IWDG, 4095);
191   while (LL_IWDG_IsReady(IWDG) != 1)
192   {
193   }
194
195   LL_IWDG_SetWindow(IWDG, 4095);
196   LL_IWDG_ReloadCounter(IWDG);
197   /* USER CODE BEGIN IWDG_Init 2 */
198
199   /* USER CODE END IWDG_Init 2 */
200
201 }
202 /**
203   * @brief TIM6 Initialization Function
204   * @param None
205   * @retval None
206   */
207 void MX_TIM6_Init(void)
208 {
209
210   /* USER CODE BEGIN TIM6_Init 0 */
211
212   /* USER CODE END TIM6_Init 0 */
213
214   LL_TIM_InitTypeDef TIM_InitStruct = {0};
215
216   /* Peripheral clock enable */
217   LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_TIM6);
218
219   /* TIM6 interrupt Init */
220   NVIC_SetPriority(TIM6_IRQn, 0);
221   NVIC_EnableIRQ(TIM6_IRQn);
222
223   /* USER CODE BEGIN TIM6_Init 1 */
224
225   /* USER CODE END TIM6_Init 1 */
226   TIM_InitStruct.Prescaler = 47;
227   TIM_InitStruct.CounterMode = LL_TIM_COUNTERMODE_UP;
228   TIM_InitStruct.Autoreload = 999;
229   LL_TIM_Init(TIM6, &TIM_InitStruct);
230   LL_TIM_DisableARRPreload(TIM6);
231   /* USER CODE BEGIN TIM6_Init 2 */
232     LL_TIM_EnableIT_UPDATE(TIM6);
233   /* USER CODE END TIM6_Init 2 */
234
235 }
236 /* ADC init function */
237 void MX_ADC_Init(void)
238 {
239
240   LL_ADC_InitTypeDef ADC_InitStruct;
241   LL_ADC_REG_InitTypeDef ADC_REG_InitStruct;
242
243   /* Peripheral clock enable */
244   LL_APB1_GRP2_EnableClock(LL_APB1_GRP2_PERIPH_ADC1);
245
246     /**Configure Regular Channel 
247     */
248   LL_ADC_REG_SetSequencerChAdd(ADC1, LL_ADC_CHANNEL_0|LL_ADC_CHANNEL_1);
249
250   LL_ADC_SetCommonPathInternalCh(__LL_ADC_COMMON_INSTANCE(ADC1), LL_ADC_PATH_INTERNAL_TEMPSENSOR|LL_ADC_PATH_INTERNAL_VREFINT);
251
252     /**Configure Regular Channel 
253     */
254   LL_ADC_REG_SetSequencerChAdd(ADC1, LL_ADC_CHANNEL_TEMPSENSOR|LL_ADC_CHANNEL_VREFINT);
255
256   LL_ADC_SetCommonPathInternalCh(__LL_ADC_COMMON_INSTANCE(ADC1), LL_ADC_PATH_INTERNAL_TEMPSENSOR|LL_ADC_PATH_INTERNAL_VREFINT);
257
258     /**Configure the global features of the ADC (Clock, Resolution, Data Alignment and number of conversion) 
259     */
260   ADC_InitStruct.Clock = LL_ADC_CLOCK_ASYNC;
261   ADC_InitStruct.Resolution = LL_ADC_RESOLUTION_12B;
262   ADC_InitStruct.DataAlignment = LL_ADC_DATA_ALIGN_RIGHT;
263   ADC_InitStruct.LowPowerMode = LL_ADC_LP_MODE_NONE;
264   LL_ADC_Init(ADC1, &ADC_InitStruct);
265
266   ADC_REG_InitStruct.TriggerSource = LL_ADC_REG_TRIG_SOFTWARE;
267   ADC_REG_InitStruct.SequencerDiscont = LL_ADC_REG_SEQ_DISCONT_DISABLE;
268   ADC_REG_InitStruct.ContinuousMode = LL_ADC_REG_CONV_SINGLE;
269   ADC_REG_InitStruct.DMATransfer = LL_ADC_REG_DMA_TRANSFER_LIMITED;
270   ADC_REG_InitStruct.Overrun = LL_ADC_REG_OVR_DATA_PRESERVED;
271   LL_ADC_REG_Init(ADC1, &ADC_REG_InitStruct);
272
273   LL_ADC_REG_SetSequencerScanDirection(ADC1, LL_ADC_REG_SEQ_SCAN_DIR_FORWARD);
274
275   LL_ADC_SetSamplingTimeCommonChannels(ADC1, LL_ADC_SAMPLINGTIME_28CYCLES_5);
276
277   LL_ADC_EnableIT_EOC(ADC1);
278
279   LL_ADC_DisableIT_EOS(ADC1);
280
281   LL_ADC_StartCalibration(ADC1);
282     
283 //  LL_ADC_EnableInternalRegulator(ADC1);
284     
285 //    ADC_TempSensorCmd(ENABLE);//?????????
286 //  ADC_VrefintCmd(ENABLE);     //????????   
287
288     
289     //ADC_TempSensorCmd(ENABLE);//
290     //ADC_ChannelConfig();
291   //ADC_VrefintCmd(ENABLE);     //
292  
293   while( LL_ADC_IsCalibrationOnGoing(ADC1));
294   LL_ADC_Enable(ADC1);
295 /*    
296   LL_ADC_REG_SetDMATransfer(ADC1,LL_ADC_REG_DMA_TRANSFER_UNLIMITED);
297   LL_ADC_REG_StartConversion(ADC1);
298 */
299 }
300
301 /* SPI1 init function */
302 void MX_SPI1_Init(void)
303 {
304
305   LL_SPI_InitTypeDef SPI_InitStruct = {0};
306
307   LL_GPIO_InitTypeDef GPIO_InitStruct = {0};
308
309   /* Peripheral clock enable */
310   LL_APB1_GRP2_EnableClock(LL_APB1_GRP2_PERIPH_SPI1);
311   
312   /**SPI1 GPIO Configuration  
313   PA5   ------> SPI1_SCK
314   PA6   ------> SPI1_MISO
315   PA7   ------> SPI1_MOSI 
316   */
317 //  GPIO_InitStruct.Pin = LL_GPIO_PIN_5;
318 //  GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE;
319 //  GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_HIGH;
320 //  GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
321 //  GPIO_InitStruct.Pull = LL_GPIO_PULL_NO;
322 //  GPIO_InitStruct.Alternate = LL_GPIO_AF_0;
323 //  LL_GPIO_Init(GPIOA, &GPIO_InitStruct);
324
325 //  GPIO_InitStruct.Pin = LL_GPIO_PIN_6;
326 //  GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE;
327 //  GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_HIGH;
328 //  GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
329 //  GPIO_InitStruct.Pull = LL_GPIO_PULL_NO;
330 //  GPIO_InitStruct.Alternate = LL_GPIO_AF_0;
331 //  LL_GPIO_Init(GPIOA, &GPIO_InitStruct);
332
333 //  GPIO_InitStruct.Pin = LL_GPIO_PIN_7;
334 //  GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE;
335 //  GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_HIGH;
336 //  GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
337 //  GPIO_InitStruct.Pull = LL_GPIO_PULL_NO;
338 //  GPIO_InitStruct.Alternate = LL_GPIO_AF_0;
339 //  LL_GPIO_Init(GPIOA, &GPIO_InitStruct);
340
341   LL_AHB1_GRP1_EnableClock(LL_AHB1_GRP1_PERIPH_GPIOB);
342   /**SPI1 GPIO Configuration  
343   PB3   ------> SPI1_SCK
344   PB4   ------> SPI1_MISO
345   PB5   ------> SPI1_MOSI 
346   */
347   GPIO_InitStruct.Pin = LL_GPIO_PIN_3;
348   GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE;
349   GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_HIGH;
350   GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
351   GPIO_InitStruct.Pull = LL_GPIO_PULL_NO;
352   GPIO_InitStruct.Alternate = LL_GPIO_AF_0;
353   LL_GPIO_Init(GPIOB, &GPIO_InitStruct);
354
355   GPIO_InitStruct.Pin = LL_GPIO_PIN_4;
356   GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE;
357   GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_HIGH;
358   GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
359   GPIO_InitStruct.Pull = LL_GPIO_PULL_UP;
360   GPIO_InitStruct.Alternate = LL_GPIO_AF_0;
361   LL_GPIO_Init(GPIOB, &GPIO_InitStruct);
362
363   GPIO_InitStruct.Pin = LL_GPIO_PIN_5;
364   GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE;
365   GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_HIGH;
366   GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
367   GPIO_InitStruct.Pull = LL_GPIO_PULL_NO;
368   GPIO_InitStruct.Alternate = LL_GPIO_AF_0;
369   LL_GPIO_Init(GPIOB, &GPIO_InitStruct);
370
371   /* SPI1 interrupt Init */
372   NVIC_SetPriority(SPI1_IRQn, 0);
373 //  NVIC_EnableIRQ(SPI1_IRQn);
374   /* USER CODE BEGIN SPI1_Init 1 */
375
376 #if (BOARD_TYPE == 13)
377
378   NVIC_EnableIRQ(SPI1_IRQn);
379   SPI_InitStruct.TransferDirection = LL_SPI_FULL_DUPLEX;
380   SPI_InitStruct.Mode = LL_SPI_MODE_MASTER;
381   SPI_InitStruct.DataWidth = LL_SPI_DATAWIDTH_8BIT;
382   SPI_InitStruct.ClockPolarity = LL_SPI_POLARITY_HIGH; //LL_SPI_POLARITY_LOW;
383   SPI_InitStruct.ClockPhase = LL_SPI_PHASE_2EDGE ; //LL_SPI_PHASE_1EDGE;
384   SPI_InitStruct.NSS = LL_SPI_NSS_SOFT;
385   SPI_InitStruct.BaudRate = LL_SPI_BAUDRATEPRESCALER_DIV2;
386   SPI_InitStruct.BitOrder = LL_SPI_MSB_FIRST;
387   SPI_InitStruct.CRCCalculation = LL_SPI_CRCCALCULATION_DISABLE;
388   SPI_InitStruct.CRCPoly = 7;
389   LL_SPI_Init(SPI1, &SPI_InitStruct);
390
391   LL_SPI_SetStandard(SPI1, LL_SPI_PROTOCOL_MOTOROLA);
392
393   LL_SPI_SetRxFIFOThreshold(SPI1,LL_SPI_RX_FIFO_TH_QUARTER);
394 //  LL_SPI_EnableNSSPulseMgt(SPI1);    
395
396 #elif (BOARD_TYPE == 14)
397
398   NVIC_EnableIRQ(SPI1_IRQn);
399   SPI_InitStruct.TransferDirection = LL_SPI_FULL_DUPLEX;
400   SPI_InitStruct.Mode = LL_SPI_MODE_SLAVE;
401   SPI_InitStruct.DataWidth = LL_SPI_DATAWIDTH_8BIT;
402   SPI_InitStruct.ClockPolarity = LL_SPI_POLARITY_LOW; //LL_SPI_POLARITY_LOW;
403   SPI_InitStruct.ClockPhase = LL_SPI_PHASE_2EDGE ; //LL_SPI_PHASE_1EDGE;
404   SPI_InitStruct.NSS = LL_SPI_NSS_SOFT;
405   SPI_InitStruct.BaudRate = LL_SPI_BAUDRATEPRESCALER_DIV4;
406   SPI_InitStruct.BitOrder = LL_SPI_LSB_FIRST;
407   SPI_InitStruct.CRCCalculation = LL_SPI_CRCCALCULATION_DISABLE;
408   SPI_InitStruct.CRCPoly = 7;
409   LL_SPI_Init(SPI1, &SPI_InitStruct);
410
411   LL_SPI_SetStandard(SPI1, LL_SPI_PROTOCOL_MOTOROLA);
412   LL_SPI_DisableNSSPulseMgt(SPI1);
413   LL_SPI_SetRxFIFOThreshold(SPI1,LL_SPI_RX_FIFO_TH_QUARTER);
414 //  LL_SPI_EnableNSSPulseMgt(SPI1);    
415
416 #elif (BOARD_TYPE == 15 || BOARD_TYPE == 16)
417
418   SPI_InitStruct.TransferDirection = LL_SPI_FULL_DUPLEX;
419   SPI_InitStruct.Mode = LL_SPI_MODE_MASTER;
420   SPI_InitStruct.DataWidth = LL_SPI_DATAWIDTH_8BIT;
421   SPI_InitStruct.ClockPolarity = LL_SPI_POLARITY_LOW;
422   SPI_InitStruct.ClockPhase = LL_SPI_PHASE_1EDGE;
423   SPI_InitStruct.NSS = LL_SPI_NSS_SOFT;
424   SPI_InitStruct.BaudRate = LL_SPI_BAUDRATEPRESCALER_DIV4;
425   SPI_InitStruct.BitOrder = LL_SPI_MSB_FIRST;
426   SPI_InitStruct.CRCCalculation = LL_SPI_CRCCALCULATION_DISABLE;
427   SPI_InitStruct.CRCPoly = 7;
428   LL_SPI_Init(SPI1, &SPI_InitStruct);
429
430   LL_SPI_SetStandard(SPI1, LL_SPI_PROTOCOL_MOTOROLA);
431
432   LL_SPI_SetRxFIFOThreshold(SPI1,LL_SPI_RX_FIFO_TH_QUARTER);
433 //  LL_SPI_EnableNSSPulseMgt(SPI1);    
434
435 #else
436
437   /* USER CODE END SPI1_Init 1 */
438
439   /* SPI1 parameter configuration*/
440   SPI_InitStruct.TransferDirection = LL_SPI_FULL_DUPLEX;
441   SPI_InitStruct.Mode = LL_SPI_MODE_MASTER;
442   SPI_InitStruct.DataWidth = LL_SPI_DATAWIDTH_8BIT;
443   SPI_InitStruct.ClockPolarity = LL_SPI_POLARITY_LOW;
444   SPI_InitStruct.ClockPhase = LL_SPI_PHASE_1EDGE;
445   SPI_InitStruct.NSS = LL_SPI_NSS_SOFT;
446   SPI_InitStruct.BaudRate = LL_SPI_BAUDRATEPRESCALER_DIV4;
447   SPI_InitStruct.BitOrder = LL_SPI_MSB_FIRST;
448   SPI_InitStruct.CRCCalculation = LL_SPI_CRCCALCULATION_DISABLE;
449   SPI_InitStruct.CRCPoly = 7;
450   LL_SPI_Init(SPI1, &SPI_InitStruct);
451
452   LL_SPI_SetStandard(SPI1, LL_SPI_PROTOCOL_MOTOROLA);
453
454   LL_SPI_SetRxFIFOThreshold(SPI1,LL_SPI_RX_FIFO_TH_QUARTER);
455 //  LL_SPI_EnableNSSPulseMgt(SPI1);
456
457   /* USER CODE BEGIN SPI1_Init 2 */
458
459 #endif
460
461     LL_SPI_Enable(SPI1);
462   /* USER CODE END SPI1_Init 2 */
463 }
464
465 /* SPI2 init function */
466 void MX_SPI2_Init(void)
467 {
468
469   LL_SPI_InitTypeDef SPI_InitStruct = {0};
470
471   LL_GPIO_InitTypeDef GPIO_InitStruct = {0};
472
473   /* Peripheral clock enable */
474   LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_SPI2);
475   
476   LL_AHB1_GRP1_EnableClock(LL_AHB1_GRP1_PERIPH_GPIOB);
477   /**SPI2 GPIO Configuration  
478   PB13   ------> SPI2_SCK
479   PB14   ------> SPI2_MISO
480   PB15   ------> SPI2_MOSI 
481   */
482   GPIO_InitStruct.Pin = LL_GPIO_PIN_13;
483   GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE;
484   GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_HIGH;
485   GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
486   GPIO_InitStruct.Pull = LL_GPIO_PULL_NO;
487   GPIO_InitStruct.Alternate = LL_GPIO_AF_0;
488   LL_GPIO_Init(GPIOB, &GPIO_InitStruct);
489
490   GPIO_InitStruct.Pin = LL_GPIO_PIN_14;
491   GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE;
492   GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_HIGH;
493   GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
494   GPIO_InitStruct.Pull = LL_GPIO_PULL_NO;
495   GPIO_InitStruct.Alternate = LL_GPIO_AF_0;
496   LL_GPIO_Init(GPIOB, &GPIO_InitStruct);
497
498   GPIO_InitStruct.Pin = LL_GPIO_PIN_15;
499   GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE;
500   GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_HIGH;
501   GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
502   GPIO_InitStruct.Pull = LL_GPIO_PULL_NO;
503   GPIO_InitStruct.Alternate = LL_GPIO_AF_0;
504   LL_GPIO_Init(GPIOB, &GPIO_InitStruct);
505
506   /* SPI2 interrupt Init */
507   //NVIC_SetPriority(SPI2_IRQn, 0);
508   //NVIC_EnableIRQ(SPI2_IRQn);
509   /* USER CODE BEGIN SPI2_Init 1 */
510
511   /* USER CODE END SPI2_Init 1 */
512
513   /* SPI2 parameter configuration*/
514   SPI_InitStruct.TransferDirection = LL_SPI_FULL_DUPLEX;
515   SPI_InitStruct.Mode = LL_SPI_MODE_MASTER;
516   SPI_InitStruct.DataWidth = LL_SPI_DATAWIDTH_8BIT;
517   SPI_InitStruct.ClockPolarity = LL_SPI_POLARITY_LOW; //LL_SPI_POLARITY_HIGH;//LL_SPI_POLARITY_LOW;
518   SPI_InitStruct.ClockPhase = LL_SPI_PHASE_1EDGE; //LL_SPI_PHASE_1EDGE;
519   SPI_InitStruct.NSS = LL_SPI_NSS_SOFT;
520   SPI_InitStruct.BaudRate = LL_SPI_BAUDRATEPRESCALER_DIV2;
521   SPI_InitStruct.BitOrder = LL_SPI_MSB_FIRST;
522   SPI_InitStruct.CRCCalculation = LL_SPI_CRCCALCULATION_DISABLE;
523   SPI_InitStruct.CRCPoly = 7;
524   LL_SPI_Init(SPI2, &SPI_InitStruct);
525   LL_SPI_SetStandard(SPI2, LL_SPI_PROTOCOL_MOTOROLA);
526   LL_SPI_EnableNSSPulseMgt(SPI2);
527   /* USER CODE BEGIN SP21_Init 2 */
528     LL_SPI_Enable(SPI2);
529   /* USER CODE END SPI2_Init 2 */
530 }
531
532
533 /* USART1 init function */
534 void MX_USART1_UART_Init(void)
535 {
536
537   LL_USART_InitTypeDef USART_InitStruct;
538
539   LL_GPIO_InitTypeDef GPIO_InitStruct;
540
541   /* Peripheral clock enable */
542   LL_APB1_GRP2_EnableClock(LL_APB1_GRP2_PERIPH_USART1);
543
544   /**USART1 GPIO Configuration  
545  // PA1   ------> USART1_DE
546   PA9   ------> USART1_TX
547   PA10   ------> USART1_RX 
548   */
549   GPIO_InitStruct.Pin = LL_GPIO_PIN_9|LL_GPIO_PIN_10;
550   GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE;
551   GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_HIGH;
552   GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
553   GPIO_InitStruct.Pull = LL_GPIO_PULL_NO;
554   GPIO_InitStruct.Alternate = LL_GPIO_AF_1;
555   LL_GPIO_Init(GPIOA, &GPIO_InitStruct);
556
557   /* USART1 DMA Init */
558   
559   /* USART1_TX Init */
560   LL_DMA_SetDataTransferDirection(DMA1, LL_DMA_CHANNEL_2, LL_DMA_DIRECTION_MEMORY_TO_PERIPH);
561   LL_DMA_SetChannelPriorityLevel(DMA1, LL_DMA_CHANNEL_2, LL_DMA_PRIORITY_LOW);
562   LL_DMA_SetMode(DMA1, LL_DMA_CHANNEL_2, LL_DMA_MODE_NORMAL);
563   LL_DMA_SetPeriphIncMode(DMA1, LL_DMA_CHANNEL_2, LL_DMA_PERIPH_NOINCREMENT);
564   LL_DMA_SetMemoryIncMode(DMA1, LL_DMA_CHANNEL_2, LL_DMA_MEMORY_INCREMENT);
565   LL_DMA_SetPeriphSize(DMA1, LL_DMA_CHANNEL_2, LL_DMA_PDATAALIGN_BYTE);
566   LL_DMA_SetMemorySize(DMA1, LL_DMA_CHANNEL_2, LL_DMA_MDATAALIGN_BYTE);
567
568   /* USART1_RX Init */
569   LL_DMA_SetDataTransferDirection(DMA1, LL_DMA_CHANNEL_3, LL_DMA_DIRECTION_PERIPH_TO_MEMORY);
570   LL_DMA_SetChannelPriorityLevel(DMA1, LL_DMA_CHANNEL_3, LL_DMA_PRIORITY_LOW);
571   LL_DMA_SetMode(DMA1, LL_DMA_CHANNEL_3, LL_DMA_MODE_NORMAL);
572   LL_DMA_SetPeriphIncMode(DMA1, LL_DMA_CHANNEL_3, LL_DMA_PERIPH_NOINCREMENT);
573   LL_DMA_SetMemoryIncMode(DMA1, LL_DMA_CHANNEL_3, LL_DMA_MEMORY_INCREMENT);
574   LL_DMA_SetPeriphSize(DMA1, LL_DMA_CHANNEL_3, LL_DMA_PDATAALIGN_BYTE);
575   LL_DMA_SetMemorySize(DMA1, LL_DMA_CHANNEL_3, LL_DMA_MDATAALIGN_BYTE);
576
577   /* USART1 interrupt Init */
578   NVIC_SetPriority(USART1_IRQn, 0);
579   NVIC_EnableIRQ(USART1_IRQn);
580
581   USART_InitStruct.BaudRate = Uart1Baud;
582   USART_InitStruct.DataWidth = LL_USART_DATAWIDTH_8B;
583   USART_InitStruct.StopBits = LL_USART_STOPBITS_1;
584   USART_InitStruct.Parity = LL_USART_PARITY_NONE;
585   USART_InitStruct.TransferDirection = LL_USART_DIRECTION_TX_RX;
586   USART_InitStruct.HardwareFlowControl = LL_USART_HWCONTROL_NONE;
587   USART_InitStruct.OverSampling = LL_USART_OVERSAMPLING_16;
588   LL_USART_Init(USART1, &USART_InitStruct);
589 //  LL_USART_EnableDEMode(USART1);
590 //  LL_USART_SetDESignalPolarity(USART1, LL_USART_DE_POLARITY_LOW);
591 //  LL_USART_SetDEAssertionTime(USART1, 1);
592 //  LL_USART_SetDEDeassertionTime(USART1, 1);
593 //  LL_USART_EnableOneBitSamp(USART1);
594   LL_USART_EnableAutoBaudRate(USART1);
595   LL_USART_SetAutoBaudRateMode(USART1, LL_USART_AUTOBAUD_DETECT_ON_FALLINGEDGE);
596   LL_USART_DisableOverrunDetect(USART1);
597   LL_USART_ConfigAsyncMode(USART1);
598   LL_USART_Enable(USART1);
599 }
600
601
602 /* USART2 init function */
603 void MX_USART2_UART_Init(void)
604 {
605
606   LL_USART_InitTypeDef USART_InitStruct = {0};
607   LL_GPIO_InitTypeDef GPIO_InitStruct = {0};
608
609   /* Peripheral clock enable */
610   LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_USART2);
611   LL_AHB1_GRP1_EnableClock(LL_AHB1_GRP1_PERIPH_GPIOA);    
612   
613   /**USART2 GPIO Configuration  
614   PA1   ------> USART2_DE
615   PA2   ------> USART2_TX
616   PA3   ------> USART2_RX 
617   */
618
619   GPIO_InitStruct.Pin = LL_GPIO_PIN_1|LL_GPIO_PIN_2|LL_GPIO_PIN_3;
620   GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE;
621   GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_HIGH;
622   GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_OPENDRAIN;
623   GPIO_InitStruct.Pull = LL_GPIO_PULL_NO;
624   GPIO_InitStruct.Alternate = LL_GPIO_AF_1;
625   LL_GPIO_Init(GPIOA, &GPIO_InitStruct);
626
627 #if (USART2_USE_HARDWARE_DE == 1)
628     
629 #else
630   GPIO_InitStruct.Pin = LL_GPIO_PIN_1;
631   GPIO_InitStruct.Mode = LL_GPIO_MODE_OUTPUT;
632   GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_HIGH;
633   GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_OPENDRAIN;
634   GPIO_InitStruct.Pull = LL_GPIO_PULL_NO;
635   LL_GPIO_Init(GPIOA, &GPIO_InitStruct);
636
637 #endif
638     
639   /* USART2 DMA Init */
640   
641   /* USART2_TX Init */
642   LL_DMA_SetDataTransferDirection(DMA1, LL_DMA_CHANNEL_4, LL_DMA_DIRECTION_MEMORY_TO_PERIPH);
643   LL_DMA_SetChannelPriorityLevel(DMA1, LL_DMA_CHANNEL_4, LL_DMA_PRIORITY_LOW);
644   LL_DMA_SetMode(DMA1, LL_DMA_CHANNEL_4, LL_DMA_MODE_NORMAL);
645   LL_DMA_SetPeriphIncMode(DMA1, LL_DMA_CHANNEL_4, LL_DMA_PERIPH_NOINCREMENT);
646   LL_DMA_SetMemoryIncMode(DMA1, LL_DMA_CHANNEL_4, LL_DMA_MEMORY_INCREMENT);
647   LL_DMA_SetPeriphSize(DMA1, LL_DMA_CHANNEL_4, LL_DMA_PDATAALIGN_BYTE);
648   LL_DMA_SetMemorySize(DMA1, LL_DMA_CHANNEL_4, LL_DMA_MDATAALIGN_BYTE);
649
650   /* USART2_RX Init */
651   LL_DMA_SetDataTransferDirection(DMA1, LL_DMA_CHANNEL_5, LL_DMA_DIRECTION_PERIPH_TO_MEMORY);
652   LL_DMA_SetChannelPriorityLevel(DMA1, LL_DMA_CHANNEL_5, LL_DMA_PRIORITY_LOW);
653   LL_DMA_SetMode(DMA1, LL_DMA_CHANNEL_5, LL_DMA_MODE_NORMAL);
654   LL_DMA_SetPeriphIncMode(DMA1, LL_DMA_CHANNEL_5, LL_DMA_PERIPH_NOINCREMENT);
655   LL_DMA_SetMemoryIncMode(DMA1, LL_DMA_CHANNEL_5, LL_DMA_MEMORY_INCREMENT);
656   LL_DMA_SetPeriphSize(DMA1, LL_DMA_CHANNEL_5, LL_DMA_PDATAALIGN_BYTE);
657   LL_DMA_SetMemorySize(DMA1, LL_DMA_CHANNEL_5, LL_DMA_MDATAALIGN_BYTE);
658
659   /* USART2 interrupt Init */
660   NVIC_SetPriority(USART2_IRQn, 0);
661   NVIC_EnableIRQ(USART2_IRQn);
662
663   NVIC_SetPriority(PendSV_IRQn, 255);
664   NVIC_EnableIRQ(PendSV_IRQn);
665 //    NVIC_SetPendingIRQ(PendSV_IRQn);
666     
667   USART_InitStruct.BaudRate = Uart2Baud;
668   USART_InitStruct.DataWidth = LL_USART_DATAWIDTH_8B;
669   USART_InitStruct.StopBits = LL_USART_STOPBITS_1;
670   USART_InitStruct.Parity = LL_USART_PARITY_NONE;
671   USART_InitStruct.TransferDirection = LL_USART_DIRECTION_TX_RX;
672   USART_InitStruct.HardwareFlowControl = LL_USART_HWCONTROL_NONE;
673   USART_InitStruct.OverSampling = LL_USART_OVERSAMPLING_8;
674   LL_USART_Init(USART2, &USART_InitStruct);
675
676 #if (USART2_USE_HARDWARE_DE == 1)
677
678   LL_USART_EnableDEMode(USART2);
679   LL_USART_SetDESignalPolarity(USART2, LL_USART_DE_POLARITY_LOW);
680 //  LL_USART_SetDESignalPolarity(USART2, LL_USART_DE_POLARITY_HIGH);
681   LL_USART_SetDEAssertionTime(USART2, 31);
682   LL_USART_SetDEDeassertionTime(USART2, 31);
683 #else
684
685 #endif
686     
687 //  LL_USART_EnableOneBitSamp(USART2);
688 //  LL_USART_EnableAutoBaudRate(USART2);
689 //  LL_USART_SetAutoBaudRateMode(USART2, LL_USART_AUTOBAUD_DETECT_ON_FALLINGEDGE);
690   LL_USART_DisableOverrunDetect(USART2);
691   LL_USART_ConfigAsyncMode(USART2);
692   LL_USART_Enable(USART2);
693 }
694
695 /** 
696   * Enable DMA controller clock
697   */
698 void MX_DMA_Init(void) 
699 {
700   /* Init with LL driver */
701   /* DMA controller clock enable */
702   LL_AHB1_GRP1_EnableClock(LL_AHB1_GRP1_PERIPH_DMA1);
703
704   /* DMA interrupt init */
705   /* DMA1_Channel2_3_IRQn interrupt configuration */
706   NVIC_SetPriority(DMA1_Channel2_3_IRQn, 0);
707   NVIC_EnableIRQ(DMA1_Channel2_3_IRQn);
708   NVIC_SetPriority(DMA1_Channel4_5_IRQn, 0);
709   NVIC_EnableIRQ(DMA1_Channel4_5_IRQn);
710 }
711
712 /** Configure pins as 
713         * Analog 
714         * Input 
715         * Output
716         * EVENT_OUT
717         * EXTI
718 */
719 void MX_GPIO_Init(void)
720 {
721
722   LL_GPIO_InitTypeDef GPIO_InitStruct;
723
724   /* GPIO Ports Clock Enable */
725   LL_AHB1_GRP1_EnableClock(LL_AHB1_GRP1_PERIPH_GPIOA);
726   LL_AHB1_GRP1_EnableClock(LL_AHB1_GRP1_PERIPH_GPIOB);
727   LL_AHB1_GRP1_EnableClock(LL_AHB1_GRP1_PERIPH_GPIOC);
728   LL_AHB1_GRP1_EnableClock(LL_AHB1_GRP1_PERIPH_GPIOF);
729     /**/
730
731
732   /**/
733     GPIO_InitStruct.Pin = LL_GPIO_PIN_6 ;
734   GPIO_InitStruct.Mode = LL_GPIO_MODE_INPUT;
735   GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_HIGH;
736   GPIO_InitStruct.Pull = LL_GPIO_PULL_UP;
737   LL_GPIO_Init(GPIOA, &GPIO_InitStruct);
738     
739     GPIO_InitStruct.Pin = LL_GPIO_PIN_7 ;
740   GPIO_InitStruct.Mode = LL_GPIO_MODE_INPUT;
741   GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_HIGH;
742   GPIO_InitStruct.Pull = LL_GPIO_PULL_NO;
743   LL_GPIO_Init(GPIOA, &GPIO_InitStruct);
744
745     GPIO_InitStruct.Pin = LL_GPIO_PIN_0 |LL_GPIO_PIN_1 ;
746   GPIO_InitStruct.Mode = LL_GPIO_MODE_INPUT;
747   GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_HIGH;
748   GPIO_InitStruct.Pull = LL_GPIO_PULL_NO;
749   LL_GPIO_Init(GPIOB, &GPIO_InitStruct);
750     
751
752     GPIO_InitStruct.Pin = LL_GPIO_PIN_4|LL_GPIO_PIN_5|LL_GPIO_PIN_8|LL_GPIO_PIN_11;
753   GPIO_InitStruct.Mode = LL_GPIO_MODE_OUTPUT;
754   GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_HIGH;
755   GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
756   GPIO_InitStruct.Pull = LL_GPIO_PULL_NO;
757   LL_GPIO_Init(GPIOA, &GPIO_InitStruct);
758   LL_GPIO_SetOutputPin(GPIOA, LL_GPIO_PIN_8);    
759     
760   GPIO_InitStruct.Pin = LL_GPIO_PIN_9|LL_GPIO_PIN_10;
761   GPIO_InitStruct.Mode = LL_GPIO_MODE_INPUT;
762   GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_HIGH;
763   GPIO_InitStruct.Pull = LL_GPIO_PULL_UP;
764   LL_GPIO_Init(GPIOA, &GPIO_InitStruct);
765     
766     
767      GPIO_InitStruct.Pin = LL_GPIO_PIN_2|LL_GPIO_PIN_10;
768   GPIO_InitStruct.Mode = LL_GPIO_MODE_INPUT;
769   GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_HIGH;
770   GPIO_InitStruct.Pull = LL_GPIO_PULL_UP;
771   LL_GPIO_Init(GPIOB, &GPIO_InitStruct);
772     
773     if (GetBoardType()==2)
774     {
775         GPIO_InitStruct.Pin = LL_GPIO_PIN_3|LL_GPIO_PIN_4|LL_GPIO_PIN_5|LL_GPIO_PIN_6|LL_GPIO_PIN_7|
776         LL_GPIO_PIN_12|LL_GPIO_PIN_13|LL_GPIO_PIN_15;
777         
778     }
779     else if (GetBoardType()==9 || GetBoardType()==10 || GetBoardType()==15 || BOARD_TYPE == 16 )
780     {
781         GPIO_InitStruct.Pin = LL_GPIO_PIN_3|LL_GPIO_PIN_5|LL_GPIO_PIN_6|LL_GPIO_PIN_7|
782         LL_GPIO_PIN_11|LL_GPIO_PIN_1|LL_GPIO_PIN_2|LL_GPIO_PIN_10|
783         LL_GPIO_PIN_12|LL_GPIO_PIN_13|LL_GPIO_PIN_15;
784     }
785     else if ( GetBoardType() == 11 )
786     {    
787         GPIO_InitStruct.Pin = LL_GPIO_PIN_3|LL_GPIO_PIN_4|LL_GPIO_PIN_5|LL_GPIO_PIN_6|LL_GPIO_PIN_7|
788         LL_GPIO_PIN_2|LL_GPIO_PIN_10|LL_GPIO_PIN_12|LL_GPIO_PIN_13|LL_GPIO_PIN_15;
789     } else    if (BOARD_TYPE == 14)
790     {    
791         GPIO_InitStruct.Pin = LL_GPIO_PIN_6|LL_GPIO_PIN_7|
792         LL_GPIO_PIN_10|LL_GPIO_PIN_11|LL_GPIO_PIN_12|LL_GPIO_PIN_13|LL_GPIO_PIN_14|LL_GPIO_PIN_15;
793     } else
794     {
795         GPIO_InitStruct.Pin = LL_GPIO_PIN_3|LL_GPIO_PIN_4|LL_GPIO_PIN_5|LL_GPIO_PIN_6|LL_GPIO_PIN_7|
796         LL_GPIO_PIN_0|LL_GPIO_PIN_1|LL_GPIO_PIN_2|LL_GPIO_PIN_10|
797         LL_GPIO_PIN_12|LL_GPIO_PIN_13|LL_GPIO_PIN_15;
798     }
799     
800   GPIO_InitStruct.Mode = LL_GPIO_MODE_OUTPUT;
801   GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_HIGH;
802   GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
803   GPIO_InitStruct.Pull = LL_GPIO_PULL_NO;
804   LL_GPIO_Init(GPIOB, &GPIO_InitStruct);
805
806   GPIO_InitStruct.Pin = LL_GPIO_PIN_13|LL_GPIO_PIN_14|LL_GPIO_PIN_15;
807   GPIO_InitStruct.Mode = LL_GPIO_MODE_OUTPUT;
808   GPIO_InitStruct.Speed = LL_GPIO_SPEED_LOW;
809   GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
810   GPIO_InitStruct.Pull = LL_GPIO_PULL_NO;
811   LL_GPIO_Init(GPIOC, &GPIO_InitStruct);
812     
813  //   RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO,ENABLE );
814 //    PWR_BackupAccessCmd( ENABLE );/* ????RTC??????*/
815 //    RCC_LSEConfig( RCC_LSE_OFF ); /* ????????,PC14+PC15??????IO*/
816  //   BKP_TamperPinCmd(DISABLE);  /* ????????,PC13??????IO*/
817
818 #if (BORAD_TYPE == 13)
819
820   GPIO_InitStruct.Pin = LL_GPIO_PIN_15 ;
821   GPIO_InitStruct.Mode = LL_GPIO_MODE_OUTPUT;
822   GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_HIGH;
823   GPIO_InitStruct.Pull = LL_GPIO_OUTPUT_PUSHPULL;
824   LL_GPIO_Init(GPIOA, &GPIO_InitStruct);
825
826 #endif
827
828 }