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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

stm32f103單片機(jī)的串口IAP升級程序

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
#
使用stm32f103r8t6 實(shí)現(xiàn)IAP升級代碼精簡但是很實(shí)用
可以用來制作遠(yuǎn)程升級

單片機(jī)源程序如下:
  1. /*******************************************************************************
  2. ** 文件名:                 mian.c
  3. ** 版本:                  1.0
  4. ** 工作環(huán)境:         RealView MDK-ARM 4.14
  5. ** 作者:                 wuguoyana
  6. ** 生成日期:         2011-04-28
  7. ** 功能:                USART初始化和RCC設(shè)置,然后從common.c中執(zhí)行主菜單
  8. ** 相關(guān)文件:        stm32f10x.h

  9. *******************************************************************************/
  10. /* 包含頭文件 *****************************************************************/
  11. #include "common.h"
  12. #define USART1_IRQChannel            ((u8)0x25)  /* USART1 global Interrupt */
  13. /* 類型聲明 ------------------------------------------------------------------*/
  14. /* 宏 ------------------------------------------------------------------------*/
  15. #define LED2   GPIO_Pin_6
  16. #define LED3   GPIO_Pin_7
  17. #define LED4   GPIO_Pin_8
  18. #define LED5   GPIO_Pin_9

  19. #define TRUE        0xff
  20. #define FALSE        0x00

  21. /* 變量 ----------------------------------------------------------------------*/
  22. extern pFunction Jump_To_Application;
  23. extern uint32_t JumpAddress;

  24. /* 函數(shù)聲明 ------------------------------------------------------------------*/
  25. void Delay(__IO uint32_t nCount);
  26. void LED_Configuration(void);
  27. static void IAP_Init(void);
  28. void KEY_Configuration(void);
  29. void GPIO_Configuration(void);
  30. void USART_Configuration(void);
  31. unsigned char RCC_Configuration(void);
  32. void NVIC_Configuration(void);
  33. /* 函數(shù)功能 ------------------------------------------------------------------*/

  34. /*******************************************************************************
  35.   * @函數(shù)名稱        main
  36.   * @函數(shù)說明   主函數(shù)
  37.   * @輸入?yún)?shù)   無
  38.   * @輸出參數(shù)   無
  39.   * @返回參數(shù)   無
  40. *******************************************************************************/
  41. int main(void)
  42. {
  43.         //Flash 解鎖
  44.         FLASH_Unlock();
  45.         NVIC_Configuration();
  46.     LED_Configuration();
  47.     //配置按鍵
  48.     KEY_Configuration() ;
  49.     IAP_Init();
  50.     //按鍵是否按下
  51.     //if (GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_9)  == 0x00)
  52.     if (1)
  53.     {
  54.         //假如按鍵按下
  55.         //執(zhí)行IAP驅(qū)動程序更新Flash程序

  56.         SerialPutString("\r\n======================================================================");
  57.         SerialPutString("\r\n=                                                                    =");
  58.         SerialPutString("\r\n=     In-Application Programming Application  (Version 1.0.0)        =");
  59.         SerialPutString("\r\n=                                                                    =");
  60.         SerialPutString("\r\n======================================================================");
  61.         SerialPutString("\r\n\r\n");
  62.         Main_Menu ();
  63.     }
  64.     //否則執(zhí)行用戶程序
  65.     else
  66.     {
  67.         //判斷用戶是否已經(jīng)下載程序,因?yàn)檎G闆r下此地址是棧地址。
  68.         //若沒有這一句的話,即使沒有下載程序也會進(jìn)入而導(dǎo)致跑飛。
  69.         if (((*(__IO uint32_t*)ApplicationAddress) & 0x2FFE0000 ) == 0x20000000)
  70.         {
  71.             SerialPutString("Execute user Program\r\n\n");
  72.             //跳轉(zhuǎn)至用戶代碼
  73.             JumpAddress = *(__IO uint32_t*) (ApplicationAddress + 4);
  74.             Jump_To_Application = (pFunction) JumpAddress;

  75.             //初始化用戶程序的堆棧指針
  76.             __set_MSP(*(__IO uint32_t*) ApplicationAddress);
  77.             Jump_To_Application();
  78.         }
  79.         else
  80.         {
  81.             SerialPutString("no user Program\r\n\n");
  82.         }
  83.     }

  84.     while (1)
  85.     {

  86.     }
  87. }


  88. /*******************************************************************************
  89.   * @函數(shù)名稱        LED_Configuration
  90.   * @函數(shù)說明   配置使用LED
  91.   * @輸入?yún)?shù)   無
  92.   * @輸出參數(shù)   無
  93.   * @返回參數(shù)   無
  94. *******************************************************************************/
  95. void LED_Configuration(void)
  96. {
  97.     GPIO_InitTypeDef GPIO_InitStructure;
  98.     //使能LED所在GPIO的時(shí)鐘
  99.     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB , ENABLE);
  100.     //初始化LED的GPIO
  101.     GPIO_InitStructure.GPIO_Pin = LED4 | LED5;
  102.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  103.     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  104.     GPIO_Init(GPIOB, &GPIO_InitStructure);
  105.     GPIO_SetBits(GPIOB,LED4 | LED5);  //熄滅LED2-5
  106. }

  107. void NVIC_Configuration(void)
  108. {
  109.   NVIC_InitTypeDef NVIC_InitStructure;

  110.   /* Set the Vector Table base location at 0x08000000 */
  111.   NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x3000);   

  112.   /* Configure one bit for preemption priority */
  113.   NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
  114.   
  115.   /* Enable the EXTI8 Interrupt */
  116.   NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
  117.   NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  118.   NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  119.   NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  120.   NVIC_Init(&NVIC_InitStructure);
  121. }

  122. /*******************************************************************************
  123.   * @函數(shù)名稱        KEY_Configuration
  124.   * @函數(shù)說明   按鍵初始化
  125.   * @輸入?yún)?shù)   無
  126.   * @輸出參數(shù)   無
  127.   * @返回參數(shù)   無
  128. *******************************************************************************/
  129. void KEY_Configuration(void)
  130. {
  131.     GPIO_InitTypeDef GPIO_InitStructure;
  132.     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);

  133.     //配置按鍵
  134.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
  135.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
  136.     GPIO_Init(GPIOB, &GPIO_InitStructure);
  137. }

  138. /*******************************************************************************
  139.   * @函數(shù)名稱        GPIO_Configuration
  140.   * @函數(shù)說明   配置使用USART1的相關(guān)IO管腳
  141.   * @輸入?yún)?shù)   無
  142.   * @輸出參數(shù)   無
  143.   * @返回參數(shù)   無
  144. *******************************************************************************/
  145. void GPIO_Configuration(void)
  146. {
  147.     GPIO_InitTypeDef GPIO_InitStructure;
  148.         
  149.     RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA, ENABLE);
  150.     // 配置 USART1 Tx (PA.09) 作為功能引腳并上拉輸出模式
  151.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
  152.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  153.     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
  154.     GPIO_Init(GPIOA, &GPIO_InitStructure);

  155.     //配置 USART1 Tx (PA.10) 作為功能引腳并是浮空輸入模式
  156.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
  157.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  158.     GPIO_Init(GPIOA, &GPIO_InitStructure);
  159. }

  160. /*******************************************************************************
  161.   * @函數(shù)名稱        IAP_Init
  162.   * @函數(shù)說明   配置使用IAP
  163.   * @輸入?yún)?shù)   無
  164.   * @輸出參數(shù)   無
  165.   * @返回參數(shù)   無
  166. *******************************************************************************/
  167. void IAP_Init(void)
  168. {
  169.     USART_InitTypeDef USART_InitStructure;
  170.         GPIO_Configuration();

  171.     /* USART1 配置 ------------------------------------------------------------
  172.          USART1 配置如下:
  173.           - 波特率      = 115200 baud
  174.           - 字長        = 8 Bits
  175.           - 一個(gè)停止位
  176.           - 無校驗(yàn)
  177.           - 無硬件流控制
  178.           - 接受和發(fā)送使能
  179.     --------------------------------------------------------------------------*/
  180.     USART_InitStructure.USART_BaudRate = 115200;
  181.     USART_InitStructure.USART_WordLength = USART_WordLength_8b;
  182.     USART_InitStructure.USART_StopBits = USART_StopBits_1;
  183.     USART_InitStructure.USART_Parity = USART_Parity_No;
  184.     USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
  185.     USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;


  186.     USART_Init(USART1, &USART_InitStructure);
  187.     // 使能 USART1
  188.     USART_Cmd(USART1, ENABLE);
  189.         
  190. }

  191. /*******************************************************************************
  192.   * @函數(shù)名稱        Delay
  193.   * @函數(shù)說明   插入一段延時(shí)時(shí)間
  194.   * @輸入?yún)?shù)   nCount: 指定延時(shí)時(shí)間長度
  195.   * @輸出參數(shù)   無
  196.   * @返回參數(shù)   無
  197. *******************************************************************************/
  198. void Delay(__IO uint32_t nCount)
  199. {
  200.     for (; nCount != 0; nCount--);
  201. }

  202. #ifdef  USE_FULL_ASSERT

  203. /*******************************************************************************
  204.   * @函數(shù)名稱        assert_failed
  205.   * @函數(shù)說明   報(bào)告在檢查參數(shù)發(fā)生錯(cuò)誤時(shí)的源文件名和錯(cuò)誤行數(shù)
  206.   * @輸入?yún)?shù)   file: 源文件名
  207.                                   line: 錯(cuò)誤所在行數(shù)
  208.   * @輸出參數(shù)   無
  209.   * @返回參數(shù)   無
  210. *******************************************************************************/
  211. void assert_failed(uint8_t* file, uint32_t line)
  212. {
  213.     /* 用戶可以增加自己的代碼用于報(bào)告錯(cuò)誤的文件名和所在行數(shù),
  214.        例如:printf("錯(cuò)誤參數(shù)值: 文件名 %s 在 %d行\(zhòng)r\n", file, line) */

  215.     //死循環(huán)
  216.     while (1)
  217.     {
  218.     }
  219. }
  220. #endif



  221. /*******************************文件結(jié)束***************************************/
