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;}
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