/** * @brief Main program. * @param None * @retval None */ int main(void) { /*Initialize ARM BSP (LED) */ bsp_InitLed(); /* SERIAL_DEBUG */ #ifdef SERIAL_DEBUG_ON DebugComPort_Init(); #endif /* SERIAL_DEBUG */ // xTaskCreate(pvTaskCode, /*指向任务的实现函数的指针(效果上仅仅是函数名)*/ // pcName, /*具有描述性的任务名。这个参数不会被FreeRTOS使用*/ // usStackDepth, /*栈空间大小,单位是字*/ // pvParameters, /*任务函数接受一个指向void的指针(void*)*/ // uxPriority, /*指定任务执行的优先级,0到最高优先级(configMAX_PRIORITIES–1)*/ // pxCreatedTask /*用于传出任务的句柄,不用则NULL代替。*/) /* Start toogleLed4 task : Toggle LED4 every 1s */ // xTaskCreate(ToggleLed1, "LED1", configMINIMAL_STACK_SIZE, NULL, LED_TASK_PRIO, NULL); /* Start The CANOpen Communication */ canopen_init(); /* Start The Lifter Control */ start_chassis_control(); start_sensor(); /* Start scheduler */ vTaskStartScheduler(); /* NEVER GET HERE as control is now taken by the SCHEDULER */ while(1){} }
/* ********************************************************************************************************* * 函 数 名: BSP_Init * 功能说明: 初始化CPU时钟、按键和LED灯GPIO、设置systick中断。这个函数由应用程序调用。 * 形 参:无 * 返 回 值: 无 ********************************************************************************************************* */ void BSP_Init (void) { bsp_InitLed(); /* 初始化LED的GPIO */ bsp_InitLCD(); bsp_InitTouch(); SysTick_Config(BSP_CPU_ClkFreq() / OS_TICKS_PER_SEC); }
/* ********************************************************************************************************* * 函 数 名: bsp_Init * 功能说明: 初始化所有的硬件设备。该函数配置CPU寄存器和外设的寄存器并初始化一些全局变量。只需要调用一次 * 形 参:无 * 返 回 值: 无 ********************************************************************************************************* */ void bsp_Init(void) { /* 由于ST固件库的启动文件已经执行了CPU系统时钟的初始化,所以不必再次重复配置系统时钟。 启动文件配置了CPU主时钟频率、内部Flash访问速度和可选的外部SRAM FSMC初始化。 系统时钟缺省配置为168MHz,如果需要更改,可以修改 system_stm32f4xx.c 文件 */ bsp_InitUart(); /* 初始化串口 */ bsp_InitKey(); /* 初始化按键变量(必须在 bsp_InitTimer() 之前调用) */ bsp_InitTimer(); /* 初始化系统滴答定时器 */ /* 针对不同的应用程序,添加需要的底层驱动模块初始化函数 */ bsp_InitI2C(); bsp_InitLed(); /* 初始LED指示灯端口 */ }
/* ********************************************************************************************************* * 函 数 名: bsp_Init * 功能说明: 初始化硬件设备 * 形 参:无 * 返 回 值: 无 ********************************************************************************************************* */ void BSP_Init(void) { // FATFS fs; /* Enable CRC clock */ RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_CRC, ENABLE); NVIC_Configuration(); /* 中断优先级分组配置 */ bsp_InitNVIC(); bsp_InitUart(); /* 初始化串口 */ bsp_InitLed(); /* 初始LED指示灯端口 */ bsp_InitRTC(); /* 初始化RTC */ // bsp_InitKey(); /* 按键初始化 */ // f_mount(0,&fs); #ifdef TRACE_EN /* See project / compiler preprocessor options. */ BSP_CPU_REG_DBGMCU_CR |= BSP_DBGMCU_CR_TRACE_IOEN_MASK; /* Enable tracing (see Note #2). */ BSP_CPU_REG_DBGMCU_CR &= ~BSP_DBGMCU_CR_TRACE_MODE_MASK; /* Clr trace mode sel bits. */ BSP_CPU_REG_DBGMCU_CR |= BSP_DBGMCU_CR_TRACE_MODE_SYNC_04; /* Cfg trace mode to synch 4-bit. */ #endif }
void led_thread(void *inContext) { led_log_trace(); nearair_Context_t *airContext = inContext; char mode_old; char airclass_old; bsp_InitLed(); mode_old = airContext->deviceStatus.mode; airclass_old = airContext->airStatus.airclass; mico_init_timer(&_led_init_timer, 500,led_init_handle, inContext); mico_init_timer(&_led_sleep_timer,20, led_sleep_handle,inContext); while(1) { if(mode_old != airContext->deviceStatus.mode) { if(mode_old == MODE_INIT) mico_stop_timer(&_led_init_timer); if(mode_old == MODE_SLEEP) mico_stop_timer(&_led_sleep_timer); mode_old = airContext->deviceStatus.mode; switch(mode_old) { case MODE_CLOSE: set_led_color(0,0,0); break; case MODE_INIT: mico_start_timer(&_led_init_timer); break; case MODE_SMART: switch( airContext->airStatus.airclass ) { case AQ_GOOD: set_led_color(0,0,99); break; case AQ_SOSO: set_led_color(99,33,0); break; case AQ_BAD: set_led_color(99,0,0); break; default: break; } break; case MODE_SLEEP: mico_start_timer(&_led_sleep_timer); break; case MODE_FLY: set_led_color(0,99,0); break; default: break; } } if(mode_old == MODE_SMART) { if(airclass_old != airContext->airStatus.airclass) { airclass_old = airContext->airStatus.airclass; switch( airclass_old ) { case AQ_GOOD: set_led_color(0,0,99); break; case AQ_SOSO: set_led_color(99,33,0); break; case AQ_BAD: set_led_color(99,0,0); break; default: break; } } } if(airContext->setStatus.led_enable) { set_led_color(airContext->setStatus.led_r,airContext->setStatus.led_g,\ airContext->setStatus.led_b); } } }