復(fù)制代碼

所有資料51hei提供下載:
STM32 IAP源碼和測試代碼.7z (248.23 KB, 下載次數(shù): 241)


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

使用道具 舉報(bào)

13#
ID:390701 發(fā)表于 2021-8-9 09:45 | 只看該作者
但是為什么只能更新一次,第二次后更新無效呢
回復(fù)

使用道具 舉報(bào)

12#
ID:584195 發(fā)表于 2021-8-6 18:12 | 只看該作者
學(xué)習(xí)了,希望以后可以用得上!
回復(fù)

使用道具 舉報(bào)

11#
ID:390701 發(fā)表于 2021-8-6 16:19 | 只看該作者
老農(nóng)要進(jìn)城 發(fā)表于 2020-7-3 16:01
Main_Menu ();函數(shù)定義那里去啦?

if(1)打印輸出下面
回復(fù)

使用道具 舉報(bào)

10#
ID:390701 發(fā)表于 2021-8-6 16:18 | 只看該作者
nice,可以運(yùn)行
回復(fù)

使用道具 舉報(bào)

9#
ID:334749 發(fā)表于 2020-7-3 16:01 | 只看該作者
Main_Menu ();函數(shù)定義那里去啦?
回復(fù)

使用道具 舉報(bào)

8#
ID:68585 發(fā)表于 2019-9-16 14:26 | 只看該作者
這個(gè)很好,做個(gè)標(biāo)記
回復(fù)

