diff --git a/app.c b/app.c index b147786..57f39c6 100644 --- a/app.c +++ b/app.c @@ -43,42 +43,68 @@ void start_up(void) } } - +//================================================================ +//================================================================ +//屏幕串口部分 +extern uint8_t g_lcd_rxbuf_isready;//lcd数据接收过程中为真,接收完成为假 extern volatile char lcd_rxbuff[50] = {0}; extern volatile int32_t lcd_count = 0; -extern uint8_t g_lcd_rxbuf_isready;//lcd数据接收过程中为真,接收完成为假 +extern uint32_t g_process_recv_lcd_data_time = 0; -uint32_t judge_recv_lcd_data_finish_main(uint32_t time) +void judge_recv_lcd_data_finish_main(uint32_t time) { /** * @brief 接收LCD的数据完成 */ - static uint32_t recv_lcd_data_time = 0; - recv_lcd_data_time = time; - if(recv_lcd_data_time=0) - { - recv_lcd_data_time = hal_get_ticket(); - return recv_lcd_data_time; - } - else if (hal_has_passedms(recv_lcd_data_time) > 10) { - g_lcd_rxbuf_isready=false; - recv_lcd_data_time = hal_get_ticket(); - send_cmd_to_lcd(lcd_rxbuff,lcd_count);//接收完成将数据发给电脑 - lcd_count=0; - return 0; - } + static uint32_t recv_lcd_data_time = 0; + recv_lcd_data_time = time; + if (hal_has_passedms(recv_lcd_data_time) > 10) { + g_lcd_rxbuf_isready=false; + recv_lcd_data_time = hal_get_ticket(); + send_cmd_to_lcd(lcd_rxbuff,lcd_count);//接收完成将数据发给电脑 + lcd_count=0; + } + +} +//================================================================ +//================================================================ +//电机串口部分 +extern uint8_t g_motor_rxbuf_isready;//lcd数据接收过程中为真,接收完成为假 +extern volatile char motor_rxbuff[50] = {0}; +extern volatile int32_t motor_count = 0; +extern uint32_t g_process_recv_motor_data_time = 0; +void judge_recv_motor_data_finish_main(uint32_t time) +{ + /** + * @brief 接收motor的数据完成 + */ + static uint32_t recv_motor_data_time = 0; + recv_motor_data_time = time; + if (hal_has_passedms(recv_motor_data_time) > 10) { + g_lcd_rxbuf_isready=false; + recv_motor_data_time = hal_get_ticket(); + send_cmd_to_motor(motor_rxbuff,motor_count);//接收完成将数据发给电脑 + send_cmd_to_lcd(motor_rxbuff,motor_count);//接收完成将数据发给电脑 + motor_count=0; + } } + + + void main() { peripheral_config();//各种初始化包括ram清零 - uint32_t record_last_time=0; while (1) { debug_light_ctrl_process_in_main_loop();//闪灯效果 if(g_lcd_rxbuf_isready)//接收开始 { - record_last_time = judge_recv_lcd_data_finish_main(record_last_time); + judge_recv_lcd_data_finish_main(g_process_recv_lcd_data_time); + } + if(g_motor_rxbuf_isready) + { + judge_recv_motor_data_finish_main(g_process_recv_motor_data_time); } } } diff --git a/lcd.c b/lcd.c index 88fc89e..6df4d51 100644 --- a/lcd.c +++ b/lcd.c @@ -19,7 +19,6 @@ volatile int32_t lcd_issue_motor_speed=0; volatile int16_t judge_now_foreward_or_reversal_state=0;//正转0,反转1 volatile int32_t first_set_speed_state=0; extern volatile int32_t speed_dsp_now;//当前电机的速度单位dsp -extern int32_t recv_lcd_data_time; extern volatile int32_t motor_jerk_state;//1电机处于急停状态 //----------------------------------------- @@ -52,7 +51,7 @@ void send_cmd_to_lcd(volatile char buff[20], unsigned int num) //--------------------------------------- //--------------------------------------- uint8_t g_lcd_rxbuf_isready = 0; -static uint32_t process_recv_lcd_data_time = 0; +uint32_t g_process_recv_lcd_data_time = 0; void recv_from_lcd_data(unsigned char data) { /** @@ -61,22 +60,27 @@ void recv_from_lcd_data(unsigned char data) */ g_lcd_rxbuf_isready=true;//进入中断就让他为真 lcd_rxbuff[lcd_count++] = data; + g_process_recv_lcd_data_time= hal_get_irqticket();//记录最后的时间 } -void judge_recv_lcd_data_finish(void) +uint32_t judge_recv_lcd_data_finish(uint32_t time) { /** * @brief 接收LCD的数据完成 */ - static uint32_t recv_lcd_data_time = 0; - if (hal_has_passedms(recv_lcd_data_time) > 10) { - g_lcd_rxbuf_isready=false; - recv_lcd_data_time = hal_get_ticket(); - send_cmd_to_lcd(lcd_rxbuff,lcd_count);//接收完成将数据发给电脑 - } + static uint32_t recv_lcd_data_time = 0; + recv_lcd_data_time = time; + if (hal_has_passedms(recv_lcd_data_time) > 10) { + g_lcd_rxbuf_isready=false; + recv_lcd_data_time = hal_get_ticket(); + send_cmd_to_lcd(lcd_rxbuff,lcd_count);//接收完成将数据发给电脑 + lcd_count=0; + return 0; + } } + /** * @brief 对来自lcd的指令进行分析 * @param buff 指令,num 指令的字节长度 diff --git a/lcd.h b/lcd.h index 8f8e458..b6a8fc2 100644 --- a/lcd.h +++ b/lcd.h @@ -10,7 +10,7 @@ void lcd_uart_config(void); void lcd_send_commands(void); void send_cmd_to_lcd(volatile char buff[20],unsigned int num); -void judge_recv_lcd_data_finish(void); +uint32_t judge_recv_lcd_data_finish(uint32_t time); uint8_t lcd_data_analyse(volatile char buff[20], unsigned int num); void recv_from_lcd_data(unsigned char data); void lcd_switch_anomaly_page(void); diff --git a/motor.c b/motor.c index 94c8888..134dc06 100644 --- a/motor.c +++ b/motor.c @@ -15,8 +15,6 @@ extern volatile int32_t lcd_issue_motor_speed; volatile int16_t motor_off_state=0; extern int32_t recv_motor_data_time; extern int32_t inquire_error_time=0; -volatile char motor_recv_rxbuff[50] = {0}; -volatile int32_t motor_recv_count = 0; void motor_uart_config(void) { /** @@ -77,34 +75,44 @@ void inquire_motor_error_state(void) sleep_ms(10); } } - +//---------------------------------------------------- +//---------------------------------------------------- +//---------------------------------------------------- +uint8_t g_motor_rxbuf_isready = 0; +volatile char motor_rxbuff[50] = {0}; +volatile uint32_t motor_count = 0; +uint32_t g_process_recv_motor_data_time = 0; void recv_from_motor_data(unsigned char data) { /** * @brief 接受来自电机的数据 * */ - recv_motor_data_state=1; - recv_motor_data_time=0; - motor_recv_rxbuff[motor_recv_count++]=data; + g_motor_rxbuf_isready=true;//进入中断就让他为真 + motor_rxbuff[motor_count++] = data; + g_process_recv_motor_data_time= hal_get_irqticket();//记录最后的时间 } -void data_from_motor_recv_Ok(void) + +uint32_t judge_recv_motor_data_finish(uint32_t time) { - /** - * @brief 接收电机的数据完成 - * 注意调试1利用串口助手测试的时候将数据发回给串口 - * 调试2将电机发过来的数据,发送给lcd - */ - if(recv_motor_data_time>30) + /** + * @brief 接收motor的数据完成 + */ + static uint32_t recv_motor_data_time = 0; + recv_motor_data_time = time; + if(recv_motor_data_time=0) { - send_cmd_to_motor(motor_recv_rxbuff, motor_recv_count); - send_cmd_to_lcd(motor_recv_rxbuff, motor_recv_count); - //recv_motor_data_state=0; - motor_recv_count=0; - //motor_data_analyse(motor_rxbuff, motor_count); + recv_motor_data_time = hal_get_ticket(); + return recv_motor_data_time; + } + else if (hal_has_passedms(recv_motor_data_time) > 10) { + g_motor_rxbuf_isready=false; + recv_motor_data_time = hal_get_ticket(); + send_cmd_to_motor(motor_rxbuff,motor_count);//接收完成将数据发给电脑 + motor_count=0; + return 0; } - } diff --git a/t21_t8.c b/t21_t8.c index c099c44..e025280 100644 --- a/t21_t8.c +++ b/t21_t8.c @@ -83,6 +83,11 @@ int32_t hal_get_ticket() return g_ticket100us; } +int32_t hal_get_irqticket() +{ + return g_ticket100us; +} + int32_t sleep_ms(int32_t time) { /** diff --git a/t21_t8.h b/t21_t8.h index d00c7a6..fa10a6b 100644 --- a/t21_t8.h +++ b/t21_t8.h @@ -16,6 +16,7 @@ void system_module_process_interrupt(); int32_t sleep_ms(int32_t time); void init_timer1_as_ticketustimer_in32M(); int32_t hal_get_ticket(); +int32_t hal_get_irqticket(); uint32_t hal_has_passedms(uint32_t lastticket); #endif