7106|6

70

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

STM32写flash操作,达人请进 [复制链接]

最近用STM32F103做了个项目
里面有温度定标数据需要写到flash里
于是写了一段向flash写多个字节的函数
请高手们看看有没有什么问题
编译链接都通过了
还没有在线调试过

代码如下:
/******************************************************************
* 名称:FLASH_WriteNByte
* 功能:指定FLASH起始地址,写多字节数据
* 入口参数:addr  指定的起始地址
*    dat_buf 待写入的数据缓冲区指针
*          no  要写入数据个数
* 出口参数:返回0时表示操作错误  返回1表示操作成功
******************************************************************/
u8  FLASH_WriteNByte(u32 addr, u8  *dat_buf, u8 no)
{
       FLASH_Unlock();//Unlock the Flash
       while(1)
      {
          FLASH_ProgramHalfWord(addr, *dat_buf);
         if(FLASH_GetStatus()==FLASH_COMPLETE)  //获取Flash状态
          {
             no--;
             addr++;
             *dat_buf++;
          }
       else
         {
            return 0;
      
           }
          if(no==0) break;
     }
   FLASH_Lock();
   return 1;
}


/*******************************************************************************
* Function Name  : FLASH_ProgramHalfWord
* Description    : Programs a half word at a specified address.
* Input          : - Address: specifies the address to be programmed.
*                  - Data: specifies the data to be programmed.
* Output         : None
* Return         : FLASH Status: The returned value can be: FLASH_BUSY,
*                  FLASH_ERROR_PG, FLASH_ERROR_WRP, FLASH_COMPLETE or
*                  FLASH_TIMEOUT.
*******************************************************************************/
FLASH_Status FLASH_ProgramHalfWord(u32 Address, u16 Data)
{
  FLASH_Status status = FLASH_COMPLETE;
  /* Check the parameters */
  assert_param(IS_FLASH_ADDRESS(Address));
  /* Wait for last operation to be completed */
  status = FLASH_WaitForLastOperation(ProgramTimeout);
  
  if(status == FLASH_COMPLETE)
  {
    /* if the previous operation is completed, proceed to program the new data */
    FLASH->CR |= CR_PG_Set;
  
    *(vu16*)Address = Data;
    /* Wait for last operation to be completed */
    status = FLASH_WaitForLastOperation(ProgramTimeout);
    if(status != FLASH_BUSY)
    {
      /* if the program operation is completed, disable the PG Bit */
      FLASH->CR &= CR_PG_Reset;
    }
  }
  /* Return the Program Status */
  return status;
}
此帖出自stm32/stm8论坛

最新回复

                                 没看出什么问题  详情 回复 发表于 2010-4-27 18:45
点赞 关注
 

回复
举报

64

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
下载ST提供的usart bootloader例程,照着做即可
源码已经比较友好,从main()开始看一遍即可,初始化部分尤其要仔细看。
此帖出自stm32/stm8论坛
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

板凳
 

能否提供一个下载链接啊,大侠
此帖出自stm32/stm8论坛
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

4
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

5
 
                                 谢谢版主
此帖出自stm32/stm8论坛
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

6
 
mark
回去测测我的flash
此帖出自stm32/stm8论坛
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

7
 
                                 没看出什么问题
此帖出自stm32/stm8论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表