12 #define HSI_VALUE ((uint32_t)16000000)
19 const uint8_t
AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9};
35 #if (__FPU_PRESENT == 1) && (__FPU_USED == 1)
36 SCB->CPACR |= ((3UL << 10 * 2) | (3UL << 11 * 2));
39 #if defined(DATA_IN_ExtSRAM) || defined(DATA_IN_ExtSDRAM)
40 SystemInit_ExtMemCtl();
44 #if defined(USER_VECT_TAB_ADDRESS)
45 SCB->VTOR = VECT_TAB_BASE_ADDRESS | VECT_TAB_OFFSET;
61 PWR->CR &= ~PWR_CR_VOS;
66 RCC->CR &= ~RCC_CR_HSITRIM;
76 FLASH->ACR = FLASH_ACR_LATENCY_2WS;
79 RCC->CFGR &= ~RCC_CFGR_SW;
80 RCC->CFGR |= (RCC_CFGR_SW & (RCC_CFGR_SW_HSI << RCC_CFGR_SW_Pos));
94 FLASH->ACR |= FLASH_ACR_ICEN;
97 FLASH->ACR |= FLASH_ACR_DCEN;
100 FLASH->ACR |= FLASH_ACR_PRFTEN;
107 NVIC_SetPriority(SysTick_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(), 0U, 0U));
111 RCC->APB2ENR |= RCC_APB2ENR_SYSCFGEN;
114 RCC->APB1ENR |= RCC_APB1ENR_PWREN;
146 uint32_t until = *p_t + ms;
162 RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN;
164 else if (p_port == GPIOB)
166 RCC->AHB1ENR |= RCC_AHB1ENR_GPIOBEN;
168 else if (p_port == GPIOC)
170 RCC->AHB1ENR |= RCC_AHB1ENR_GPIOCEN;
174 p_port->MODER &= ~(GPIO_MODER_MODER0 << (pin * 2U));
175 p_port->MODER |= (mode << (pin * 2U));
177 p_port->PUPDR &= ~(GPIO_PUPDR_PUPD0 << (pin * 2U));
178 p_port->PUPDR |= (pupd << (pin * 2U));
183 uint32_t port_selector = 0;
185 RCC->APB2ENR |= RCC_APB2ENR_SYSCFGEN;
192 else if (p_port == GPIOB)
196 else if (p_port == GPIOC)
201 uint32_t base_mask = 0x0FU;
202 uint32_t displacement = (pin % 4) * 4;
204 SYSCFG->EXTICR[pin / 4] &= ~(base_mask << displacement);
205 SYSCFG->EXTICR[pin / 4] |= (port_selector << displacement);
240 NVIC_SetPriority(
GET_PIN_IRQN(pin), NVIC_EncodePriority(NVIC_GetPriorityGrouping(), priority, subpriority));
251 uint32_t base_mask = 0x0FU;
252 uint32_t displacement = (pin % 8) * 4;
254 p_port->AFR[(uint8_t)(pin / 8)] &= ~(base_mask << displacement);
255 p_port->AFR[(uint8_t)(pin / 8)] |= (alternate << displacement);
266 RCC->APB2ENR |= RCC_APB2ENR_ADC1EN;
268 else if (p_adc == ADC2)
270 RCC->APB2ENR |= RCC_APB2ENR_ADC2EN;
272 else if (p_adc == ADC3)
274 RCC->APB2ENR |= RCC_APB2ENR_ADC3EN;
281 RCC->APB2RSTR |= RCC_APB2RSTR_ADCRST;
287 RCC->APB2RSTR &= ~RCC_APB2RSTR_ADCRST;
289 #if defined(USE_ADC_TEMP_VREFINT)
291 ADC123_COMMON->CCR |= ADC_CCR_TSVREFE;
296 ADC123_COMMON->CCR &= ~ADC_CCR_ADCPRE;
299 ADC123_COMMON->CCR &= ~ADC_CCR_DMA;
302 ADC123_COMMON->CCR &= ~ADC_CCR_DELAY;
305 ADC123_COMMON->CCR &= ~ADC_CCR_MULTI;
311 p_adc->CR2 &= ~ADC_CR2_ADON;
314 p_adc->CR2 &= ~ADC_CR2_CONT;
317 p_adc->CR2 &= ~ADC_CR2_DMA;
320 p_adc->CR2 |= ADC_CR2_EOCS;
323 p_adc->CR2 &= ~ADC_CR2_ALIGN;
330 p_adc->CR1 |= (cr_mode & ADC_CR1_EOCIE_Msk);
333 p_adc->CR1 |= (cr_mode & ADC_CR1_RES_Msk);
340 p_adc->SMPR2 &= ~(ADC_SMPR2_SMP0 << (channel * 3));
344 p_adc->SMPR1 &= ~(ADC_SMPR1_SMP10 << ((channel - 10) * 3));
348 p_adc->SQR1 &= ~ADC_SQR1_L;
353 NVIC_SetPriority(ADC_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(), priority, subpriority));
354 NVIC_EnableIRQ(ADC_IRQn);
360 p_adc->CR2 |= ADC_CR2_ADON;
363 uint32_t delay = 10000;
371 p_adc->CR2 &= ~ADC_CR2_ADON;
380 p_adc->SQR3 = channel;
386 p_adc->CR2 |= ADC_CR2_SWSTART;