更改按键,已经添加msp重启

This commit is contained in:
OPTOC
2025-10-28 14:55:50 +08:00
parent 5932e44c3e
commit b53898c6b5
6 changed files with 48 additions and 11 deletions

View File

@@ -3,8 +3,8 @@
button_t btn; button_t btn;
cfg_board_pin_io_t key_switch = { cfg_board_pin_io_t key_switch = {
.pin = 9, .pin = 18,
.en_lev = 0,}; .en_lev = 1,};
cfg_board_pin_io_t boot_switch = { cfg_board_pin_io_t boot_switch = {
.pin = 18, .pin = 18,
.en_lev = 0,}; .en_lev = 0,};
@@ -174,7 +174,7 @@ void button_work_init() {
pin_cfg_input(&key_switch); pin_cfg_input(&key_switch);
// pin_cfg_output(&boot_switch); // pin_cfg_output(&boot_switch);
gpio_to_high_z(&boot_switch); // gpio_to_high_z(&boot_switch);
button_init(&btn, read_button_pin, my_button_handler); button_init(&btn, read_button_pin, my_button_handler);
@@ -209,3 +209,21 @@ void key_test(void)
boot_set_high_z(); boot_set_high_z();
} }
void boot_set_2(uint8_t value)
{
pin_cfg_output(&boot_switch);
pin_set_valid(&boot_switch, value);
os_work_suspend(&work_handler_button);
}
void boot_set_high_z_2(void)
{
pin_cfg_input(&key_switch);
os_work_resume(&work_handler_button,10);
}
bool key_get_status(void)
{
return pin_get_valid(&key_switch);
}

View File

@@ -61,3 +61,9 @@ void boot_set(uint8_t value);
void boot_set_high_z(void); void boot_set_high_z(void);
void key_test(void); void key_test(void);
void boot_set_2(uint8_t value);
void boot_set_high_z_2(void);
bool key_get_status(void);

View File

@@ -448,7 +448,15 @@ void fc_put_ack(void)
// printf("ACK\n"); // printf("ACK\n");
} }
// MSP重启命令
void msp_send_reboot(msp_port_t *msp)
{
msp_send2(msp, MSP_REBOOT, NULL, 0);
}
void msp_request_type(msp_port_t *msp)
{
msp_send2(msp, MSP_FC_VARIANT, NULL, 0);
}
// MSP数据读取,并根据读取的数据进行处理 // MSP数据读取,并根据读取的数据进行处理
void msp_recv_loop(msp_port_t *msp) void msp_recv_loop(msp_port_t *msp)
{ {

View File

@@ -17,6 +17,7 @@
#define MSP_SONAR_ALTITUDE 58 #define MSP_SONAR_ALTITUDE 58
#define MSP_ARMING_CONFIG 61 #define MSP_ARMING_CONFIG 61
#define MSP_RX_MAP 64 // get channel map (also returns number of channels total) #define MSP_RX_MAP 64 // get channel map (also returns number of channels total)
#define MSP_REBOOT 68 // 重启命令
#define MSP_LOOP_TIME 73 // FC cycle time i.e looptime parameter #define MSP_LOOP_TIME 73 // FC cycle time i.e looptime parameter
#define MSP_STATUS 101 #define MSP_STATUS 101
#define MSP_RAW_IMU 102 #define MSP_RAW_IMU 102
@@ -366,7 +367,10 @@ void msp_handle_get_gcs(msp_gcs_t pkt);
// 回复请求包处理 // 回复请求包处理
void fc_put_ack(void); void fc_put_ack(void);
// 发送MSP重启命令
void msp_send_reboot(msp_port_t *msp);
// 请求飞控类型
void msp_request_type(msp_port_t *msp);
// 接口层 // 接口层
int MSP_wirite(const void *data, uint32_t size, uint32_t wait_ms); int MSP_wirite(const void *data, uint32_t size, uint32_t wait_ms);
int MSP_read(void *data, uint32_t size, uint32_t wait_ms); int MSP_read(void *data, uint32_t size, uint32_t wait_ms);

View File

@@ -172,7 +172,7 @@ int fc_reboot(void)
break; break;
case PROTOCOL_MSP: case PROTOCOL_MSP:
{ {
msp_send_reboot(&protocol.msp);
} }
break; break;
case PROTOCOL_MAVLINK: case PROTOCOL_MAVLINK:

View File

@@ -522,9 +522,9 @@ void resend_user_parse(void *resend_device)
// 修改灯珠颜色 // 修改灯珠颜色
protocol_set_message_status(MESSAGE_FC_ISP); protocol_set_message_status(MESSAGE_FC_ISP);
// 重启飞控并使其进入isp烧录模式 需要在能够识别飞控的情况下才需要重启 // 重启飞控并使其进入isp烧录模式 需要在能够识别飞控的情况下才需要重启
if(sertrf.fc_protocol_status != PROTOCOL_STATUS_TYPE_IDLE && sertrf.fc_protocol_status != PROTOCOL_STATUS_NO_DATA) // if(sertrf.fc_protocol_status != PROTOCOL_STATUS_TYPE_IDLE && sertrf.fc_protocol_status != PROTOCOL_STATUS_NO_DATA)
fc_reboot(); fc_reboot();
boot_set(0); boot_set_2(0);
os_thread_sleep(1000); os_thread_sleep(1000);
//串口切换为偶校验模式,并清除缓存 //串口切换为偶校验模式,并清除缓存
uart_set_parity_switch(sertrf.device.embedded_device, 0x02); uart_set_parity_switch(sertrf.device.embedded_device, 0x02);
@@ -556,7 +556,7 @@ void resend_user_parse(void *resend_device)
printf("stmisp: sync ok\n"); printf("stmisp: sync ok\n");
os_thread_sleep(100); os_thread_sleep(100);
boot_set_high_z(); boot_set_high_z_2();
// 全盘擦除 // 全盘擦除
if(!cmd_extended_erase_mass(&sertrf.stmisp_device)) if(!cmd_extended_erase_mass(&sertrf.stmisp_device))
printf("stmisp: erase mass error\n"); printf("stmisp: erase mass error\n");
@@ -604,6 +604,7 @@ void resend_user_parse(void *resend_device)
uart_set_parity_switch(sertrf.device.embedded_device, 0x00); uart_set_parity_switch(sertrf.device.embedded_device, 0x00);
SYS_LOG_INF("RESEND_CMD_FC_ISP_END2"); SYS_LOG_INF("RESEND_CMD_FC_ISP_END2");
resend_send_cmd(resend_device, RESEND_CMD_ACK, 0); resend_send_cmd(resend_device, RESEND_CMD_ACK, 0);
esp_restart();
break; break;
default: default: