///////////////// // main routine ///////////////// void main (void) { uint8_t Rx, loop; ///////////////// // init peripherals ///////////////// // disable interrupts DISABLE_INTERRUPTS; // switch to 16MHz (default is 2MHz) CLK.CKDIVR.byte = 0x00; // configure green LED pin (PH2) gpio_init(&PORT_H, PIN_2, OUTPUT_PUSHPULL_FAST); // init timer TIM4 for 1ms clock with interrupts tim4_init(); // init pins for UART1 Rx(=PA4) and Tx(=PA5) gpio_init(&PORT_A, PIN_4, INPUT_PULLUP_NOEXINT); gpio_init(&PORT_A, PIN_5, OUTPUT_PUSHPULL_FAST); // init UART1 (connected to PC on muBoard) uart1_init(115200L); // init pins for UART3 Rx(=PD6) and Tx(=PD5) gpio_init(&PORT_D, PIN_6, INPUT_PULLUP_NOEXINT); gpio_init(&PORT_D, PIN_5, OUTPUT_PUSHPULL_FAST); // init UART3 (available on io-plug on muBoard) uart3_init(115200L); // enable interrupts ENABLE_INTERRUPTS; ///////////////// // main loop ///////////////// loop = 0; while (1) { // if byte received via UART1 send via UART3 if (uart1_check_Rx()) uart3_send_byte(uart1_receive()); // if byte received via UART3 send via UART1 if (uart3_check_Rx()) uart1_send_byte(uart3_receive()); // every 1ms do if (g_flagClock) { g_flagClock = 0; // every 500ms toggle LED & print text if (g_clock > 500) { g_clock = 0; // toggle LED PORT_H.ODR.bit.b2 ^= 1; } // loop 500ms } // loop 1ms } // main loop } // main
///////////////// // main routine ///////////////// void main (void) { uint8_t Rx, loop; ///////////////// // init peripherals ///////////////// // disable interrupts DISABLE_INTERRUPTS; // switch to 16MHz (default is 2MHz) CLK.CKDIVR.byte = 0x00; // configure green LED pin (PH2) gpio_init(&PORT_H, PIN_2, OUTPUT_PUSHPULL_FAST); // init timer TIM4 for 1ms clock with interrupts tim4_init(); // init pins for UART1 Rx(=PA4) and Tx(=PA5) gpio_init(&PORT_A, PIN_4, INPUT_PULLUP_NOEXINT); gpio_init(&PORT_A, PIN_5, OUTPUT_PUSHPULL_FAST); // init UART1 (connected to PC on muBoard) uart1_init(115200L); // enable interrupts ENABLE_INTERRUPTS; ///////////////// // main loop ///////////////// loop = 0; while (1) { // if byte received via UART1, echo byte+1 while (uart1_check_Rx()) { Rx = uart1_receive(); // grab oldest byte putchar((char) (Rx+1)); } // every 1ms do if (g_flagClock) { g_flagClock = 0; // every 500ms toggle LED & print text if (g_clock > 500) { g_clock = 0; // toggle LED PORT_H.ODR.bit.b2 ^= 1; // print something to UART (blocking) printf("loop: %d\n", (int) (++loop)); } // loop 500ms } // loop 1ms } // main loop } // main
void cmd_handle(void){ unsigned char cmd; unsigned char cmd_param[8]; int i; cmd = uart1_receive(); uart1_send_char(cmd); // uart2_send_char('O'); // uart3_send_char('K'); switch(cmd){ case CMD_FORWARD://前进 car_forward(); break; case CMD_BACK ://后退 car_back(); break; case CMD_LEFT://向左移动 car_left(); break; case CMD_RIGHT://向右移动 car_right(); break; case CMD_STOP://制动 car_stop(); break; case CMD_INIT://初始化 car_init(); break; case CMD_STANDBY://待机 car_standby(); break; case CMD_CIRCLE1://转 car_circle(1); break; case CMD_CIRCLE2://反转 car_circle(0); break; case CMD_MOTOR_SET://设置参数 for(i=0;i<8;i++){ cmd_param[i]=uart1_receive(); } car_set(cmd_param); for(i=0;i<8;i++){ uart1_send_char(cmd_param[i]); } break; case CMD_RESUME://恢复 car_resume(); break; case CMD_POWER_SET: for(i=0;i<2;i++){ cmd_param[i]=uart1_receive(); } power_set(cmd_param); for(i=0;i<2;i++){ uart1_send_char(cmd_param[i]); } break; case CMD_STEER_SET: for(i=0;i<3;i++){ cmd_param[i]=uart1_receive(); } steering_set(cmd_param); for(i=0;i<3;i++){ uart1_send_char(cmd_param[i]); } break; case CMD_STEER_SHOW: steering_show(); break; case CMD_STEER_SET_INIT: steering_set_init(); break; case CMD_PLAY_WAV: cmd_param[0]=uart1_receive(); play_wav(cmd_param[0]); break; default:break; } }