Insert title here

stm32f103c8t6使用bootloader进行ymodem下载和app程序测试,部分总结(暂未测试中断向量偏移问题)

bootloader程序部分(功能测试)

    print_boot_message();
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
    uint8_t key_get_state;
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
        key_get_state = get_key();
        switch(key_get_state)
        {
            case 1: //key1//////////////////////////////////////
                printf("start app...\r\n");
                HAL_Delay(50);
                //中断向量偏移
                if (!jump_app(boot_parameter.addr)) //地址正确跳转返回jump_app 1,否则返回0 no program
                {
                        printf("no program\r\n");//跳转失败
                        HAL_Delay(1000);
                }
                printf("start app failed\r\n");//继续到这一步表示跳转app失败
                break;
                
            case 2: //key2//////////////////////////////////////
                printf("update app program...\r\n");
                HAL_Delay(50);
                SerialDownload();
                break;
            
        }
main

mian中主要程序部分在以上部分,先打印信息

 

然后循环判断两个按键,这里设置了key1和key2

key1是跳转到指定地址的app程序,这里程序地址是0x08006000

key2表示进行ymodem下载程序,把bin固件下载到0x08006000,固件不能使用hex带地址信息无法成功跳转

key2的程序暂未限制固件大小为40K,因为给stm32f103c8t6的app留的程序大小0x00010000=40K,之后增加验证

 

booloader注意魔术棒的开始地址和大小,中间0x08005000到0x08006000给一些配置参数留的空间

 

 

测试程序效果:(使用xshell进行ymodem传输,因为有个人免费版)

按下key2进入ymodem传输,stm32的串口1会不断发送C,准备接收文件

 右键,选择传输,ymodem,用ymodem发送

 

 找到mdk生成的stm32 APP的bin文件,bin文件生成方式看上一篇

 可以看到传输完成,打印文件名和大小

在按下key1可以进入app程序部分,就是0x08006000的开始

 打印信息,已经进入app程序了,我这里是让led循环闪烁效果正常,bootloader程序和app程序上传到网盘中

链接:https://pan.baidu.com/s/13EIlF0wSeVHDq5EsaOq36w?pwd=sxkj
提取码:sxkj

 

BOOTLOADER的程序部分包含了w25qxx的程序,下一步准备将ymodem的程序下载到外部flash中,通过外部flash内的程序去更新程序,同时保存旧有程序

准备做bootloader usb使用外部flash模拟U盘将bin文件拖拽的方式更新app程序

(stm32f103c8t6可能是太老了,没有外部晶振居然无法用内部晶振去配置USB,之前使用F070连外部的D+上拉都可以节省了,后浪推前浪啊)

 

posted @ 2024-05-19 17:38  这一切足够了  阅读(20)  评论(0编辑  收藏  举报
复制代码