最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

STM32編寫bootloader用虛擬串口進行固件升級教程

2023-04-14 12:45 作者:m蛋蛋發(fā)番茄  | 我要投稿

????????最近在做用STM32編寫bootloader,網(wǎng)上查了很多資料,怕自己忘記了,這里做一個簡單的記錄,水平有限,怕以后自己忘記,也希望能夠幫助某些網(wǎng)友。

????????主控STM32RCT6具體步驟如下:

????????1、打開STM32Cube選擇固件,進行常規(guī)設置,格外打開虛擬串口。

設置晶振、打開UWB設備
打開虛擬串口
進行時鐘配置
這里紅框中一定需要設置大一些,不然無法識別虛擬串口
生成代碼后,一定要記住這兩個紅框內(nèi)的數(shù)值,便于劃分bootloader空間與APP空間

????上述紅框還需要記住一個原因是,up主在APP中少輸入了0,導致程序半天都無法執(zhí)行,排查了很久。

2、打開STM32Cube系統(tǒng)自帶實列IAP工程,可以參考Up主如下步驟:

通過系統(tǒng)自帶搜索進行查找,打開此工程
將圖中的.c及.h文件拷貝到自己工程中,這里.h拷貝未給出


開打工程文件,對Bootloader進行區(qū)域劃分,我程序沒有開代碼優(yōu)化,所以ROM和RAM占用較多,讀者可以自行增加或減少。(如果編著編者突然幾個白錯誤,則多半空間不足,增大此項)

其他的排查故障這里不多做贅述,這里主講代碼需要更改的地方

3、代碼更改


紅色的更換為自己所選芯片和自己規(guī)劃Bootloader區(qū)域的數(shù)值,我這里展示我所需要的空間

主函數(shù)主要調(diào)用mean()

主菜單函數(shù)

進入菜單函數(shù)需要做更改的有如下:

由于虛擬串口不能單一取值,寫了如下進行代替,time_out為等待時間鍵盤未輸入,則執(zhí)行APP

接收函數(shù)改動如下:

static int8_t CDC_Receive_FS(uint8_t* Buf, uint32_t *Len)

{

static int16_t i = 0;

static uint8_t old = 0;

? /* USER CODE BEGIN 6 */

? USBD_CDC_SetRxBuffer(&hUsbDeviceFS, &Buf[0]);

? USBD_CDC_ReceivePacket(&hUsbDeviceFS);

if(hUsbDeviceFS.rec_BIN)

{

if(old == 0)

{

if(Buf[0] == 0x01)

{

data_nums = PACKET_SIZE + PACKET_OVERHEAD_SIZE;

old = 1;

}

else if(Buf[0] == 0x02)

{

data_nums = PACKET_1K_SIZE + PACKET_OVERHEAD_SIZE;

old = 1;

}

else if(Buf[0] == EOT)

{

data_nums = 1;

old = 1;

}

}

if(data_nums != 0)

{

for(uint8_t temp = 0;temp < *Len;temp++)

{

buf_rec[i++] = *Buf++;

}

data_nums = data_nums - *Len;

if(data_nums <= 0)

{

hUsbDeviceFS.rec_BIN = 0;

i = 0;

old = 0;

data_nums = 0;

}

}

}

hUsbDeviceFS.USB_Rex_flag = 1;

? return (USBD_OK);

? /* USER CODE END 6 */

}

傳輸函數(shù)重新映射

將此函數(shù)中aPacketData全都更換至buf_rec。

COM_StatusTypeDef Ymodem_Receive ( uint32_t *p_size )更改
static HAL_StatusTypeDef ReceivePacket(uint8_t *p_data, uint32_t *p_length, uint32_t timeout)更改

static HAL_StatusTypeDef ReceivePacket(uint8_t *p_data, uint32_t *p_length, uint32_t timeout)更改

由于VPC是一下子全部進行取值,故宏定義需要做修改,具體修改如下:

#define PACKET_HEADER_SIZE? ? ? ((uint32_t)2)? ?// 3)

#define PACKET_DATA_INDEX? ? ? ?((uint32_t)3)? ?// 4)

#define PACKET_START_INDEX? ? ? ((uint32_t)0)? ?// 1)

#define PACKET_NUMBER_INDEX? ? ?((uint32_t)1)? ?// 2)

#define PACKET_CNUMBER_INDEX? ? ((uint32_t)2)? // 3)

#define PACKET_TRAILER_SIZE? ? ?((uint32_t)1)? ?// 2)

當程序下載完時,進行跳轉(zhuǎn),需要額外增加讓虛擬串口停止的指令,不然跳轉(zhuǎn)APP程序中可能使卡在USB串口中斷一直沒辦法出來。

增加USBD_Stop(&hUsbDeviceFS);防止APP中被占用中斷

4、APP中需注意事項

flash進入需要更換開始地址
中斷向量偏移必須要增加

這樣更改完,整個Bootloder和APP就更改完畢了,可以下載至芯片中進行測試。目前能想到的需要記錄的就這些了,如果遇到什么問題,可以進行留言,我看到會回復。

STM32編寫bootloader用虛擬串口進行固件升級教程的評論 (共 條)

分享到微博請遵守國家法律
老河口市| 神池县| 柘城县| 双鸭山市| 沾化县| 惠东县| 张家界市| 来安县| 扬中市| 德化县| 池州市| 友谊县| 准格尔旗| 隆林| 荔波县| 泸州市| 丰城市| 景德镇市| 如皋市| 浮山县| 德令哈市| 浏阳市| 子长县| 宁乡县| 玉门市| 东兰县| 抚远县| 葵青区| 昌乐县| 时尚| 偃师市| 九龙城区| 洛宁县| 云浮市| 孟村| 滕州市| 开化县| 天水市| 台州市| 青川县| 清河县|