当前位置:首页 > 实用技巧 >

flash跳转多个场景代码(flash场景跳转按钮设置动作)

来源:原点资讯(www.yd166.com)时间:2023-11-12 23:22:04作者:YD166手机阅读>>

STM32F103程序存储为Flash,支持在线读写以及擦除。Flash写的特性为:先要按照页擦除,擦除之后每个字节的数值为0xFF,然后才能对Flash进行写操作。读的特性倒是没有特殊的要求,可以直接读。

STM32的HAL库里面有Flash的写操作以及擦除操作的,这就为我们Firmware Update提供了便利。

上面两篇文章详细叙述了如何为了Firmware升级建立BootLoader(如果没有思路的,可以看看我的这两篇文章)。BootLoader和Application的相互可以通过上述方式实现,那么具体的Firmware的操作(即Flash的擦除与写操作)是怎么弄的呢?

首先是Flash的擦除,见下面代码:

#define APP_FLASH_ADDR_START_INDEX (0x8008000) #define APP_FLASH_ADDR_END_INDEX (0x8080000) #define FLASH_PAGE_SIZE_USER (0x800) USBD_StatusTypeDef USB_Erese_Flash() //USB 接口调用的擦除Flash,返回值为USB状态 { FLASH_EraseInitTypeDef pEraseInit; // HAL 库定义的擦除句柄 uint32_t PageError = 0; pEraseInit.NbPages = (APP_FLASH_ADDR_END_INDEX-APP_FLASH_ADDR_START_INDEX)/FLASH_PAGE_SIZE_USER;//定义要擦除的页数,每页为2K Bytes pEraseInit.PageAddress = APP_FLASH_ADDR_START_INDEX; //定义开始地址 pEraseInit.TypeErase = FLASH_TYPEERASE_PAGES;//定义擦除类型为页擦除 if(HAL_FLASHEx_Erase(&pEraseInit, &PageError)!=HAL_OK) //直接调用Flash 擦除库函数 { return USBD_FAIL; } return USBD_OK; }

写操作的代码如下:(仍然有库函数作为基本的调用)

//*src Flash数据的来源数组,addr 要更新的地址,Length 数据长度(byte长度) USBD_StatusTypeDef USB_Write_Flash(uint8_t *src,uint32_t addr,uint32_t length) { uint32_t index; for(index=0;index<length;index=index 4) { //4个Byte一起更新,因为STM32为32位单片机,32位的操作是默认的。 if(HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, addr index, *(uint32_t*)(src index))==HAL_OK) { //可以增加读取然后比较的函数,这样就可以确定Flash上的数据时对的。 //我的应用场景中会在最后对Flash进行CRC校验,因此这一步会省掉,后面文章会详细叙述 } else { return USBD_FAIL; } } return USBD_OK; }

这样只需要调用上面的两个函数就可以对Flash进行基本的更新操作了。

另外需要提醒一下,STM32的Flash擦除和写操作的时候需要对其进行解锁,如下面代码:

USBD_StatusTypeDef USB_Init_Flash() { HAL_FLASH_Unlock();//Flash操作的解锁 __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_EOP|FLASH_FLAG_WRPERR|FLASH_FLAG_PGERR);//清除相关标志位 return (USBD_OK); }

最后再说明一点,Flash的解锁,写和擦除操作上面代码都已经有叙述,那么读操作呢?

如下:

#define Flash_Addr 0x8008000 uint32_t device_flash_data= *(__IO uint32_t *)(Flash_Addr);//直接对该地址数据进行读取

这就是所有对Flash的操作,加上我上文提到的实现BootLoader以及之前文章中分享的USB HID接口实现,其实,现在已经可以实现STM32 Flash的自定义升级了。我后面的文章就将其总结完善,敬请期待。

,

栏目热文

flash引导层跟踪路径(在flash中怎样添加引导层)

flash引导层跟踪路径(在flash中怎样添加引导层)

上海flash动画制作在行业中具有重要的价值,被广泛应用到教学课件、产品广告、公益宣传等领域当中,获得了众多的喜爱与认可...

2023-11-12 23:41:13查看全文 >>

flash测试场景可以执行脚本动作吗(flash中不能够对场景执行的操作)

flash测试场景可以执行脚本动作吗(flash中不能够对场景执行的操作)

实现原理:1.通过导入物体到舞台上,转换为影片剪辑元件;2.通过动画的制作让物体左右晃动;3.通过代码的写入实现物体由键...

2023-11-12 23:33:04查看全文 >>

flash点击按钮跳帧(flash添加按钮直接跳到第二帧)

flash点击按钮跳帧(flash添加按钮直接跳到第二帧)

移动版Flash之所以会有如此落寞的结局,有以下两方面深层次的原因所造成。1.缺乏跨平台的支持。苹果公司拒绝旗下产品兼容...

2023-11-12 23:39:57查看全文 >>

flash动作命令跳转场景(flash怎么跳转下一个场景)

flash动作命令跳转场景(flash怎么跳转下一个场景)

如果你是初学者或者是对英文不熟的话可以用这个办法,flash中把命令列表区域打开会把剪头往下打开就会出现子项目,在上边鼠...

2023-11-12 23:53:43查看全文 >>

flash引导层控制几个对象(flash中的引导层可起到什么作用)

flash引导层控制几个对象(flash中的引导层可起到什么作用)

1. 默认文件名:未命名-12. 软件的功能:动画制作3. 扩展名:fla4. 文档属性:选择“修改”-“文档”命令5....

2023-11-12 23:26:09查看全文 >>

手机屏常亮关不掉怎么办(手机一直亮屏关不了怎么办)

手机屏常亮关不掉怎么办(手机一直亮屏关不了怎么办)

自从苹果14pro上市以来,许多用户发现了一个问题:手机屏幕会一直亮着,即使没有任何通知或亮屏操作。但是,这也带来了一些...

2023-11-12 23:27:03查看全文 >>

手机一直亮屏关不了怎么办(手机一直亮屏关不掉)

手机一直亮屏关不了怎么办(手机一直亮屏关不掉)

内存不足导致死机:经常清理内存,关闭不必要的后台运行程序,让手机保持最佳状态操作不当导致黑屏:尽量不要同时打开很多软件,...

2023-11-12 23:45:18查看全文 >>

手机突然关不了屏一直亮着怎么办(手机屏幕关不了一直亮怎么关屏幕)

手机突然关不了屏一直亮着怎么办(手机屏幕关不了一直亮怎么关屏幕)

还是一个粉丝在HUE灯光系统下的留言:既然答应了人家,就赶紧把文章写出来吧。先说一下这件事的立意,iN一直这样认为——电...

2023-11-13 00:04:30查看全文 >>

秘密星球官网(秘密大米星球)

秘密星球官网(秘密大米星球)

兔年新春,田林社区党群服务中心的“知嘛”科学探究营又开营了。这一次,“知嘛”带着社区的孩子们一起“流浪月球”。孩子们喜欢...

2023-11-12 23:59:38查看全文 >>

秘密星球怎么加好友(秘密星球怎么加回好友)

秘密星球怎么加好友(秘密星球怎么加回好友)

社交测评|总有一款最适合你的社交软件 还在为朋友圈太窄而发愁? 三个人斗地主都叫不齐? 你该交交朋友出去走走啦! 安利几...

2023-11-12 23:44:06查看全文 >>

文档排行