/******************************************** 飞控主函数入口 功能: 1.初始化各个硬件 2.初始化系统参数 3.开定时器4等待数据中断到来 4.开定时器3串口广播实时姿态以及相关信息 ********************************************/ int main(void) { //int i; SystemClock_HSE(9); //系统时钟初始化,时钟源外部晶振HSE //SystemClock_HSI(4); //系统时钟初始化,时钟源内部HSI UART1_init(SysClock,115200); //串口1初始化 NVIC_INIT(); //中断初始化 STMFLASH_Unlock(); //内部flash解锁 LedInit(); //IO初始化 delay_init(SysClock); //滴答延时初始化 BT_PowerInit(); //蓝牙电源初始化完成,默认关闭 MotorInit(); //马达初始化 BatteryCheckInit(); //电池电压监测初始化 IIC_Init(); //IIC初始化 MPU6050_DMP_Initialize(); //初始化DMP引擎 //HMC5883L_SetUp(); //初始化磁力计HMC5883L PID_INIT(); //PID参数初始化 ParameterRead(); //Flash参数读取 NRF24L01_INIT(); //NRF24L01初始化 SetRX_Mode(); //设无线模块为接收模式 PowerOn(); //开机等待 BT_on(); //蓝牙开 TIM3_Init(SysClock,10); //定时器3初始化,调试串口输出 TIM4_Init(SysClock,50); //定时器4初始化,定时采样传感器数据,更新PID输出 while (1); //等待数据更新中断到来 }
/*! @brief Program entry point */ int main (void) { Mode currentMode; mainThread_ID = osThreadGetId(); // start threads. Low priority ensures main will finish osThreadDef (tM_run, osPriorityBelowNormal, 1, 0); tempThread_ID = osThreadCreate( osThread (tM_run), NULL); osThreadDef (aM_run, osPriorityBelowNormal, 1, 0); accThread_ID = osThreadCreate( osThread (aM_run), NULL); LED_init(); buttonInit(); tM_init(); aM_init(); // lock both mode semaphores, they are both in "used" mode osSemaphoreWait( tempSema, osWaitForever); osSemaphoreWait( accSema, osWaitForever); // start in TEMP_MODE currentMode = TEMP_MODE; osSemaphoreRelease( tempSema); TIM3_Init(ACC_FREQ); while(1) { //will start and wait for a tap before anything happends //it will run the threads though osSignalWait(0x1, osWaitForever); // once we're past here, it means a tap has been detected! switch( currentMode) { case TEMP_MODE: // we wait until the semaphore becomes available osSemaphoreWait( tempSema, osWaitForever); osDelay (500); acc_clearLatch(); osSemaphoreRelease(accSema); currentMode = ACC_MODE; break; case ACC_MODE: osSemaphoreWait( accSema, osWaitForever); osDelay (500); acc_clearLatch(); osSemaphoreRelease(tempSema); currentMode = TEMP_MODE; break; } } }
/******************************************** 飞控主函数入口 功能: 1.初始化各个硬件 2.初始化系统参数 3.开定时器4等待数据中断到来 4.开定时器3串口广播实时姿态以及相关信息 ********************************************/ int main(void) { SystemClock(9); //系统时钟初始化 UART1_init(SysClock,115200); //串口1初始化 NVIC_INIT(); //中断初始化 STMFLASH_Unlock(); //内部flash解锁 LedInit(); //IO初始化 delay_init(SysClock); //滴答延时初始化 BT_PowerInit(); //蓝牙电源初始化完成,默认关闭 MotorInit(); //马达初始化 BatteryCheckInit(); //电池电压监测初始化 IIC_Init(); //IIC初始化 MPU6050_DMP_Initialize(); //初始化DMP引擎 PID_INIT(); //PID参数初始化 ParameterRead(); //Flash参数读取 NRF24L01_INIT(); //NRF24L01初始化 SetRX_Mode(); //设无线模块为接收模式 PowerOn(); //开机等待 BT_on(); //蓝牙开 TIM3_Init(36,2000); //定时器3初始化,调试串口输出 TIM4_Init(36,1000); //定时器4初始化,定时采样传感器数据,更新PID输出 while (1) //等待数据更新中断到来 { // switch(UART1_Get_Char())//检测串口发送数据,做相应处理 // { // case 'w': // LedA_on;LedB_on;LedC_on;LedD_on; // //TxBuf[0]++; // //UART1_Put_Package(TxBuf); // LedA_on;LedB_on;LedC_on;LedD_on; // MotoPWM+=10; // UART1_Put_Char(0x5a); // break; // case 's': // LedA_off;LedB_off;LedC_off;LedD_off; // UART1_Put_Char(0xaa); // MotoPWM-=10; // break; // default :break; // } // MotorPwmFlash(MotoPWM,MotoPWM,MotoPWM,MotoPWM); // } }
void IAC_Init(void) { delay_init(72); //延时函数初始化 Nvic_Init(); //中断初始化 LED_Init(); //led初始化 KEY_Init(); //按键初始化 OLED_Init(); //oled初始化 //Draw_LibLogo(); //logo paramLoad(); //pid参数初始化 State_Display();//OLED数据显示 Moto_Init(); //电机初始化//200hz usart1_init(72,115200); //串口1初始化 摄像头 usart2_Init(36,9600); //ks103数据 9600 usart3_config(460800); //串口3初始化 上位机 TIM3_Init(2500); //定时器初始化 2.5MS }
void IAC_Init(void) { delay_init(72); MCO_INIT(); Nvic_Init(); LED_GPIO_Config(); I2C_INIT(); delay(0XFFF); TIM3_Init(2500); usart1_config(); ADC1_Init(); NRF24L01_Init(); Moto_Init(); LED_SHOW(); FLASH_Unlock(); EE_Init(); }
int main(){ usart2_init(); delay_init(); MPU6050_I2C_Init(); MPU6050_Initialize(); MPU6050_Exti_Config(); TIM3_Init(72,10000); printf("start\n"); while(1) { } return 0; }
int main(void) { // u8 a[] = {0xAA, 0xAA, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88,0x99,0xa0,0x04,0x10,0x08,0x01,0x08,0x99}; u8 a[] = {0x11, 0x22, 0x33,0x44, 0x55, 0x66, 0x77}; RobotRate rate; WheelSpeed wheelspeed; SystemInit(); USART1_Init(115200); USART2_Init(115200); USART3_Init(38400); UART4_Init(115200); CAN1_Init(); LED_Init(); // TIM2_Init(); TIM3_Init(); SysTick_Init(); Motor_init(); amp_init(); mag_sensor_init(); flash_init(); DelayMs(1000); //Time for Motor Driver Board to init //set_all_speedctl(); t3 = micros(); //*************************initial sensor***************************************************************// while(t < 0x15) { if(UART4RecvPtrR != UART4RecvPtrW) { op = AHRSCheckDataFrame(); if(op == ACC_METER || op == GYRO || op == ANGLE_OUTPUT || op == MAG_METER ) { SensorInitial(op); t++; } } t4 = micros(); time_taken = t4 - t3; if(time_taken > 3000000) { //break; } } sch_init(); sch_add_task(sensors, 6, 20); sch_add_task(AHRS_compute, 1, 50); // sch_add_task(led_task, 4, 100); sch_add_task(UART2Proc, 10, 20); // sch_add_task(UART3Proc, 3, 20); // sch_add_task(UART3Proc, 4, 20); // sch_add_task(FRIDCheck, 2, 20); sch_start(); while (1) { sch_dispatch_tasks(); //Welcome(); } }
/* * 函数名:USART2_Init() * 输入:uint32_t bound:要设置的波特率 * 输出:void * 功能:对USART2进行初始化设置 */ void USART2_Init(uint32_t bound) { NVIC_InitTypeDef NVIC_InitStructure; GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; //开启外设时钟 RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA,ENABLE); RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE); //UART2_RX端口配置 GPIO_InitStructure.GPIO_Pin = UART2_RX_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; //复用功能 GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽输出 因为复用的时候端口方向由内部控制,所以这里设置成输出相当于浮空输入 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_40MHz; //40MHz GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; //上拉 GPIO_Init(UART2_RX_PORT,&GPIO_InitStructure); //UART2_TX端口配置 GPIO_InitStructure.GPIO_Pin = UART2_TX_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; //复用功能 GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_40MHz; //40MHz GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; //上拉 GPIO_Init(UART2_TX_PORT,&GPIO_InitStructure); //开启串口2对应引脚的复用映射 GPIO_PinAFConfig(UART2_TX_PORT,UART2_TX_AF_PINSOURCE,GPIO_AF_USART2); //GPIOA2复用为USART2--TX GPIO_PinAFConfig(UART2_RX_PORT,UART2_RX_AF_PINSOURCE,GPIO_AF_USART2); //GPIOA3复用为USART2--RX //UART2初始化 USART_InitStructure.USART_BaudRate = bound; //波特率一般设置为bound USART_InitStructure.USART_WordLength = USART_WordLength_8b; //字长为8位数据格式 USART_InitStructure.USART_StopBits = USART_StopBits_1; //一个停止位 USART_InitStructure.USART_Parity = USART_Parity_No; //无奇偶校验位 USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; //无硬件控制流 USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; //收发模式 USART_Init(USART2, &USART_InitStructure); //初始化串口2 //DMA波特率设置 USART_DMACmd(USART2,USART_DMAReq_Tx,ENABLE); //使能串口2的DMA发送 //DMA配置 DMA1通道7,外设为串口2,存储器为USART2_TX_BUF //DMA各通道表参考STM32参考手册的DMA中断表 UART2_DMA_Config(DMA1_Channel7,(uint32_t)&USART2->DR,(uint32_t)USART2_TX_BUF); USART_Cmd(USART2,ENABLE); //使能USART2串口 //接收配置 USART_ITConfig(USART2,USART_IT_RXNE,ENABLE); //开启接收中断 //USART2中断配置 NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn; //串口2中断通道 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2; //抢断优先级2 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //子优先级3 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道使能 NVIC_Init(&NVIC_InitStructure); //根据指定的参数初始化VIC寄存器 //TIM3初始化 TIM3_Init(99,3199); //10ms中断 T = 100 * 1/(3200/32000000)= 10ms USART2_RX_STA = 0; //数据获取标志位清0 TIM3_Set(0); //关闭定时器3 }
void Encoder_Init(void){ TIM3_Init(); TIM2_Init(); EXTI4_Encoder_Init(); }
int main(void) { static char ledsta; /***********************************/ SystemClock_HSI(9); //系统时钟初始化,时钟源内部HSI cycleCounterInit(); // Init cycle counter SysTick_Config(SystemCoreClock / 1000); //SysTick开启系统tick定时器并初始化其中断,1ms UART1_init(SysClock,uart1baudSet); //串口1初始化 NVIC_INIT(); //中断初始化 STMFLASH_Unlock(); //内部flash解锁 LoadParamsFromEEPROM(); //加载系统参数配置表 LedInit(); //IO初始化 Adc_Init(); //摇杆AD初始化 KeyInit(); //按键初始化 NRF24L01_INIT(); //NRF24L01初始化 SetTX_Mode(); //设无线模块为接收模式 controlClibra(); //遥控摇杆校准 #ifdef UART_DEBUG TIM3_Init(SysClock,2000); //定时器初始化,1s为周期打印摇杆值 #endif TIM4_Init(SysClock,TIME4_Preiod); //定时器4初始化,定时时间单位:(TIME4_Preiod)微秒 LedSet(led2,1); LedSet(led3,1); LoadRCdata(); //摇杆赋值 //RockerUnlockcrazepony(); //摆杆启动 Lockflag = 0; //解锁标志,1表示产生了一次按键操作,0表示该按键操作已经发送到飞控 LedSet(led2,0); LedSet(led3,0); while (1) { //10Hz loop if(flag10Hz == 1) //10Hz { flag10Hz = 0; /*status led*/ ledsta = !ledsta; LedSet(signalLED,ledsta); /*crazepony Lock*/ KeyLockcrazepony(); /*IMUcalibrate */ IMUcalibrate(); /*remote calibrate*/ Remotecalibrate(); } //50Hz loop if(flag50Hz == 1) { LoadRCdata(); flag50Hz = 0; } // 80Hz 12.5ms if(flag80Hz) { flag80Hz = 0; CommUAVUpload(MSP_SET_4CON); } } }
/* *berif: Initialize the encoding module *param: None *reval: None */ void Init_Encoder(void) { TIM2_Init(); //Timer TIM3_Init(); //Counter(R) TIM4_Init(); //Counter(L) }