历史上的今天
返回首页

历史上的今天

今天是:2024年12月25日(星期三)

正在发生

2018年12月25日 | STM32f103 —— 内部flash读写

2018-12-25 来源:eefocus

#ifndef _MCU_FLASH_H_

#define _MCU_FLASH_H_

 

#include "type.h"

 

// STM32C8T6 64KB FLASH,20KB RAM,1个扇区1KB,程序起始0x8000000

#define FLASH_START_ADDR    ((uint32_t)0x8000000)

#define FLASH_END_ADDR      ((uint32_t)(0x8000000 + FLASH_SECTOR_NUM * FLASH_SECTOR_SIZE))

#define FLASH_SECTOR_NUM    128  // 扇区数量

#define FLASH_SECTOR_SIZE   1024 // 扇区大小1KB

 

typedef enum

  FLASH_FAILURE = 0,

  FLASH_SUCCESS,

} flash_status_t;

 

//===========================================================================

flash_status_t FlashErase(uint32_t addr, uint8_t count);

uint32_t FlashWrite(uint32_t addr, uint8_t *buffer, uint32_t length);

uint32_t FlashRead(uint32_t addr, uint8_t *buffer, uint32_t length);

 

#endif /* _MCU_FLASH_H_ */

 


#include "mcu_flash.h"

#include

#include "stm32f10x_flash.h"

 

// addr:地址  count:块数量

flash_status_t FlashErase(uint32_t addr, uint8_t count)

{

  uint8_t i;

 

  FLASH_Unlock();

 

  FLASH_ClearFlag(FLASH_FLAG_BSY | FLASH_FLAG_EOP | FLASH_FLAG_PGERR | FLASH_FLAG_WRPRTERR);

 

  for(i = 0; i < count; ++i)

  {

    if(FLASH_ErasePage(addr + i * FLASH_SECTOR_SIZE) != FLASH_COMPLETE)

    {

      return FLASH_FAILURE;

    }

  }

 

  FLASH_Lock();

 

  return FLASH_SUCCESS;

}

 

uint32_t FlashWrite(uint32_t addr, uint8_t *buffer, uint32_t length)

{

  uint16_t i, data = 0;

 

  FLASH_Unlock();

 

  FLASH_ClearFlag(FLASH_FLAG_BSY | FLASH_FLAG_EOP | FLASH_FLAG_PGERR | FLASH_FLAG_WRPRTERR);

 

  for(i = 0; i < length; i += 2)

  {

    data = (*(buffer + i + 1) << 8) + (*(buffer + i));

    if(FLASH_ProgramHalfWord((uint32_t)(addr + i), data) != FLASH_COMPLETE)

    {

      return i;

    }

  }

  

  FLASH_Lock();

 

  return length;

}

 

uint32_t FlashRead(uint32_t addr, uint8_t *buffer, uint32_t length)

{

  memcpy(buffer, (void *)addr, length);

 

  return length;

}

 

推荐阅读

史海拾趣

Deutsch公司的发展小趣事

人才是企业发展的核心驱动力。Deutsch公司非常重视人才引进和培养工作。公司积极招聘具有丰富经验和专业技能的人才,并为他们提供广阔的发展空间和良好的职业前景。同时,公司还注重内部人才的培养和晋升,通过培训、交流等方式提升员工的综合素质和业务能力。这些措施使得Deutsch公司拥有一支高素质、高效率的团队,为公司的持续发展提供了有力保障。

General Electronic Devices公司的发展小趣事
负责产生控制信号,驱动开关元件按一定频率和占空比工作。
CT Micro公司的发展小趣事
  1. 创业初期与技术创新

CT Micro公司最初由几位电子工程领域的专家创立,他们看到了微型计算机断层扫描(Micro-CT)技术在电子行业中的巨大潜力。初期,公司面临着资金短缺和技术难题,但他们通过不断研发和创新,成功开发出了一款具有高性价比的Micro-CT设备,迅速获得了市场的认可。

  1. 市场拓展与合作伙伴关系

随着产品的成熟,CT Micro开始积极寻求市场拓展。他们与多家电子制造企业建立了合作关系,为这些企业提供Micro-CT设备的定制服务。通过与这些企业的合作,CT Micro不仅扩大了市场份额,还进一步提升了产品的技术水平和应用范围。

  1. 研发升级与产品迭代

面对日益激烈的市场竞争,CT Micro不断投入研发力量,对Micro-CT设备进行升级和迭代。他们成功推出了多款新型设备,具有更高的分辨率、更快的扫描速度和更低的辐射剂量。这些新产品的推出,进一步巩固了CT Micro在电子行业中的领先地位。

  1. 国际化战略与市场拓展