使用道具 舉報(bào)

7#
ID:371270 發(fā)表于 2019-9-9 15:00 | 只看該作者
好東西但是我編譯出來一堆錯(cuò)誤www
回復(fù)

使用道具 舉報(bào)

6#
ID:445069 發(fā)表于 2019-6-11 09:57 | 只看該作者
stm32f103串口IAP升級程序,這個(gè)必須頂!
回復(fù)

使用道具 舉報(bào)

5#
ID:56855 發(fā)表于 2019-5-23 21:27 | 只看該作者
還不錯(cuò)
回復(fù)

使用道具 舉報(bào)

地板
ID:285194 發(fā)表于 2019-4-12 10:30 | 只看該作者
已經(jīng)改好了,我是部分和樓主不符合的相關(guān).c和.h文件替換掉,再在APP函數(shù)前面加了個(gè)__set_PRIMASK(0);全局中斷開啟,終于調(diào)通了?希望樓主看到信息能夠回復(fù)一下,是不是你的文件里面,某些固件庫有改動某些信息,謝謝樓主的教程。
回復(fù)

使用道具 舉報(bào)

板凳
ID:285194 發(fā)表于 2019-4-11 14:43 | 只看該作者
你那邊的程序我也已經(jīng)改成 0x8010000的了
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:285194 發(fā)表于 2019-4-11 14:42 | 只看該作者
你好樓主,有個(gè)問題想請問一下,你給的例程我能夠運(yùn)行成功,但是換了我自己本身的程序后,能夠燒寫進(jìn)去,但是不能夠運(yùn)行,好像卡死一樣,這是我的一些基本程序

1.png (9.99 KB, 下載次數(shù): 130)

1.png

2.png (19.68 KB, 下載次數(shù): 131)

2.png

3.png (24.61 KB, 下載次數(shù): 122)

3.png
回復(fù)

使用道具 舉報(bào)

樓主
ID:110257 發(fā)表于 2019-4-5 06:48 | 只看該作者
IAP 空間最少能做到多少?
回復(fù)

使用道具 舉報(bào)

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 欧美精品福利 | 亚洲成人精品一区 | 狠狠撸在线视频 | 不卡一区二区三区四区 | 国产97在线视频 | 四虎在线观看 | 成人av一区二区亚洲精 | 视频二区 | 国产一区亚洲 | 天天操天天摸天天爽 | 欧美亚洲第一区 | 久久久夜夜夜 | 中文字字幕在线中文乱码范文 | 精品日韩一区二区三区av动图 | 欧美激情综合色综合啪啪五月 | 欧美一区二区大片 | 一级毛片免费看 | av天天看 | 一级全黄少妇性色生活免费看 | 野狼在线社区2017入口 | 欧美在线视频a | 日本精品久久久久久久 | 中文字幕一级毛片视频 | 亚洲风情在线观看 | 成人三级在线播放 | 国产精品久久久久久一区二区三区 | 91.com在线观看 | 一本大道久久a久久精二百 国产成人免费在线 | 狠狠色综合久久丁香婷婷 | 人人做人人澡人人爽欧美 | 精品久久久久久亚洲综合网 | 亚洲免费视频在线观看 | 777zyz色资源站在线观看 | 欧美综合精品 | 日韩欧美亚洲 | 欧美日韩精品专区 | 欧美在线天堂 | 欧美日韩亚洲视频 | 国产精品久久久久久久久久久久久 | 国产精品精品视频一区二区三区 | 久久不射电影网 |