日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

远程升级stm32程序_STM32IAP远程升级带C#上位机

發布時間:2024/10/12 C# 107 豆豆
生活随笔 收集整理的這篇文章主要介紹了 远程升级stm32程序_STM32IAP远程升级带C#上位机 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

關注“電子芯吧客” 每周都有精彩文章推薦

????在很多場景應用中需要我們的控制器能夠實現遠程升級,比如我之前做的一個項目中,項目的主要需求就是老師的電腦能夠獲取學生的實驗設備的實驗數據。第一批測試完成之后,所有的學生設備的主控板子都上線了。運行了大概一個月,買家那邊發現有些功能需要更新。沒辦法只能把這批100多塊主控板從學生設備的機箱里面拆出來,然后一塊一塊燒寫好程序之后,再裝回去。這個時候就很后悔當初沒有把IAP遠程升級的功能加到這里面去。加了這個功能一方面好和買家談價錢,另一方面方便自己。

? ? IAP的大概意思就是在自己目前運行的程序中,對用戶的另外部分內存進行燒寫,燒寫完成之后,再跳轉到燒寫好的那一部分程序(也就是升級之后的程序)當中。所以這里面大概需要了解的是

1、STM32的ROM起始地址以及ROM大小;

2、STM32對flash的讀寫;

3、程序中斷的指針偏移等。

? ? 要實現IAP遠程升級,程序包含兩部分

1、IAP跳轉程序;

2、APP運行程序。

大致思路為:程序開始從IAP進入,IAP中判斷是否有收到升級包,如果沒有升級包跳轉到APP程序。有則燒寫新的升級包。跳轉至APP程序后,APP程序完成我們項目需求的功能,并加上一個跳轉回IAP的指令。

? ? 上位機程序中,將固件分包為2K一包,包頭加上0X5A的固定頭,以及長度字符(以0xA5為結尾標志),0xaa為包尾。IAP程序從0x08000000-0x08010000,APP從0x0801000開始。

? ? 下面為IAP的主函數,IAP程序從0x08000000開始,主要設置了串口1、按鍵、LED燈,以及延遲函數。程序采用串口1接收升級的固件包。當接收到數據時,先判斷包頭和包尾是否正確。再將分包放入待燒寫的數組中,燒寫后,燒寫的位置 Flash_App_Pos 也相應的增加剛才接收的升級包的長度(去除了包頭包尾)。待接收到0xA5的包時,表示接收到最后的一包升級分包。接收完成后,燒寫成功后,即可開啟跳轉。因篇幅問題,將程序中的1分鐘未接收到升級包便跳轉至APP程序略去。程序如下:

函數主要有設置偏移的語句? SCB->VTOR = FLASH_BASE; //@@* Vector Table Relocation in Internal FLASH. */FLASH_BASE=0X08000000;