随着国内市场的饱和,CT Micro开始实施国际化战略。他们积极参与国际展览和研讨会,展示自己的产品和技术实力。同时,他们还在海外设立了销售和服务中心,为国际客户提供更加便捷的服务。通过这些努力,CT Micro成功打开了国际市场的大门。

  1. 社会责任与可持续发展

在快速发展的同时,CT Micro也积极履行社会责任。他们注重环保和可持续发展,采用环保材料和节能技术生产产品。此外,他们还积极参与公益事业,为贫困地区的教育和医疗事业贡献力量。这些举措不仅提升了公司的社会形象,也为其可持续发展奠定了坚实基础。

请注意,这些故事框架是虚构的,并不代表CT Micro公司的实际发展情况。如果您需要了解CT Micro公司或类似公司的真实故事,建议您查阅相关公司的官方网站、新闻报道或行业分析报告。

浙江东亚电子(DongYa)公司的发展小趣事

浙江东亚电子不仅在国内市场上取得了显著成绩,还积极开拓国际市场。公司已为多家世界五百强企业、上市公司提供服务,如华为、中兴、通用电气及西门子等。通过与这些国际知名企业的合作,公司不仅提升了自身品牌的影响力,还积累了丰富的国际市场经验。

ERA Transformers公司的发展小趣事

为了保持技术领先地位和市场竞争力,ERA Transformers公司非常重视创新与研发工作。公司每年都会投入大量资金用于新产品的研发和技术创新。在一次研发项目中,公司成功开发出了一种具有超高能效和极低损耗的新型变压器。这款产品的问世立即引起了市场的广泛关注,并成功获得了多项国内外专利。持续的创新与研发使得ERA Transformers公司在电子行业中始终保持着领先地位。

Hirosugi-Keiki公司的发展小趣事

在电子行业中,ERA Transformers公司以其开创性的技术而闻名。该公司专注于研发和生产高效的电子变压器,以满足不断增长的电子设备需求。在一次研发过程中,公司工程师们面临了一个重大挑战:如何提高变压器的能效和稳定性。经过数月的深入研究与反复试验,他们终于开发出了一种新型的高效能变压器,该变压器采用了先进的材料和独特的设计,显著提高了能效和稳定性,这一创新技术的突破使得ERA Transformers公司在电子行业中崭露头角。

问答坊 | AI 解惑

uCOS-ii for S3c44b0x

我这有很多关于uCOS-II藏品陆续上传,谁有Nucleus,请传一下.…

查看全部问答>

ARM指令SMULBB是什么意思啊,,

ARM指令SMULBB和SMULWB是什么意思啊? 哪位打给给你详细点说明啊,,上网没找到,,,…

查看全部问答>

VC EVC 的区别

VC和EVC的区别是什么…

查看全部问答>

学习微型计算机系统原理机应用遇到困难

书中提到的8237A 8259A 8253-PIT 8255A 8250 8251A这些片子总觉得不是很熟,不会编程,大家有什么好的建议,能让我掌握他们。有什么好的资料吗?…

查看全部问答>

应用程序如何查询中断

驱动使用DDK写的,不是DS+DDK,以前用DS+DDK的时候是应用把一个Event的HANDLE传进去,然后驱动里面用传进来的HANDLE生成一个KEVENT,应用那里启动一个线程,线程里面等待那个Event就行了,这样当发生中断时驱动的DPC就把KEVENT设置,应用的那个线程就 ...…

查看全部问答>

STM32处理器如何实现关所有中断功能

                                 我一直没发现STM32有关所有中断的功能,想问一下大家是不是它不能实现。或者有什么办法来实现这个功能。一个个的关 ...…

查看全部问答>

ALTERA亚洲创新大赛

本帖最后由 paulhyde 于 2014-9-15 03:31 编辑 请教各位,关于ALTERA亚洲创新大赛的选题应该从哪方面入手思考?  …

查看全部问答>

跪求SDHC卡初始化时ACMD41的argument

在做430向SD卡写数据时候,SD卡可以,但是用SDHC卡初始化过程中CMD0的响应正确,ACMD41响应总是0x01,是不是argument有问题呢?…

查看全部问答>

山东省电子设计大赛来了

2012TI杯山东省大学生电子设计竞赛                基本仪器和主要元器件清单 1、基本仪器清单 数字电桥 直流稳压电源 量角器 米尺  四位半数字万用表  0~200℃温度 ...…

查看全部问答>

请问在main中进入LPM4,在外部中断唤醒后在中断进入LPM3,这时程序是回到main中了...

首先在main吧,我运行了“_BIS_SR(LPM4_bits + GIE);         // Enter LPM4” 先外部IO口中断函数中我又运行了“_BIS_SR(LPM3_bits + GIE);”,请问在此之后,程序是继续执行完中断函数后面的内容再进入LPM3,还是 ...…

查看全部问答>