@@ -87,27 +87,31 @@ void ADC_DeInit(ADC_Module* NS_ADCx) {
8787 reg_temp = ADC_RCC_AHBPRST;
8888 reg_temp |= RCC_AHB_PERIPH_ADC1;
8989 ADC_RCC_AHBPRST = reg_temp; // ADC module reunion position
90+ TERN_ (HAS_N32_CR10, for (volatile int i=0 ; i<10 ; i++) {})
9091 ADC_RCC_AHBPRST = 0x00000000 ; // ADC module reset and clear
9192 }
9293 else if (NS_ADCx == NS_ADC2) {
9394 /* Enable ADC2 reset state */
9495 reg_temp = ADC_RCC_AHBPRST;
9596 reg_temp |= RCC_AHB_PERIPH_ADC2;
9697 ADC_RCC_AHBPRST = reg_temp; // ADC module reunion position
98+ TERN_ (HAS_N32_CR10, for (volatile int i=0 ; i<10 ; i++) {})
9799 ADC_RCC_AHBPRST = 0x00000000 ; // ADC module reset and clear
98100 }
99101 else if (NS_ADCx == NS_ADC3) {
100102 /* Enable ADC2 reset state */
101103 reg_temp = ADC_RCC_AHBPRST;
102104 reg_temp |= RCC_AHB_PERIPH_ADC3;
103105 ADC_RCC_AHBPRST = reg_temp; // ADC module reunion position
106+ TERN_ (HAS_N32_CR10, for (volatile int i=0 ; i<10 ; i++) {})
104107 ADC_RCC_AHBPRST = 0x00000000 ; // ADC module reset and clear
105108 }
106109 else if (NS_ADCx == NS_ADC4) {
107110 /* Enable ADC3 reset state */
108111 reg_temp = ADC_RCC_AHBPRST;
109112 reg_temp |= RCC_AHB_PERIPH_ADC4;
110113 ADC_RCC_AHBPRST = reg_temp; // ADC module reunion position
114+ TERN_ (HAS_N32_CR10, for (volatile int i=0 ; i<10 ; i++) {})
111115 ADC_RCC_AHBPRST = 0x00000000 ; // ADC module reset and clear
112116 }
113117}
@@ -399,21 +403,25 @@ void enable_adc_clk(uint8_t cmd) {
399403void ADC_Initial (ADC_Module* NS_ADCx) {
400404 ADC_InitType ADC_InitStructure;
401405
406+ TERN_ (HAS_N32_CR10, ADC_DeInit (NS_ADCx));
407+
402408 /* ADC configuration ------------------------------------------------------*/
403409 ADC_InitStructure.WorkMode = ADC_WORKMODE_INDEPENDENT; // Independent mode
404- ADC_InitStructure.MultiChEn = 1 ; // Multi-channel enable
405- ADC_InitStructure.ContinueConvEn = 1 ; // Continuous enable
410+ ADC_InitStructure.MultiChEn = TERN (HAS_N32_CR10, 0 , 1 ); // Multi-channel enable
411+ ADC_InitStructure.ContinueConvEn = TERN (HAS_N32_CR10, 0 , 1 ); // Continuous enable
406412 ADC_InitStructure.ExtTrigSelect = ADC_EXT_TRIGCONV_NONE; // Non-trigger
407413 ADC_InitStructure.DatAlign = ADC_DAT_ALIGN_R; // Right alignment
408- ADC_InitStructure.ChsNumber = 2 ; // Scan channel number
414+ ADC_InitStructure.ChsNumber = TERN (HAS_N32_CR10, 1 , 2 ); // Scan channel number
409415 ADC_Init (NS_ADCx, &ADC_InitStructure);
410416
411- /* ADC regular channel14 configuration */
412- ADC_ConfigRegularChannel (NS_ADCx, ADC2_Channel_05_PC4, 2 , ADC_SAMP_TIME_55CYCLES5);
413- ADC_ConfigRegularChannel (NS_ADCx, ADC2_Channel_12_PC5, 1 , ADC_SAMP_TIME_55CYCLES5);
417+ #if !HAS_N32_CR10
418+ /* ADC regular channel14 configuration */
419+ ADC_ConfigRegularChannel (NS_ADCx, ADC2_Channel_05_PC4, 2 , ADC_SAMP_TIME_55CYCLES5);
420+ ADC_ConfigRegularChannel (NS_ADCx, ADC2_Channel_12_PC5, 1 , ADC_SAMP_TIME_55CYCLES5);
414421
415- /* * 使能ADC DMA */
416- ADC_EnableDMA (NS_ADCx, 1 );
422+ /* * 使能ADC DMA */
423+ ADC_EnableDMA (NS_ADCx, 1 );
424+ #endif
417425
418426 /* Enable ADC */
419427 ADC_Enable (NS_ADCx, 1 );
@@ -424,21 +432,28 @@ void ADC_Initial(ADC_Module* NS_ADCx) {
424432 while (ADC_GetCalibrationStatus (NS_ADCx));
425433
426434 /* Start ADC Software Conversion */
427- ADC_EnableSoftwareStartConv (NS_ADCx, 1 );
435+ IF_DISABLED (HAS_N32_CR10, ADC_EnableSoftwareStartConv (NS_ADCx, 1 ) );
428436}
429437
430438/* *================================================================
431439 * Single independent sampling
432440 ================================================================*/
433441uint16_t ADC_GetData (ADC_Module* NS_ADCx, uint8_t ADC_Channel) {
434442 uint16_t dat;
443+ TERN_ (HAS_N32_CR10, uint8_t timeOut);
435444
436445 /* * Set channel parameters */
437- ADC_ConfigRegularChannel (NS_ADCx, ADC_Channel, 1 , ADC_SAMP_TIME_239CYCLES5);
446+ ADC_ConfigRegularChannel (NS_ADCx, ADC_Channel, 1 , TERN (HAS_N32_CR10, ADC_SAMP_TIME_71CYCLES5, ADC_SAMP_TIME_239CYCLES5));
447+
448+ #if HAS_N32_CR10
449+ ADC_ClearFlag (NS_ADCx, ADC_FLAG_ENDC);
450+ ADC_ClearFlag (NS_ADCx, ADC_FLAG_STR);
451+ #endif
438452
439453 /* Start ADC Software Conversion */
454+ TERN_ (HAS_N32_CR10, timeOut = 0xFF );
440455 ADC_EnableSoftwareStartConv (NS_ADCx, 1 );
441- while (ADC_GetFlagStatus (NS_ADCx, ADC_FLAG_ENDC) == 0 );
456+ while (( ADC_GetFlagStatus (NS_ADCx, ADC_FLAG_ENDC) == 0 ) TERN_ (HAS_N32_CR10, && (timeOut--)) );
442457
443458 ADC_ClearFlag (NS_ADCx, ADC_FLAG_ENDC);
444459 ADC_ClearFlag (NS_ADCx, ADC_FLAG_STR);
@@ -630,8 +645,8 @@ void MarlinHAL::adc_init() {
630645 // NS_GPIOC_PL_CFG = reg_temp; // PC4/5 analog input
631646
632647 enable_adc_clk (1 ); // Make ADC clock
633- ADC_DMA_init (); // DMA initialization
634- ADC_Initial (NS_ADC2 ); // ADC initialization
648+ IF_DISABLED (HAS_N32_CR10, ADC_DMA_init ()); // DMA initialization
649+ ADC_Initial (USE_ADC ); // ADC initialization
635650
636651 delay (2 );
637652 // NS_PINRT("get adc1 = ", adc_results[0], "\r\n");
0 commit comments