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