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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

STM32-IAP項目代碼 使用中

[復制鏈接]
跳轉到指定樓層
樓主
項目中正在使用的 STM32系列單片機 的遠程IAP使用方式,從此刷機不用再拆機!

單片機源程序如下:
  1. /*******************************************************************************
  2. ** 功能:         遠程燒寫程序的啟動文件
  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.   * @函數名稱        main
  15.   * @函數說明 主函數
  16.   * @輸入參數 無
  17.   * @輸出參數 無
  18.   * @返回參數 無
  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;//關閉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. //        //系統時基啟動
  71. //       // SysTick_Init();
  72. //               
  73. //                led_on();

  74.          while (1)
  75.         {
  76.             Communication();
  77.         }
  78.     }
  79.     //否則執行用戶程序
  80.     else
  81.     {
  82.         //判斷用戶是否已經下載程序,因為正常情況下此地址是棧地址。
  83.         //若沒有這一句的話,即使沒有下載程序也會進入而導致跑飛。
  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. //**說 明:中斷優先級初始化
  120. //**形 參:無
  121. //**返 回 值:無
  122. //************************************************************************************************
  123. void NVIC_Configuration (void)
  124. {
  125.     NVIC_InitTypeDef NVIC_InitStructure;
  126.    
  127.     NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //4個搶占優先級,4個從優先級
  128.     /* Configure the SysTick handler priority */
  129.     NVIC_SetPriority(SysTick_IRQn, 0);//SysTick中斷優先級設置 //非實時任務優先級最低 3,0
  130.     Set_NVIC(USART2_IRQn , 2, 0,ENABLE) ;
  131. }
  132. /*******************************文件結束***************************************/
復制代碼

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


評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

板凳
ID:366899 發表于 2019-6-11 14:59 來自手機 | 只看該作者
很不錯
回復

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 中文字幕日韩欧美一区二区三区 | av av在线| 欧美日韩国产精品一区二区 | 亚洲日本视频 | 国产一区二| 色婷婷久久久久swag精品 | 欧美1页 | 成人av高清在线观看 | 岛国av一区二区 | 日韩成人专区 | 91www在线观看 | 亚洲色图第一页 | 中文字幕不卡在线观看 | 久久精品亚洲欧美日韩久久 | 中文字幕视频在线免费 | 网站国产 | 一区二区中文 | 欧美三级电影在线播放 | 奇米在线 | 亚洲福利一区 | 欧美成人h版在线观看 | 久久成人人人人精品欧 | 国产精品亚洲一区 | 999久久久| 精品日韩| 日韩久久久久久久 | 久久亚| 亚洲精品视频在线 | 久久久久成人精品亚洲国产 | 国产成人免费视频网站高清观看视频 | 日本久久精 | 欧美日韩在线精品 | 亚洲高清视频一区二区 | 国产精品亚洲一区 | 日韩成人免费视频 | 日韩在线三级 | www.久久99| 不卡一区二区三区四区 | 色综合天天天天做夜夜夜夜做 | 少妇精品亚洲一区二区成人 | 久久综合香蕉 |