為了調試下載方便,個人整理了一份IAP_BOOT下載引導代碼。在STM32F103上使用。
下載波特率可以設置2MHz的速度,下載程序超級快,使用341 USB轉串口已經在使用。
(1),IAP_BOOT使用STM32串口下載軟件下載到STM32芯片里。
(2),進入燒寫條件
1、第一燒寫,應用程序為空,自動進入程序下載狀態。
2,上電PA2管腳判斷進入。
3,應用程序跳轉進入。(思維為向內存寫人某個值,然后軟件復位,boot檢測內存值)
單片機源程序如下:
- #include "sys.h"
- #include "delay.h"
- #include "usart.h"
- #include "stmflash.h"
- #include "iap.h"
- #include "key.h"
- int main(void)
- {
- u16 oldcount=0; //老的串口接收數據值
- u16 applenth=0; //接收到的app代碼長度
- char ready = 0;
-
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//設置系統中斷優先級分組2
- delay_init(168); //初始化延時函數
- // USART3_Init(115200); //初始化串口波特率為460800
- USART6_Init(115200);
- // KEY_Init();
-
- while(1)
- {
- if(ready == 0)
- {
- printf("等待接收bin文件......\n");
- ready = 1;
- }
- if(USART_RX_CNT)
- {
- delay_ms(10);
- if(oldcount==USART_RX_CNT)//新周期內,沒有收到任何數據,認為本次數據接收完成.
- {
- applenth=USART_RX_CNT;
- oldcount=0;
- USART_RX_CNT=0;
- printf("用戶程序接收完成!\r\n");
- printf("代碼長度:%dBytes\r\n",applenth);
- if(((*(vu32*)(0X20001000+4))&0xFF000000)==0x08000000)//判斷是否為0X08XXXXXX.
- {
- printf("開始更新固件...\r\n");
- iap_write_appbin(FLASH_APP1_ADDR,USART_RX_BUF,applenth);//更新FLASH代碼
- printf("固件更新完成!\r\n");
- if(((*(vu32*)(FLASH_APP1_ADDR+4))&0xFF000000)==0x08000000)//判斷是否為0X08XXXXXX.
- {
- while(KEY == 0)
- {
- iap_load_app(FLASH_APP1_ADDR);//執行FLASH APP代碼
- }
- }
- else
- printf("非FLASH應用程序,無法執行!\r\n");
- }
- else
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
IAP_Bootloader.rar
(3.75 MB, 下載次數: 130)
2017-11-7 09:40 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|