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
标签:中断向量,get,key2,app,程序,测试,跳转,bootloader,ymodem From: https://www.cnblogs.com/hjf-log/p/18200521