找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2782|回復(fù): 3
打印 上一主題 下一主題
收起左側(cè)

STM32-IAP項目代碼 使用中

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:523845 發(fā)表于 2019-4-28 17:57 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
項目中正在使用的 STM32系列單片機(jī) 的遠(yuǎn)程IAP使用方式,從此刷機(jī)不用再拆機(jī)!

單片機(jī)源程序如下:
  1. /*******************************************************************************
  2. ** 功能:         遠(yuǎn)程燒寫程序的啟動文件
  3. *******************************************************************************/
  4. #include "stm32boot.h"
  5. #include "EEPROM.h"
  6. /* 類型聲明 -----------------------------------------------------------------*/
  7. typedef void (*pFunction)(void);
  8. /* 變量 ----------------------------------------------------------------------*/
  9. pFunction Jump_To_Application ;
  10. uint32_t JumpAddress;
  11. #define ApplicationAddress 0x8003000
  12. void NVIC_Configuration(void);


  13. /*******************************************************************************
  14.   * @函數(shù)名稱        main
  15.   * @函數(shù)說明 主函數(shù)
  16.   * @輸入?yún)?shù) 無
  17.   * @輸出參數(shù) 無
  18.   * @返回參數(shù) 無
  19. *******************************************************************************/
  20. extern __IO unsigned long time32_incr;
  21. unsigned long portGetTickCnt(void)
  22. {
  23. //        time32_incr = SysTick->VAL;
  24.         return time32_incr;
  25. }

  26. void Sleep(unsigned int time_ms)
  27. {
  28.     unsigned long end = portGetTickCnt() + time_ms;
  29.     while ((signed long)(portGetTickCnt() - end) <= 0)
  30.         ;
  31. }



  32. void CloseIrq(void)
  33. {
  34.         SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk;//關(guān)閉SYSTICK中斷
  35.         DMA_ITConfig(DMA1_Channel7, DMA_IT_TC, DISABLE);       //使能DMA通道4傳輸完成中斷
  36.         DMA_ITConfig(DMA1_Channel7, DMA_IT_TE, DISABLE);
  37.         USART_ITConfig(USART2, USART_IT_IDLE, DISABLE);
  38.         USART_DeInit(USART2);
  39.         DMA_DeInit(DMA1_Channel7);
  40.         DMA_DeInit(DMA1_Channel6);
  41. }


  42. int main(void)
  43. {
  44.         int i=1200;
  45.         u16 FLAG = 0;
  46.   /* Enable PWR and BKP clocks */
  47.     RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE);
  48.   /* Allow access to BKP Domain */
  49.     PWR_BackupAccessCmd(ENABLE);
  50.     FLASH_Unlock();
  51.         UART2_Configuration();
  52.         SysTick_Init();
  53.         NVIC_Configuration();
  54.         Sleep(20);
  55.         printf("bootv2.0-20181210\r\n");
  56.         while (i--)
  57.         {
  58.                 Communication();
  59.                 Sleep(20);
  60.         }
  61.         eeprom_read_block(&FLAG, PROGRAMS_ADDR, 2);
  62.         
  63.    if (FLAG == 0xE0E0)
  64.    {

  65. //        DevAddr = 1;
  66. //        NVIC_Configuration();
  67. //        FLASH_Unlock() ;
  68. //        //串口初始化
  69. //        UART2_Configuration();0
  70. //        //系統(tǒng)時基啟動
  71. //       // SysTick_Init();
  72. //               
  73. //                led_on();

  74.          while (1)
  75.         {
  76.             Communication();
  77.         }
  78.     }
  79.     //否則執(zhí)行用戶程序
  80.     else
  81.     {
  82.         //判斷用戶是否已經(jīng)下載程序,因為正常情況下此地址是棧地址。
  83.         //若沒有這一句的話,即使沒有下載程序也會進(jìn)入而導(dǎo)致跑飛。
  84.                 FLASH_Lock();
  85.                
  86.         if (((*(__IO uint32_t*)ApplicationAddress) & 0x2FFE0000 ) == 0x20000000)
  87.         {
  88.             JumpAddress = *(__IO uint32_t*) (ApplicationAddress + 4);
  89.             Jump_To_Application = (pFunction) JumpAddress;
  90.             //初始化用戶程序的堆棧指針
  91.             __set_MSP(*(__IO uint32_t*) ApplicationAddress);
  92.                         printf("jump to app\r\n");
  93.                         CloseIrq();
  94.             Jump_To_Application();
  95.         }
  96.         else
  97.         {
  98.                         u16 data = 0xE0E0;
  99.             eeprom_write_block(&data, PROGRAMS_ADDR, 2);
  100.                         printf("no app wait program\r\n");
  101.             SoftReset();
  102.         }
  103.     }
  104.     while (1)
  105.     {
  106.     }
  107. }
  108. #define Set_NVIC(Channel,Preemption,Sub,Cmd) { NVIC_InitStructure.NVIC_IRQChannel = Channel; \
  109.                                                    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = Preemption; \
  110.                                                    NVIC_InitStructure.NVIC_IRQChannelSubPriority = Sub; \
  111.                                                    NVIC_InitStructure.NVIC_IRQChannelCmd = Cmd; \
  112.                                                    NVIC_Init(&NVIC_InitStructure); }

  113.                                                                                                    
  114.                                                                                                    
  115.                                                                                                    
  116.                                                 
  117. //************************************************************************************************
  118. //**名 稱:NVIC_Init
  119. //**說 明:中斷優(yōu)先級初始化
  120. //**形 參:無
  121. //**返 回 值:無
  122. //************************************************************************************************
  123. void NVIC_Configuration (void)
  124. {
  125.     NVIC_InitTypeDef NVIC_InitStructure;
  126.    
  127.     NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //4個搶占優(yōu)先級,4個從優(yōu)先級
  128.     /* Configure the SysTick handler priority */
  129.     NVIC_SetPriority(SysTick_IRQn, 0);//SysTick中斷優(yōu)先級設(shè)置 //非實時任務(wù)優(yōu)先級最低 3,0
  130.     Set_NVIC(USART2_IRQn , 2, 0,ENABLE) ;
  131. }
  132. /*******************************文件結(jié)束***************************************/
復(fù)制代碼

所有資料51hei提供下載:
STM32遠(yuǎn)程升級.7z (1.08 MB, 下載次數(shù): 33)


評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發(fā)
ID:445069 發(fā)表于 2019-6-11 10:11 | 只看該作者
正在學(xué)習(xí)STM32 IAP 在線升級!希望能有所借鑒!
回復(fù)

使用道具 舉報

板凳
ID:366899 發(fā)表于 2019-6-11 14:59 來自觸屏版 | 只看該作者
很不錯
回復(fù)

使用道具 舉報

地板
ID:288646 發(fā)表于 2019-9-26 16:00 | 只看該作者
不錯 不錯
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表