int main(void)
?{?? ?
?? ?u8 t,half_s;
?? ?u8 times=0;
?? ?u16 oldcount=0;?? ??? ??? ??? ??? ??? ?//老的串口接收數據值
?? ?u16 applenth=0;?? ??? ??? ??? ??? ??? ?//接收到的app代碼長度
?? ?u16 buf=0;
?? ?u8 CodeSize;?
?? ?u16 i;?
?? ?SCB->VTOR = FLASH_BASE; /@@* Vector Table Relocation in Internal FLASH. */?? ??
?? ?delay_init();
?? ?uart_init(115200);
?? ?LED_Init();
?? ?KEY_Init();
?? ?STMFLASH_Read(CONFIG_PARAM_ADDR, &buf, 1);
?? ?if(buf!=0xAA)
?? ?{?? ?
?? ???if(((*(vu32*)0x8000000)&0x2FFE0000)==0x20000000)?? ?//檢查棧頂地址是否合法.
?? ???? {
?? ??? ?delay_init();
?? ??? ?uart_init(115200);
?? ??? ?LED_Init();
?? ??? ?KEY_Init();
?? ??? }
?? ?}
?? __enable_irq(); ??? ??? ?
? while(1)
?? ?{?? ??? ?
?? ?if(USART_RX_CNT)
?? ?{
?? ?????if(oldcount==USART_RX_CNT)//新周期內,沒有收到任何數據,認為本次數據接收完成.
?? ??? ?{
?? ??? ??? ?applenth=USART_RX_CNT;
?? ??? ??? ?if(USART_RX_BUF[0]==0x5a&&USART_RX_BUF[applenth-1]==0xaa)
?? ??? ??? ?{
?? ??? ??? ??? ?LED0=0;?? ?
?? ??? ??? ??? ?for(i=0;i?? ??? ??? ??? ?{
?? ??? ??? ??? ??? ?Upstring[i]=USART_RX_BUF[i+2];
?? ??? ??? ??? ?}?? ?
?? ??? ??? ??? ?LED0=1;
?iap_write_appbin(Flash_App_Pos,Upstring,applenth-3);//更新FLASH代碼?? ??? ??? ??? ??? ?
?? ??? ??? ??? ?Flash_App_Pos+=(applenth-3);?? ??? ??? ??? ?
?? ??? ??? ??? ?backdata[1]=USART_RX_BUF[1];
?? ??? ??? ??? ?Usart1_SendStr_length(backdata,3);
?? ??? ??? ??? ? if(USART_RX_BUF[1]==0xa5)
?? ??? ??? ??? ?{
?? ??? ??? ??? ???? iap_load_app(FLASH_APP1_ADDR);//執行FLASH APP代碼FLASH_APP1_ADDR=0X08010000
?? ??? ??? ??? ?}?? ??? ??? ??? ??? ?
?? ??? ??? ?}?? ??? ??? ??? ?
?? ??? ??? ?oldcount=0;
?? ??? ??? ?USART_RX_CNT=0;?? ??? ??? ??? ??? ??? ??? ?
?? ??? ?}else oldcount=USART_RX_CNT;?? ??? ??? ?
?? ?}
?? ?t++;
?? ?delay_ms(100);
?}
}

IAP程序點開魔法棒設置size為0x10000.

APP程序主要采用了FreeRTOS操作系統,創建了LED翻轉的任務,串口1接收到數據之后之后處理的任務,以及看門狗喂狗任務。同樣在程序開始時,需要設置偏移。
NVIC_SetVectorTable(FLASH_APP1_ADDR,0);
串口接收到0XAA,0XBB,0XCC,0XDD,0XEE。的跳轉回IAP的指令之后,便寫入config之后,開始跳轉。跳轉前,關閉所有中斷,并清除標志位。
程序如下:

總結

以上是生活随笔為你收集整理的远程升级stm32程序_STM32IAP远程升级带C#上位机的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 波多野结衣av一区二区全免费观看 | 日本系列第一页 | 欧美变态口味重另类在线视频 | 日韩精品中文字幕在线播放 | 日韩视频一二三区 | 欧美美女性生活 | 欧美a视频在线观看 | 国产综合亚洲精品一区二 | 亚洲黄片一区二区 | 欧美一区二区三区免费在线观看 | 婷婷成人av| 午夜在线观看av | 亚洲欧美日本一区 | 亚洲av无码一区二区三区观看 | 久久无码性爱视频 | √天堂资源地址在线官网 | 按摩ⅹxxx性hd中国 | 欧美夫妇交换xxx | 亚洲av成人精品一区二区三区 | yy111122少妇光屁股影院 | 精品无码一区二区三区在线 | 亚洲人午夜精品 | 国产精品国产av | 亚洲夜夜操 | 亚洲成人1区 | 五月av| 在线免费不卡视频 | 色淫湿视频 | 国产私拍视频 | 国产黄色av网站 | 双性人bbww欧美双性 | 国产不卡精品 | 在线视频精品一区 | 噼里啪啦免费看 | 成年人在线视频免费观看 | 先锋av资源网| 亚洲天堂岛 | 欧美久久久久久久久久 | 成年人免费在线观看视频网站 | 日日碰| 夜夜操天天| 伊人影院综合 | 欧美多人猛交狂配 | 日本呦呦| 亚洲精品乱码久久久久久蜜桃动漫 | 高清成人免费视频 | 国产美女自慰在线观看 | 在线免费av网址 | 免费毛片基地 | 黄网在线观看视频 | 亚洲免费观看高清完整版在线 | 91蜜桃在线| 尤物视频在线观看免费 | 免费看黄色的网站 | 欧美有码视频 | 亚洲最大成人在线视频 | 久久人人爽爽 | 少妇无码吹潮 | 日韩精品一区二区在线看 | 免费久久一级欧美特大黄 | 国产精品羞羞答答在线观看 | 成人av观看 | 免费在线看污视频 | 极品蜜桃臀肥臀-x88av | 老熟妇午夜毛片一区二区三区 | 一级国产黄色片 | 国产主播专区 | 高潮一区二区三区 | jizz18国产 | 久久久网站 | 性欧美在线视频 | 欧美jizzhd欧美18 | 美女又黄又免费的视频 | 国产一区二区三区欧美 | 自拍偷拍21p | 暖暖av在线| 免费看a毛片 | 女人扒开屁股让男人桶 | 黄色xxxxx | 欧美福利视频在线观看 | 夜夜操网址 | 中国黄色一级大片 | 欧美男人天堂 | 日本一二三区在线 | av在线免费观看不卡 | 亚洲高清久久 | 国产精选视频 | 天天躁日日躁aaaaxxxx | 伊人网欧美 | 四虎国产成人永久精品免费 | av一区二区免费 | 一级黄色免费网站 | 亚洲国产成人精品一区二区三区 | 中国三级视频 | 成年人免费网站在线观看 | 国产精品v日韩精品v在线观看 | 娇妻被老王脔到高潮失禁视频 | 日韩综合一区二区三区 | 日韩电影一区二区三区四区 |