久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2947|回復: 0
打印 上一主題 下一主題
收起左側

stm32代碼升級總結

[復制鏈接]
跳轉到指定樓層
樓主
ID:104126 發表于 2016-1-23 01:05 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
看了那么多stm32代碼升級的教程,有兩個疑點:1,修改中斷向量表偏移是bootloader修還是app代碼要修?
答:app代碼



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



3,bootloader代碼干啥?
答:就寫段程序就行。
intmain(void)
{           
       u8t,key;
       u16oldcount=0;     //老的串口接收數據值
       u16applenth=0;     //接收到的app代碼長度
       u8clearflag=0;
       uart_init(256000);      //串口初始化為256000
       delay_init();               //延時初始化
       LCD_Init();            //液晶初始化
       LED_Init();                 //初始化與LED連接的硬件接口
      KEY_Init();                  //按鍵初始化      
POINT_COLOR=RED;//設置字體為紅色
       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;//設置字體為藍色  
       while(1)
       {
             if(USART_RX_CNT)
              {
                     if(oldcount==USART_RX_CNT)
//新周期內,沒有收到任何數據,認為本次數據接收完成.
                     {
                            applenth=USART_RX_CNT;
                            oldcount=0;
                            USART_RX_CNT=0;
                            printf("用戶程序接收完成!\r\n");
                            printf("代碼長度:?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("開始更新固件...\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應用程序!\r\n");
                            }
                    }else
                     {
                            printf("沒有可以更新的固件!\r\n");
                            LCD_ShowString(60,210,200,16,16,"NoAPP!");
                     }
                     clearflag=7;//標志更新了顯示,并且設置7*300ms后清除顯示         
              }
              if(key==KEY_DOWN)
              {
                     if(applenth)
                     {                                                                                                            
                            printf("固件清除完成!\r\n");   
                            LCD_ShowString(60,210,200,16,16,"APPErase Successed!");
                            applenth=0;
                     }else
                     {
                            printf("沒有可以清除的固件!\r\n");
                            LCD_ShowString(60,210,200,16,16,"NoAPP!");
                     }
                     clearflag=7;//標志更新了顯示,并且設置7*300ms后清除顯示                                                        
              }
              if(key==KEY_LEFT)
              {

了解完上面的教程以后,開始動手實踐,但問題來了:
1,必須找一個能打開bin文件的軟件,如用ultraedit
2,將純數據的二進制拷出來,然后用串口助手發送給單片機
3,發現升級失敗,后來發現從ultraedit里拷貝出來的數據每一行后面都有一個換行,所以拷貝到word里,將所有的換行去掉,因為一個換行就是一個字節,盡管在用串口助手的HEX方式發送時,看不到那個換行的字節,但是實驗發現,是多一個字節的。
4,具體操作如下:
第一步:按Ctrl + H
第二步:在“查找內容”后面,輸入:^p (注意,^就是數字6上面的那個符號,p是小寫的)
第三步:在“替換為”后面,不輸入任何內容。
第四步:點“全部替換”。
5,發現好使。


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 岛国毛片 | 精品国产高清一区二区三区 | 亚洲欧美激情国产综合久久久 | 色综合色综合色综合 | 日韩手机在线视频 | 天天草夜夜骑 | 99久久成人 | 国产亚洲精品美女久久久久久久久久 | 久久午夜国产精品www忘忧草 | 久久久久久成人 | 久久88| 欧美小视频在线观看 | 九九热国产精品视频 | 亚洲一二三区不卡 | 午夜视频在线视频 | 91麻豆精品国产91久久久久久 | 有码在线 | 国产亚洲精品精品国产亚洲综合 | 亚洲一区二区三区免费在线观看 | 国产特级毛片 | 天堂亚洲 | 在线资源视频 | 亚洲一区 中文字幕 | 人妖av| 夜夜爽99久久国产综合精品女不卡 | 91在线观看免费 | 午夜久久久久久久久久一区二区 | 99免费视频 | 日日摸天天添天天添破 | 久久伊人精品 | 欧美日韩在线免费 | 成人福利在线 | 亚洲精品第一页 | 国产精品一级在线观看 | 国产精品久久久乱弄 | 日韩一区二区三区视频 | 亚洲国产成人精品久久久国产成人一区 | 午夜精品久久久久久久99黑人 | 国产日韩一区二区三区 | 在线观看的av | 久久国产精品一区二区三区 |