Skip to content

通过按键烧录MCU的实现方案

Picoxtools的上下两侧各配备一个用户按键,对应的对应的GPIO分别为GPIO12和GPIO23。本示例通过C语言程序监听这些按键的触发事件,实现对目标MCU的脱机烧录控制。

具体实现方式:

  • 采用标准C代码编写核心逻辑
  • 注册GPIO中断服务程序(ISR)以响应按键事件
  • 在中断处理中调用烧录(flash)命令执行烧录操作
  • 借助LVGL库在屏幕上实时显示烧录进度与状态信息

代码

c
//gpio_flash.c

#define BTN_UP_12    12
#define BTN_DOWN_23  23

int curr_key = 0;

int gpio_callback(int num){
    curr_key = get_curr_key();
    return 0;
}

int main(){
    //httpd();
    reg_gpio_hook(gpio_callback);
    lvgl_text("*PUSH BTN TO FLASH*");

    while(1){
        if(curr_key){
            printf("key %d down\r\n",curr_key);
            if(curr_key == 12){
                lvgl_text("TRY FLASH....");

                //flash("rp2040","/upload/rp2040_blink.bin");
                flash("stm32f103","/upload/stm32f103x.bin");
                
                lvgl_text("FINISHED");
            }
            curr_key = 0 ;
        }
        sleep_ms_v(100);
        if (getchar_timeout_us(0) == 3){ // CTRL + C
            unreg_gpio_hook(gpio_callback);
            break;
        }
    }
    return 0;
}

运行方式

  • 在 web控制台的 xShell 内执行上述代码:cc gpio_flash.c
  • 复位直接运行:

将上述 c 程序保存于根目录并命名为:init.c

注意

上述程序命名为‘/init.c’ 后,如仍需要通过web console访问 PicoXTools,请将代码中的//httpd();前的注释符删掉!启动 web服务器。