bool BoardSupportPackage::init() { bool result = false; SysTick_Config(SystemCoreClock/BSP_TICKS_PER_SECOND); initRCC(); initGPIO_Power(); initGPIO_Fan(); init_DHT11(); init_SPI(); init_TIM(); init_PWM(); screenInit(); result = true; return result; }
void initClock(u8 PLL)//PLL:2-16 { uc tmp = 0; initRCC(); RCC -> CR |= 1 << 16; //外部高速时钟使能HSEON while(!(RCC -> CR >> 17)); //等待外部时钟就绪 RCC -> CFGR = 0x00000400; //0X00002000; //APB1=DIV2;APB2=DIV1;AHB=DIV1; PLL -= 2; //抵消2个单位 RCC -> CFGR |= PLL << 18; //设置PLL值 2~16 RCC -> CFGR |= 1 << 16; //PLLSRC ON //FLASH -> ACR |= 0x32; //FLASH 2个延时周期 RCC -> CR |= 0x01000000; //PLLON while(!(RCC -> CR >> 25)); //等待PLL锁定 RCC -> CFGR |= 0x00000002; //PLL作为系统时钟 while(tmp != 0x02) //等待PLL作为系统时钟设置成功 { tmp = RCC -> CFGR >> 2; tmp &= 0x03; //tmp读取SWS值(系统时钟切换状态) } }
int main(){ u8 res; initRCC(); initGPIO(); initTIM2(); initUSART3(); initI2C1(); __enable_irq(); // глобальное включение прерывания // I2C1_tx(0xD0,0x6B,0x00); // I2C1_tx(0xD0,0x1B,0xE0); // I2C1_tx(0xD0,0x1C,0xE0); read_I2C1(GY521_ADRESS,WHO_I_AM); // read_data_acc(); green_on(); while(1){ while(!number_of_tasks) {} (*buffer_of_tasks[head_of_tasks])(); deleteTask(); } return 0; }