標(biāo)題: stm32代碼升級(jí)總結(jié) [打印本頁(yè)]
作者: 51heisex 時(shí)間: 2016-1-23 01:05
標(biāo)題: stm32代碼升級(jí)總結(jié)
看了那么多stm32代碼升級(jí)的教程,有兩個(gè)疑點(diǎn):1,修改中斷向量表偏移是bootloader修還是app代碼要修?
答:app代碼

2:,修改rom的起始地址或RAM的地址在哪里?
答:app代碼

3,bootloader代碼干啥?
答:就寫段程序就行。
intmain(void)
{
u8t,key;
u16oldcount=0; //老的串口接收數(shù)據(jù)值
u16applenth=0; //接收到的app代碼長(zhǎng)度
u8clearflag=0;
uart_init(256000); //串口初始化為256000
delay_init(); //延時(shí)初始化
LCD_Init(); //液晶初始化
LED_Init(); //初始化與LED連接的硬件接口
KEY_Init(); //按鍵初始化
POINT_COLOR=RED;//設(shè)置字體為紅色
LCD_ShowString(60,50,200,16,16,"WarshipSTM32");
LCD_ShowString(60,70,200,16,16,"IAPTEST");
LCD_ShowString(60,90,200,16,16,"ATOM@ALIENTEK");
LCD_ShowString(60,110,200,16,16,"2012/9/24");
LCD_ShowString(60,130,200,16,16,"WK_UP:CopyAPP2FLASH");
LCD_ShowString(60,150,200,16,16,"KEY1:EraseSRAM APP");
LCD_ShowString(60,170,200,16,16,"KEY0:RunSRAM APP");
LCD_ShowString(60,190,200,16,16,"KEY2:RunFLASH APP");
POINT_COLOR=BLUE;
//顯示提示信息
POINT_COLOR=BLUE;//設(shè)置字體為藍(lán)色
while(1)
{
if(USART_RX_CNT)
{
if(oldcount==USART_RX_CNT)
//新周期內(nèi),沒(méi)有收到任何數(shù)據(jù),認(rèn)為本次數(shù)據(jù)接收完成.
{
applenth=USART_RX_CNT;
oldcount=0;
USART_RX_CNT=0;
printf("用戶程序接收完成!\r\n");
printf("代碼長(zhǎng)度:?ytes\r\n",applenth);
}elseoldcount=USART_RX_CNT;
}
t++;delay_ms(10);
if(t==30)
{
LED0=!LED0;t=0;
if(clearflag)
{
clearflag--;
if(clearflag==0)LCD_Fill(60,210,240,210+16,WHITE);//清除顯示
}
}
key=KEY_Scan(0);
if(key==KEY_UP)
{
if(applenth)
{
printf("開(kāi)始更新固件...\r\n");
LCD_ShowString(60,210,200,16,16,"CopyingAPP2FLASH...");
if(((*(vu32*)(0X20001000+4))&0xFF000000)==0x08000000)
//判斷是否為0X08XXXXXX.
{
iap_write_appbin(FLASH_APP1_ADDR,USART_RX_BUF,
applenth);//更新FLASH代碼
LCD_ShowString(60,210,200,16,16,"CopyAPP Successed!!");
printf("固件更新完成!\r\n");
}else
{
LCD_ShowString(60,210,200,16,16,"IllegalFLASHAPP! ");
printf("非FLASH應(yīng)用程序!\r\n");
}
}else
{
printf("沒(méi)有可以更新的固件!\r\n");
LCD_ShowString(60,210,200,16,16,"NoAPP!");
}
clearflag=7;//標(biāo)志更新了顯示,并且設(shè)置7*300ms后清除顯示
}
if(key==KEY_DOWN)
{
if(applenth)
{
printf("固件清除完成!\r\n");
LCD_ShowString(60,210,200,16,16,"APPErase Successed!");
applenth=0;
}else
{
printf("沒(méi)有可以清除的固件!\r\n");
LCD_ShowString(60,210,200,16,16,"NoAPP!");
}
clearflag=7;//標(biāo)志更新了顯示,并且設(shè)置7*300ms后清除顯示
}
if(key==KEY_LEFT)
{
了解完上面的教程以后,開(kāi)始動(dòng)手實(shí)踐,但問(wèn)題來(lái)了:
1,必須找一個(gè)能打開(kāi)bin文件的軟件,如用ultraedit
2,將純數(shù)據(jù)的二進(jìn)制拷出來(lái),然后用串口助手發(fā)送給單片機(jī)
3,發(fā)現(xiàn)升級(jí)失敗,后來(lái)發(fā)現(xiàn)從ultraedit里拷貝出來(lái)的數(shù)據(jù)每一行后面都有一個(gè)換行,所以拷貝到word里,將所有的換行去掉,因?yàn)橐粋(gè)換行就是一個(gè)字節(jié),盡管在用串口助手的HEX方式發(fā)送時(shí),看不到那個(gè)換行的字節(jié),但是實(shí)驗(yàn)發(fā)現(xiàn),是多一個(gè)字節(jié)的。
4,具體操作如下:
第一步:按Ctrl + H
第二步:在“查找內(nèi)容”后面,輸入:^p (注意,^就是數(shù)字6上面的那個(gè)符號(hào),p是小寫的)
第三步:在“替換為”后面,不輸入任何內(nèi)容。
第四步:點(diǎn)“全部替換”。
5,發(fā)現(xiàn)好使。
歡迎光臨 (http://www.zg4o1577.cn/bbs/) |
Powered by Discuz! X3.1 |
主站蜘蛛池模板:
午夜精品久久久久久久久久久久久
|
国产亚洲一区二区三区在线观看
|
午夜免费视频
|
国产精品久久久久久久午夜片
|
一区二区三区四区国产
|
成人性生交大片免费看中文带字幕
|
亚洲国产成人精品女人久久久
|
午夜天堂精品久久久久
|
精品一区久久
|
好姑娘影视在线观看高清
|
美国黄色毛片
|
久久九精品
|
伊人精品视频
|
亚洲成人国产精品
|
99热播放|
欧美一级毛片在线播放
|
怡红院怡春院一级毛片
|
久久国产精品99久久久大便
|
二区在线视频
|
午夜视频免费在线观看
|
亚洲精品一级
|
日日精品|
91亚洲精选
|
日韩国产欧美一区
|
国产一区91在线
|
一级免费毛片
|
国产精品有限公司
|
美女在线观看国产
|
九九99九九精彩46
|
日韩网站在线观看
|
91精品国产91久久久久久吃药
|
国产精品国产a
|
国产精品视频免费观看
|
欧美在线小视频
|
四虎影视免费观看
|
亚洲欧美激情精品一区二区
|
欧美视频1区
|
久久国产亚洲
|
欧美在线一区二区三区
|
久久久久精|
国产91色在线 | 亚洲
|