123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244 |
- #include "board.h"
- static volatile uint32_t TDelay;
- static void GPIO_Init(void);
- static void ADC_Init(void);
- static void TIM1_Init(void);
- static void TIM3_Init(void);
- static void IWDG_Init(void);
- void Board_Init(void)
- {
-
- RCC->APBENR1 = (RCC_APBENR1_PWREN | RCC_APBENR1_TIM3EN);
- RCC->APBENR2 = (RCC_APBENR2_SYSCFGEN | RCC_APBENR2_ADCEN | RCC_APBENR2_TIM1EN);
-
- RCC->IOPENR = (RCC_IOPENR_GPIOAEN | RCC_IOPENR_GPIOBEN);
-
-
- NVIC_SetPriority(RCC_IRQn, 0);
- NVIC_EnableIRQ(RCC_IRQn);
-
- SystemClock_Config();
-
- SysTick->LOAD = (uint32_t)(SystemCoreClock/1000 - 1UL);
- NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL);
- SysTick->VAL = 0UL;
- SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk |
- SysTick_CTRL_TICKINT_Msk |
- SysTick_CTRL_ENABLE_Msk;
-
- SCB->SCR &= ~((uint32_t)SCB_SCR_SLEEPDEEP_Msk);
-
- SCB->SCR &= ~((uint32_t)SCB_SCR_SLEEPONEXIT_Msk);
-
- GPIO_Init();
- ADC_Init();
- TIM1_Init();
- TIM3_Init();
- IWDG_Init();
- }
- void SystemClock_Config(void)
- {
-
- RCC->CR |= RCC_CR_HSION;
- while((RCC->CR & RCC_CR_HSIRDY) == 0);
-
- RCC->PLLCFGR = (RCC_PLLCFGR_PLLSRC_HSI | RCC_PLLCFGR_PLLM_0 | (9 << RCC_PLLCFGR_PLLN_Pos) | RCC_PLLCFGR_PLLR_1);
- RCC->PLLCFGR |= RCC_PLLCFGR_PLLREN;
- RCC->CR |= RCC_CR_PLLON;
- while((RCC->CR & RCC_CR_PLLRDY) == 0);
-
- RCC->CFGR &= RCC_CFGR_SW;
- RCC->CFGR |= RCC_CFGR_SW_1;
- while((RCC->CFGR & RCC_CFGR_SWS) != RCC_CFGR_SWS_1);
-
- SystemCoreClock = 24000000;
- }
- static void GPIO_Init(void)
- {
-
- GPIO_SetPinMode(Servo_1_Port, (Servo_1_Pin|Servo_2_Pin), GPIO_MODE_AFF);
- GPIO_SetPinOutputType(Servo_1_Port, (Servo_1_Pin|Servo_2_Pin), GPIO_OTYPE_PP);
- GPIO_SetPinSpeed(Servo_1_Port, (Servo_1_Pin|Servo_2_Pin), GPIO_OSPEED_LW);
- GPIO_SetPinPull(Servo_1_Port, (Servo_1_Pin|Servo_2_Pin), GPIO_PUPDR_NO);
- GPIO_SetAFPin_0_7(Servo_1_Port, (Servo_1_Pin|Servo_2_Pin), GPIO_AF_2);
-
- GPIO_SetPinPull(Photo_Port, Photo_Pin, GPIO_PUPDR_NO);
- GPIO_SetPinMode(Photo_Port, Photo_Pin, GPIO_MODE_ANL);
-
- GPIO_SetPinMode(GPIOA, GPIO_PIN_4, GPIO_MODE_OUT);
- GPIO_SetPinOutputType(GPIOA, GPIO_PIN_4, GPIO_OTYPE_PP);
- GPIO_SetPinSpeed(GPIOA, GPIO_PIN_4, GPIO_OSPEED_LW);
- GPIO_SetPinPull(GPIOA, GPIO_PIN_4, GPIO_PUPDR_NO);
-
- GPIO_SetPinPull(GPIOA, GPIO_PIN_4, GPIO_PUPDR_UP);
- }
- static void ADC_Init(void)
- {
-
- NVIC_SetPriority(ADC1_IRQn, 0);
- NVIC_EnableIRQ(ADC1_IRQn);
-
-
- ADC1->CFGR2 |= ADC_CFGR2_CKMODE_0;
-
- while ((ADC1->ISR & ADC_ISR_CCRDY) == 0) {};
-
- ADC1->ISR |= ADC_ISR_CCRDY;
- ADC1->CFGR1 |= (ADC_CFGR1_EXTSEL_1 | ADC_CFGR1_EXTSEL_0 | ADC_CFGR1_EXTEN_0) | ADC_CFGR1_OVRMOD | ADC_CFGR1_EXTEN_0;
-
- ADC1->CR |= ADC_CR_ADVREGEN;
-
- ADC1->CHSELR = ADC_CHSELR_CHSEL11;
-
- while ((ADC1->ISR & ADC_ISR_CCRDY) == 0) {};
-
- ADC1->ISR |= ADC_ISR_CCRDY;
-
- ADC1->SMPR |= ADC_SMPR_SMPSEL11;
-
- ADC1->CR |= ADC_CR_ADCAL;
- while ((ADC1->CR & ADC_CR_ADCAL) != 0) {};
-
- ADC1->IER |= ADC_IER_EOCIE;
-
- ADC1->CR |= ADC_CR_ADEN;
-
- ADC1->CR |= ADC_CR_ADSTART;
- }
- static void TIM1_Init(void)
- {
-
- TIM1->PSC = TIM1_PSC;
- TIM1->ARR = TIM1_ARR;
- TIM1->CR1 = TIM_CR1_ARPE;
-
- TIM1->CCR1 = SERVO_INIT_VAL;
- TIM1->CCR4 = SERVO_INIT_VAL;
-
- TIM1->CCMR1 = (TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC1PE);
- TIM1->CCMR2 = (TIM_CCMR2_OC4M_1 | TIM_CCMR2_OC4M_2 | TIM_CCMR2_OC4PE);
-
- TIM1->BDTR = TIM_BDTR_MOE;
- TIM1->EGR = TIM_EGR_UG;
-
- TIM1->CCER = (TIM_CCER_CC1E | TIM_CCER_CC1P | TIM_CCER_CC4E | TIM_CCER_CC4P);
-
- TIM1->CR1 |= TIM_CR1_CEN;
- }
- static void TIM3_Init(void)
- {
-
- TIM3->PSC = TIM3_PSC;
- TIM3->ARR = TIM3_ARR;
- TIM3->CR1 = TIM_CR1_ARPE;
-
- TIM3->EGR = TIM_EGR_UG;
-
- TIM3->CR2 |= TIM_CR2_MMS2_2;
-
- TIM3->CR1 |= TIM_CR1_CEN;
- }
- static void IWDG_Init(void)
- {
- IWDG->KR = 0xCCCC;
- IWDG->KR = 0x5555;
- IWDG->PR = 0x0;
- IWDG->RLR = 4095;
- while (IWDG->SR != 0x00000000) {};
- IWDG->KR = 0xAAAA;
- }
- void delay_ms(uint32_t msek) {
- TDelay = msek;
- do {
- __WFI();
- } while (TDelay != 0);
- }
- #pragma GCC optimize ("O3")
- void SysTick_Handler(void) {
- if (TDelay != 0) {
- TDelay --;
- }
- }
|