请选择 进入手机版 | 继续访问电脑版
    查看: 289|回复: 8

    一个关于STM32 FLASH编程应用相关的话题

    [复制链接]

    6587

    主题

    6346

    帖子

    6359

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    6359
    基情
    8
    发表于 2016-8-28 21:16:34 | 显示全部楼层 |阅读模式


                                    近日在STMCU社区见到有人发帖咨询有关STM32 FLASH编程的问题,大意如下:

        “下面代码是stm32F1库函数中对flash写入一个字的函数部分,其中在给用u32表示的地址address赋值时,通过(_IO uint16_t*)将Address强制转换成了一个16位数的地址。很不理解为什么要转成16位的。实验改成32位后发现写入flash又不成功。很不理解,这是为什么?”

        FLASH_Status FLASH_ProgramWord(uint32_tAddress, uint32_t Data)

        {

         FLASH_Status status = FLASH_COMPLETE;

          __IOuint32_t tmp = 0;

         assert_param(IS_FLASH_ADDRESS(Address));

        #ifdef STM32F10X_XL

         if(Address  FLASH_BANK1_END_ADDRESS - 2)

          {

           status = FLASH_WaitForLastBank1Operation(ProgramTimeout);

           if(status == FLASH_COMPLETE)

            {

             FLASH-CR |= CR_PG_Set;

                *(__IO uint16_t*)Address =(uint16_t)Data;  /!!!质疑语句

             status = FLASH_WaitForLastOperation(ProgramTimeout);

                  ……

            印象中经常有人在做FLASH编程过程时出现类似发帖者谈及的问题。集中在两方面,第一是C语言相关知识,第二是STM32 FLASH编程方面的规则要点。

            C语言应用方面,有人在做FLASH编程时出现有关数据对齐、指针加减计算误解【本质还是对齐】等问题。具体体现在赋值时左右两边数据类型不一致;对指针P  的地址变化步长理解有误。比如定义uint32  * p 时,P  的地址变化步长为4 Byte,当定义uint16  * p 时,P  的地址变化步长则为2 Byte 时而误以为是1,诸如此类。当然这些也没啥难的,用几次就好。尤其有些人是从8位汇编指令转到C这边可能有点陌生也正常。

            发帖者的疑问是很不理解(_IO uint16_t*)Address这个操作,认为将Address强制转换成了一个16位数的地址。

            其实这是个误解,*(__IO uint16_t*)Address只是将Address强制转换为一个指针,该指针指向的数据对象为 uint16_t,并非Address转成16位了,Address本身数据类型并未变。

            另外,当他把*(__IO uint16_t*)Address改成*(__IO uint32_t*)Address 时,发现FLASH编程失败。这是因为STM32F1系列芯片FLASH编程时一次只能半字写入,即每次只能写一个16位数据,不支持一次写32位。关于这点STM32各系列间有些差异,在做各系列间的代码移植涉及到这部分时要注意。比方STM32F1支持半字写入,STM32L1系列支持程序代码的字写、半页写,STM32F4系列支持程序代码的字节、半字、字、双字的写入。具体的细节各个系列的FLASH编程手册里有详细描述。

            顺便提下,各STM32系列除了各自有份外设功能和寄存器描述的参考手册【referencemanual】外,还有两个编程手册【Programmingmanual】,一个基于FLASH的编程手册,该手册重点介绍FLASH或EEPROM编程细节。另一个是基于内核的编程手册,里面主要介绍CORTEX各内核框架、汇编指令、中断、调试等内容的介绍。

            我们知道FLASH编程除了常规数据写入外还有擦除动作,这个擦除动作都是按页来进行。不过要注意的是不同芯片间的FLASHPAGE大小可能不一样,在STM32不同芯片间做代码移植且涉及到这部分时也要注意。不然可能会发生这里能擦那里擦不掉的现象,当然这时候程序员往往还不知晓此处差异,还一个劲地往的地方找原因。

        总之,上面提到的这些小细节、小知识点,当你不知晓或者无视它们时,有时还是挺整人耗时的。分享出来希望大家在产品应用开发过程中多些顺畅,少些折磨。
           拇指长按上方精灵鸟识别图中二维码可关注公众号

                                                                            
    回复

    使用道具 举报

    0

    主题

    1

    帖子

    6

    积分

    新手上路

    Rank: 1

    积分
    6
    基情
    5
    发表于 2016-9-17 09:12:38 | 显示全部楼层
    鉴定完毕!












    专业代发帖子,网络推广,发帖宣传,产品推广,外链代发。
    __________论坛发帖价格____________
    联系QQ:188662616  微信号:188662616
    套餐一 80元500帖
    套餐二 100元1000帖
    套餐三 200元3000帖
    套餐四 300元6000帖
    套餐五 500元12000帖
    当天发完,提供详细报表,保证数量。
    包月:600元每天500帖共15000帖
    包月:800元每天1000帖共30000帖
    包月:1000元每天2000帖共60000帖
    包月:1500元每天3000帖共90000帖
    包月:2000元每天5000帖共150000帖
    包月:3000元每天10000帖共300000帖
    包月:5000元每天30000帖共900000帖
    联系QQ:188662616  微信号:188662616
    每天发完,提供详细报表。
    回复 支持 反对

    使用道具 举报

    0

    主题

    225

    帖子

    225

    积分

    中级会员

    Rank: 3Rank: 3

    积分
    225
    基情
    0
    发表于 2017-6-14 08:44:37 | 显示全部楼层
    回复 支持 反对

    使用道具 举报

    0

    主题

    225

    帖子

    225

    积分

    中级会员

    Rank: 3Rank: 3

    积分
    225
    基情
    0
    发表于 2017-6-15 15:42:05 | 显示全部楼层
    回复 支持 反对

    使用道具 举报

    0

    主题

    225

    帖子

    225

    积分

    中级会员

    Rank: 3Rank: 3

    积分
    225
    基情
    0
    发表于 2017-6-16 06:02:35 | 显示全部楼层
    回复 支持 反对

    使用道具 举报

    0

    主题

    1

    帖子

    1

    积分

    新手上路

    Rank: 1

    积分
    1
    基情
    0
    发表于 2017-6-28 14:28:38 | 显示全部楼层
    顶一个顶一个顶一个顶一个顶一个
    回复 支持 反对

    使用道具 举报

    0

    主题

    6

    帖子

    6

    积分

    新手上路

    Rank: 1

    积分
    6
    基情
    0
    发表于 2017-7-1 20:38:34 | 显示全部楼层
    好贴就是好贴哪 里 有 买 安 眠 药QQ  2388522917 出 售 安 乐 死 药
    回复 支持 反对

    使用道具 举报

    0

    主题

    12

    帖子

    12

    积分

    新手上路

    Rank: 1

    积分
    12
    基情
    0
    发表于 2017-7-6 18:36:48 | 显示全部楼层
    绝对喜欢,好帖子不多哦,顶一下
    回复 支持 反对

    使用道具 举报

    0

    主题

    4

    帖子

    4

    积分

    新手上路

    Rank: 1

    积分
    4
    基情
    0
    发表于 2017-7-13 03:30:42 | 显示全部楼层
    不错不错!!
    南昌旧房改造          wtjsn.com
    南昌酒店装修          wtjsn.com
    南昌设计公司          wtjsn.com
    南昌室内软装          wtjsn.com
    南昌配饰设计          wtjsn.com
    南昌尚品装饰          wtjsn.com
    江西中宅装饰          wtjsn.com
    南昌装修公司排名          wtjsn.com
    南昌别墅装修设计          wtjsn.com
    南昌别墅装修公司          wtjsn.com
    南昌别墅装修整体设计          wtjsn.com
    南昌十大装修公司排名          wtjsn.com
    南昌口碑最好的装饰公司          wtjsn.com
    江西家装公司          wtjsn.com
    江西装潢公司          wtjsn.com
    最好的家装公司          wtjsn.com
    南昌装饰公司哪家好          wtjsn.com
    江西装饰公司哪家好          wtjsn.com
    南昌装饰设计公司          wtjsn.com
    南昌最有名的装饰公司          wtjsn.com
    江西最好的装饰公司           wtjsn.com
    登品装饰          prflt.com/
    苹果装饰          prflt.com/
    天品装饰          prflt.com/
    一号家居网          prflt.com/
    志远装饰          prflt.com/
    雅美居装饰          prflt.com/
    南泰装饰          prflt.com/
    星驰装饰          prflt.com/
    星艺装饰          prflt.com/
    新传奇装饰          prflt.com/
    品匠装饰          prflt.com/
    中宅装饰          prflt.com/
    实创装饰          prflt.com/
    业之峰装饰          prflt.com/
    模块装饰          prflt.com/
    美得你装饰          prflt.com/
    中宅装饰          prflt.com/
    康之居装饰公装          prflt.com/
    洲梦装饰          prflt.com/
    康之居装饰          prflt.com/
    益昌装饰
    江西装修          prflt.com/
    南昌装修          prflt.com/
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|小黑屋|网站地图|DZ商业模板|VR福利资源|嵌入式Linux论坛 ( 粤ICP备15085165号-2

    GMT+8, 2017-8-23 18:12 , Processed in 0.312001 second(s), 9 queries , File On.

    Powered by 深嵌论坛 X3.3

    © 2001-2013 Comsenz Inc.

    快速回复 返回顶部 返回列表