日韩性视频-久久久蜜桃-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 解决方法的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 亚洲美女视频在线观看 | 欧美巨鞭大战丰满少妇 | 日本黄色a级片 | 成人拍拍 | 国产精品色在线 | 欧洲黄视频 | 五月六月婷婷 | 国产 中文 字幕 日韩 在线 | 国产精品久久久久久久天堂 | 2023毛片| 影音先锋中文字幕一区二区 | 精品少妇theporn | 69精品久久久久久 | 高清无码视频直接看 | jizz在线看| 久久精品a亚洲国产v高清不卡 | 激情久久中文字幕 | 在线免费观看日韩视频 | 亚洲综合欧美日韩 | 欧美性大战久久久久久久 | 亚洲粉嫩 | www在线观看免费视频 | 影音先锋国产精品 | 伊人久久中文 | 97一级片 | 九九精品视频免费 | 日本一区二区三区视频在线 | 一本色道综合久久欧美日韩精品 | 国产毛片毛片毛片 | 日韩伦理中文字幕 | 免费在线小视频 | 欧美视频中文字幕 | 国产日韩视频在线观看 | 久章操| 国产美女免费看 | 亚洲第一毛片 | 国产又黄又粗又猛又爽 | 这里只有精品22 | 26uuu精品一区二区在线观看 | 国产高清精品软件丝瓜软件 | 欧美日韩123 | 不卡av在线免费观看 | 日本裸体视频 | 麻豆精品一区二区三区 | 国语对白清晰刺激对白 | 男男一级淫片免费播放 | 韩毛片| 九九在线精品视频 | 亚洲精品久久久狠狠狠爱 | 国模大胆一区二区三区 | 午夜视频在线看 | 黄色在线a| 日本一区二区三区在线免费观看 | 理论片琪琪午夜电影 | 国产在线不卡av | 性xxxx另类xxⅹ| 爱爱视频日本 | 桃色视屏| 人人草人人看 | youjizz国产精品 | 武侠古典av | 强伦人妻一区二区三区 | 欧美日韩h | 第一色影院 | 午夜精品视频一区二区三区在线看 | 欧美一区亚洲一区 | 999午夜| 老熟女一区二区三区 | 亚洲69| 91在线免费视频 | 国产后入清纯学生妹 | av作品在线观看 | 日本中文字幕影院 | 中文字幕日韩有码 | 爱啪啪导航 | 兄弟兄弟全集免费观看 | 国产亚洲精品aaaaaaa片 | 日韩少妇一区二区三区 | 亚洲v国产v欧美v久久久久久 | 看黄色小视频 | 日韩欧美一本 | 日韩av在线免费播放 | 爱情岛黄色 | 亚洲欧洲一级 | 天堂亚洲网 | 成人av电影在线观看 | 665566综合网 | 日鲁鲁| 国产精华一区二区三区 | 91久久电影 | ass极品国模人体欣赏 | 好吊视频一区二区三区四区 | 久久精品亚洲天堂 | 毛片导航| 亚洲经典一区二区三区 | fc2ppv色の美マンに中出し | 熟妇五十路六十路息与子 | 亚洲av无码国产精品色午夜 | 亚洲第一色站 |