/****************** ******* 函数名称: KEY_IN() ******* 函数功能: 电梯按键检测函数 ******* 返回值 : INT8U 0 1 2 ******************/ INT8U KEY_IN(void) { if(Key0 == 0) { Delay_nms(2); if(Key0 == 0){ LED0 = 1; send_string_uart("按下0层按键\r\n"); return 0; } } else if(Key1 == 0) { Delay_nms(2); if(Key1 == 0){ LED1 = 1; send_string_uart("按下1层按键\r\n"); return 1; } } else if(Key2 == 0) { Delay_nms(2); if(Key2 == 0){ LED2 = 1; send_string_uart("按下2层按键\r\n"); return 2; } } return 3; }
int main(void) { initx(); xTimerHandle timer = xTimerCreate((const signed char *) "timer", 1000 / portTICK_RATE_MS, pdTRUE, NULL, toggleLedCallback); send_string_uart("timer created\n"); queue = xQueueCreate(20, 1); xTaskCreate(acceleration_task, (signed char*)"acceleration_task", 128, NULL, tskIDLE_PRIORITY+1, NULL); send_string_uart("queue created\n"); xTimerStart(timer, 0); send_string_uart("timer started\n"); send_string_uart("INIT DONE, Starting\n"); vTaskStartScheduler(); return 0; }
void toggleLedCallback(xTimerHandle xTimer) { static char buffer[2048]; STM_EVAL_LEDToggle(LED5); vTaskGetRunTimeStats(buffer); send_string_uart(buffer); }
/****************** ******* 函数名称: Key_INIT() ******* 函数功能: 电梯上升检测函数 ******* 返回值 : NULL ******************/ void Key_INIT() { if(Key0_UP == 0) { Delay_nms(2); if(Key0_UP == 0){ LED0_UP = 1; UP_Flag = 0; send_string_uart("按下0层上键\r\n"); } } if(Key1_UP == 0) { Delay_nms(2); if(Key1_UP == 0){ LED1_UP = 1; UP_Flag = 1; send_string_uart("按下1层上键\r\n"); } } if(Key1_DOWN == 0) { Delay_nms(2); if(Key1_DOWN == 0){ LED1_DOWN = 1; Down_Flag = 1; send_string_uart("按下1层下键\r\n"); } } if(Key2_DOWN == 0) { Delay_nms(2); if(Key2_DOWN == 0){ LED2_DOWN = 1; Down_Flag = 2; send_string_uart("按下2层下键\r\n"); } } }
void main() { DOOR_INIT(); Usart_Init(); send_string_uart("ϵͳÒÑÆô¶¯£¡\r\n"); while(1) { Key_INIT(); Floor_Init(); Motor_INIT(); } }
void initx(void) { SCB ->CPACR |= ((3UL << 10 * 2) | (3UL << 11 * 2)); STM_EVAL_LEDInit(LED3); STM_EVAL_LEDInit(LED4); STM_EVAL_LEDInit(LED5); STM_EVAL_LEDInit(LED6); STM_EVAL_LEDOff(LED3); STM_EVAL_LEDOff(LED4); STM_EVAL_LEDOff(LED5); STM_EVAL_LEDOff(LED6); init_usart(); send_string_uart("INIT UART\n"); init_accelerometer(); send_string_uart("INIT ACCE\n"); wire_exti_interrupt0_to_acceleromerter_int1(); send_string_uart("INIT INT\n"); init_DAC_DMA(); send_string_uart("INIT DMA\n"); DAC_Ch2_SineWaveConfig(); send_string_uart("INIT SINE\n"); }
void HardFault_Handler(void) { /* * Get the appropriate stack pointer, depending on our mode, * and use it as the parameter to the C handler. This function * will never return */ send_string_uart("HardFault_Handler\n"); __asm( ".syntax unified\n" "MOVS R0, #4 \n" "MOV R1, LR \n" "TST R0, R1 \n" "BEQ _MSP \n" "MRS R0, PSP \n" "B HardFault_HandlerC \n" "_MSP: \n" "MRS R0, MSP \n" "B HardFault_HandlerC \n" ".syntax divided\n"); }
void display_bar(int min_val, int max_val, int value) { static char display[130]; int range = (max_val - min_val); int average = (max_val + min_val) / 2; int display_value = (value - average) * 128 / range + 64; int min = 0; int max = 0; if (display_value < 64) { min = display_value; max = 64; } else { min = 64; max = display_value; } for (int i = 0; i < sizeof(display); i++) if (i > min && i < max) display[i] = '-'; else display[i] = ' '; display[sizeof(display) - 2] = '\n'; display[sizeof(display) - 1] = 0; send_string_uart(display); }
void PVD_IRQHandler(void) { send_string_uart("PVD_IRQHandler\n"); }
void WWDG_IRQHandler(void) { send_string_uart("WWDG_IRQHandler\n"); }
void DebugMon_Handler(void) { send_string_uart("DebugMon_Handler\n"); }
void UsageFault_Handler(void) { send_string_uart("UsageFault_Handler\n"); }
void NMI_Handler(void) { send_string_uart("NMI_Handler\n"); }
void MemManage_Handler(void) { send_string_uart("MemManage_Handler\n"); }
void BusFault_Handler(void) { send_string_uart("BusFault_Handler\n"); }
uint32_t LIS302DL_TIMEOUT_UserCallback(void) { send_string_uart("ACCELEROMETER TIMEOUT\n"); STM_EVAL_LEDToggle(LED6); return 0; }