91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

資源簡介

包含IAP.c和IAP.h;
IAP串口初始化函數;
串口中斷函數;
IAP循環main函數(可參考);
IAP跳轉應用程序段函數;
更新用戶程序,寫入FLASH函數;
STM32L4xx系列,STM32L452RET6調試成功,LL庫配置;
2019/11/20 后期調了STM32L471VETx芯片,發現擦頁不能用,最終找到問題是FLASH頁碼不連號,只用修改擦頁函數的頁碼號就可以成功擦頁,就不再上傳了;

資源截圖

代碼片段和文件信息

#define?IAP_MAIN

#include?“IAP.h“

uint32_t?iapbuf[512];//緩存
pFunction?JumpToApplication;
u8 USART3_RxData[USART3_Rx_LEN]?__attribute__((at(SaveAddress)));//串口接收緩存

/***************************************************************************************
**?函數名稱:?iap_write_appbin
**?功能描述:?更新用戶程序,寫入FLASH
**?參????數:?appxaddr:應用程序的起始地址
** ?appbuf:應用程序CODE
** ?appsize:應用程序大小(字節)
**?返?回?值:?None???????
****************************************************************************************/
void?iap_write_appbin(u32?appxaddr?u8?*appbuf?u32?appsize)
{
u32?t?=?0;
u16?i?=?0;
u32?temp?=?0;
u32?fwaddr?=?appxaddr;//當前寫入的地址
u8?*dfu?=?appbuf;
for(t=0;?t {
temp?=?(u32)dfu[3]<<24;
temp?|=?(u32)dfu[2]<<16;
temp?|=?(u32)dfu[1]<<8;
temp?|=?(u32)dfu[0];
dfu+=4;//偏移4個字節
iapbuf[i++]?=?temp;
if(i==512)
{
i?=?0;
FLASH_WriteMoreData(fwaddr?iapbuf?512);
fwaddr+=2048;//偏移2048 512*4=2045
}
}
if(i)
FLASH_WriteMoreData(fwaddr?iapbuf?i);//將最后的內容寫入
}

/***************************************************************************************
**?函數名稱:?iap_load_app
**?功能描述:?跳轉到應用程序段
**?參????數:?appxaddr 用戶代碼起始地址
**?返?回?值:?None???????
****************************************************************************************/
void?iap_load_app(u32?appxaddr)
{
uint32_t?jump2app;

__disable_irq();//關閉總中斷
if?(((*(__IO?uint32_t*)appxaddr)?&?0x2FFE0000?)?==?0x20000000)//檢查棧頂地址是否合法
{
jump2app?=?*(__IO?uint32_t*)?(appxaddr?+?4);//用戶代碼區第二個字節為程序開始地址(復位地址)
JumpToApplication?=?(pFunction)?jump2app;
__set_MSP(*(__IO?uint32_t*)?appxaddr);//初始化用戶程序的堆棧指針(用戶代碼區的第一個字用于存放棧頂指針)
JumpToApplication();//跳轉到APP
}
}

/***************************************************************************************
**?函數名稱:?IAP_Usart_Init
**?功能描述:?IAP串口初始化
**?參????數:?BaudRate?波特率
**?返?回?值:?None???????
****************************************************************************************/
void?IAP_Usart_Init(uint32_t?BaudRate)
{
??LL_GPIO_InitTypeDef?GPIO_InitStruct;
LL_USART_InitTypeDef?USART_InitStruct;

??LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_USART3);//串口時鐘使能

//USART3引腳配置
??GPIO_InitStruct.Pin =?LL_GPIO_PIN_4?|?LL_GPIO_PIN_5;//TX:PC4 RX:PC5
??GPIO_InitStruct.Mode =?LL_GPIO_MODE_ALTERNATE;//復用模式
??GPIO_InitStruct.Speed =?LL_GPIO_SPEED_FREQ_VERY_HIGH;//高速
??GPIO_InitStruct.OutputType =?LL_GPIO_OUTPUT_PUSHPULL;//推挽輸出
??GPIO_InitStruct.Pull =?LL_GPIO_PULL_UP;//上拉
??GPIO_InitStruct.Alternate =?LL_GPIO_AF_7;//復用模式7
??LL_GPIO_Init(GPIOC?&GPIO_InitStruct);//初始化引腳配置

//USART3配置
USART_InitStruct.BaudRate =?BaudRate;//波特率
??USART_InitStruct.DataWidth? =?LL_USART_DATAWIDTH_9B;//9字節
??USART_InitStruct.StopBits? =?LL_USART_STOPBITS_1;//1位停止位
??USART_InitStruct.Parity? =?LL_USART_PARITY_EVEN;//偶校驗
??USART_InitStruct.TransferDirection? =?LL_USART_DIRECTION_TX_RX;//開啟TX、RX
??USART_InitStruct.HardwareFlowControl =?LL_

?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----

?????文件???????5271??2019-10-31?13:00??STM32L4xx_通過UART寫FLASH_IAP更新程序_LL庫配置\IAP.c

?????文件???????2731??2019-11-02?13:02??STM32L4xx_通過UART寫FLASH_IAP更新程序_LL庫配置\IAP.h

?????目錄??????????0??2019-11-02?12:56??STM32L4xx_通過UART寫FLASH_IAP更新程序_LL庫配置

-----------?---------??----------?-----??----

?????????????????8002????????????????????3


評論

共有 條評論