日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

用STM32F103C8T6的做IAP时,在跳转时一直进入HardFault_Handler 解决方法

發(fā)布時間:2025/3/21 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 用STM32F103C8T6的做IAP时,在跳转时一直进入HardFault_Handler 解决方法 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

首先是IAP
STM32F103C8T6的flash是64k,每次擦除是1k
1、用串口接收APP的bin文件數(shù)據(jù),然后寫入內部的FLASH
//appxaddr是要跳轉的地址 設置是0x0800500
//appbuf是串口接收到的app的bin文件數(shù)據(jù)
//appsize是bin的大小
void iap_write_appbin(u32 appxaddr,u8 *appbuf,u32 appsize)
{
? ? ? ? u8 page = 0;
? ? ? ? u32 i =0;
? ? ? ? u16 *p = (u16 *)appbuf;
? ? ? ? page = FLASH_PagesMask(appsize);//得到要擦除的頁數(shù)
? ? ? ? printf("\r\n要擦除的數(shù)據(jù)頁數(shù):%d\r\n",page);
? ? ? ? FLASH_Unlock();//解鎖
? ? ? ? for(i = 0;i < page; i++)
? ? ? ? {
? ? ? ? ? ? ? ? CPU_IntDis();//關中斷
? ? ? ? ? ? ? ? FLASH_ErasePage(appxaddr+i*Page_Size);//一次擦除1024字節(jié)
? ? ? ? ? ? ? ? CPU_IntEn();//開中斷
? ? ? ? ? ? ? ? if(Flash_ReadHalfWord(appxaddr+i*Page_Size)!=0xffff)
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? printf("\r\n擦除出錯.................\r\n");
? ? ? ? ? ? ? ? }
? ? ? ? }
? ? ? ? for(i = 0;i < appsize;i=i+2)
? ? ? ? {
? ? ? ? ? ? ? ? FLASH_ProgramHalfWord(appxaddr + i,*p);//半字寫入
? ? ? ? ? ? ? ? if((Flash_ReadHalfWord(appxaddr +i) & 0xff)!=appbuf[i])//判斷寫入的是否正確
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? FLASH_Lock();
? ? ? ? ? ? ? ? ? ? ? ? printf("\r\n寫入錯誤\r\n");
? ? ? ? ? ? ? ? ? ? ? ? return ;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? p++;
? ? ? ? }
? ? ? ? FLASH_Lock();
}

上面是把接收到串口的數(shù)據(jù)寫入flash,寫入的數(shù)據(jù)是沒有錯誤的,通過讀flash和app的bin文件做了比較

2、下面是跳轉函數(shù)

typedef??void (*iapfun)(void);? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //定義一個函數(shù)類型的參數(shù).
iapfun jump2app;?
void iap_load_app(u32 appxaddr)//appxaddr是0x08005000
{
? ? ? ? if(((*(vu32*)appxaddr)&0x2FFE0000)==0x20000000)? ? ? ? //檢查棧頂?shù)刂肥欠窈戏?
? ? ? ? {?
? ? ? ? ? ? ? ? jump2app=(iapfun)*(vu32*)(appxaddr+4);? ? ? ? ? ? ? ? //用戶代碼區(qū)第二個字為程序開始地址(復位地址)? ? ? ? ? ? ? ??
? ? ? ? ? ? ? ? MSR_MSP(*(vu32*)appxaddr);? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //初始化APP堆棧指針(用戶代碼區(qū)的第一個字用于存放棧頂?shù)刂?
? ? ? ? ? ? ? ? jump2app();? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //跳轉到APP.
? ? ? ? ? ? ? ??
? ? ? ? }
}

串口接收發(fā)送都是采用中斷
每次在跳轉的時候就會進入HardFault_Handler,不知道錯在什么地方

app的設置如下
1、在魔法棒中設置app的起始地址為0x08005000
2、設置中斷向量表SCB->VTOR = FLASH_BASE | 0x5000;
然后程序里面就是一個很簡單的LED的閃爍,

每次在接收完成,把數(shù)據(jù)寫入到flash之后再進行跳轉就會進入HardFault_Handler,不知道那里有錯,

?

這是之前我發(fā)的帖子

錯誤的原因是:我雖然設置了起始地址,但是沒選擇如下圖,所以map里面的地址一直沒改變,use memory哪里默認的不是勾選,應該把哪里勾選

?

這樣我的問題就解決了 ,有空再把bootloader的整體給寫出來,,,這里個錯誤找了我3天時間 ,,好浪費啊 ?希望可以幫助到其他人

?

?

這樣map就可以看到起始地址的改變了

總結

以上是生活随笔為你收集整理的用STM32F103C8T6的做IAP时,在跳转时一直进入HardFault_Handler 解决方法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 青青草原av在线 | 中国一区二区三区 | 在线视频区 | 四虎国产视频 | 饥渴放荡受np公车奶牛 | 在线看黄免费 | 亚洲爽爆| 国产精彩视频 | 中文字幕在线网站 | 国产一区二区成人 | 久久高清毛片 | 射精一区二区 | 16—17女人毛片 | 伊人网狼人| 欧美不卡视频在线观看 | 精品1区2区 | 欧美日本在线观看 | 哺乳期给上司喂奶hd | 日韩一区三区 | 在线观看国产免费视频 | 日本www色| 国产精品一品二区三区的使用体验 | 森泽佳奈中文字幕 | 国产高清片 | 一区亚洲| 深夜福利一区二区 | 在线精品自拍 | 欧州一区二区三区 | 国产人妻精品一区二区三 | 日韩免费黄色 | 午夜成年视频 | 伊人亚洲 | 67194在线免费观看 | 久久综合网址 | 神马九九| 日韩av在线第一页 | 奶水喷溅 在线播放 | 91看片网| 91精品国产综合久久久蜜臀九色 | 最近中文字幕 | 天堂在线成人 | 初高中福利视频网站 | 天天射网 | 日本熟女一区二区 | 亚洲色成人一区二区三区小说 | juliaann欧美二区三区 | 搡老熟女老女人一区二区 | 夜夜天天 | 51精品| 国产精品一级片 | 美女福利视频网 | 欧美3p在线观看 | 五月天三级 | 国产乱人乱偷精品视频 | 国产亚洲精品成人无码精品网站 | 男人的天堂免费视频 | 欧美一区二区三区在线播放 | 亚洲小说春色综合另类 | 香蕉视频网站在线观看 | 国产人成一区二区三区影院 | 性色av浪潮av | 亚洲精品国产熟女久久久 | 久久久国产精品x99av | 神马午夜一区二区 | 综合久久综合 | 日本老师巨大bbw丰满 | 亚洲欧洲免费 | 欧美一区二区在线播放 | 国产无遮挡一区二区三区毛片日本 | 亚洲性猛交xxxx乱大交 | 日韩欧美麻豆 | 成年人免费大片 | 一级国产特黄bbbbb | 欧美超碰在线观看 | 中文字幕一区二区三区乱码人妻 | 狠狠操狠狠操狠狠操 | 欧美一区二区最爽乱淫视频免费看 | 老妇女av| 天天做天天干 | 亚洲国产精品99久久久久久久久 | 欧美在线视频免费播放 | 欧美日韩一区免费 | 国产精品激情偷乱一区二区∴ | 奇米影视色 | 肌肉猛男裸体gay网站免费 | 精品国产乱码久久久久久久软件 | 在线中文av| 精久久久久久久 | 雨宫琴音一区二区三区 | 天堂va欧美ⅴa亚洲va一国产 | 性久久久久久久久久久久 | 国产激情在线播放 | 久久乐av| 少妇又色又紧又黄又刺激免费 | 日韩一区免费 | 亚洲成人精品久久久 | 欧美老熟妇xb水多毛多 | 免费观看视频一区 | 嫩草国产精品 |