关于STM32的FLASH操作【转载】】的更多相关文章

说到STM32的FLSAH,我们的第一反应是用来装程序的,实际上,STM32的片内FLASH不仅用来装程序,还用来装芯片配置.芯片ID.自举程序等等.当然, FLASH还可以用来装数据. FLASH分类 根据用途,STM32片内的FLASH分成两部分:主存储块.信息块. 主存储块用于存储程序,我们写的程序一般存储在这里. 信息块又分成两部分:系统存储器.选项字节. 系统存储器存储用于存放在系统存储器自举模式下的启动程序(BootLoader),当使用ISP方式加载程序时,就是由这个程序执行.这个…
从STM32编程手册中,可以知道:在进行写或擦除操作时,不能进行代码或数据的读取操作. 比如:你在写Flash期间有接收串口数据,很有可能会丢串口数据. 因为比较耗时,所以,在写数据时,CPU不会执行其他操作. 简单说:在写Flash时,CPU 不能取指令,导致中断得不到及时响应,从而发生接收到的数据未及时读走而被覆盖的现象. 遇到这种情况,解决的办法:使用DMA.DMA不需要CPU干预,一旦 USART 有数据接收到,由 DMA 负责将其传输至循环缓冲区中.软件定期检测循环缓冲区中是否有接收到…
S3C2440对Nand Flash操作和电路原理(基于K9F2G08U0A) 转载自:http://www.cnblogs.com/idle_man/archive/2010/12/23/1915303.html S3C2440内部集成了一个Nand flash控制器.S3C2440的Nand flash控制器包含了如下的特性: l        一个引导启动单元 l        Nand Flash存储器接口,支持8位或16位的每页大小为256字,512字节,1K字和2K字节的Nand f…
STM32的位带操作是基于cortex内核自带的,而不是st公司独创.基本的思路就是用一个32位的地址空间访问一个bit,因为stm32只支持32位数据的读取,不像51单片机一样,是可以单独对一位操作的.因此,arm开发了位带技术,以提高位操作的速度.stm32中SRAM地址范围=0x2000 0000~0x200F FFFF,共1MBstm32中SRAM位带地址范围=0x2200 0000~0x23FF FFFF,共32MBstm32中FLASH地址范围=0x4000 0000~0x400F…
STM32中存储区分为:随机存取存储器RAM和只读存储器ROM. 其中: RAM为常说的内存,比如手机的2G内存4G内存等,就是程序跑起来的时候所占用的存储空间,特点是掉电数据丢失. ROM为常说的硬盘,比如手机的64G和128G等,可以简单的理解为硬盘的存储空间,特点是掉电数据不丢失,所以又叫“非易失性存储器件”.  ROM又包含:EEPROM和flash. 画个嵌入式产品存储器件的思维导图如下(如有什么地方不对,恳请大神们进行指正):  作为ROM的一份子,flash的特点自然是掉电数据不丢…
源:STM32串口寄存器操作 //USART.C /*********************************************************************************************************/ /* USART 收发 */ /* 陈鹏 20110611*/ #include "SYSTEM.H" #include "GPIO_INIT.H" #include "USART.H"…
SqlServer中的merge操作(转载)   今天在一个存储过程中看见了merge这个关键字,第一个想法是,这个是配置管理中的概念吗,把相邻两次的更改合并到一起.后来在technet上搜索发现别有洞天,原来是另外一个sql关键字,t-sql的语法还是相当地丰富的.本篇是一篇学习笔记,没有什么新意,这里给出technet上的地址连接供大家参考权威:http://technet.microsoft.com/zh-cn/library/bb510625.aspx,这里具体的语法不去深究了,只是把几…
定义一个全局变量数组:const u8 TEXT_Buffer[]={"STM32F103 FLASH TEST"};    //u8和char* 写入到内存里会有什么区别???????不都是0101吗,难道一个元素占的位置大小不同????? #define SIZE sizeof(TEXT_Buffer)                        //数组长度 sizeof是一个函数 ,函数的作用是求出括号里参数的长度#define FLASH_SAVE_ADDR  0X0807…
安卓自定义View进阶-Canvas之画布操作 转载 https://www.gcssloop.com/customview/Canvas_Convert 本来想把画布操作放到后面部分的,但是发现很多图形绘制都离不开画布操作,于是先讲解一下画布的基本操作方法. 一.Canvas的常用操作速查表 操作类型 相关API 备注 绘制颜色 drawColor, drawRGB, drawARGB 使用单一颜色填充整个画布 绘制基本形状 drawPoint, drawPoints, drawLine, d…
关于STM32F107的SPI标志 SPI_I2S_FLAG_BSY和SPI_I2S_FLAG_TXE的疑问  http://www.openedv.com/posts/list/23579.htm 用STM32 SPI1驱动DAC7611,在发送数据的时候用了while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);等待发送缓冲区为空后再拉高CS.结果发现在数据(16位)没有发送完时,就执行了CS拉高.然后我换了这个语句whi…
之前IAP时候记录过一些,今天对特定地方写又加深了印象,写与擦除都需要先unclock //读取指定地址的半字(16位数据) //faddr:读地址(此地址必须为2的倍数!!) //返回值:对应数据. u16 STMFLASH_ReadHalfWord(u32 faddr) { return *(vu16*)faddr; } STMFLASH_ReadHalfWord //读取指定地址的字(32位数据) //faddr:读地址(此地址必须为2的倍数!!) //返回值:对应数据. u32 STMF…
一.内容概述  采用STM32内部自带USB控制器外加大页NAND FLASH K9F1G08U0A实现一个128M的U盘. 1.STM32的USB控制器 STM32F103的MCU自带USB从控制器,符合USB规范的通信连接:PC主机和微控制器之间的数据传输是通过共享一专用的数据缓冲区来完成的,该数据缓冲区能被USB外设直接访问.这块专用数据缓冲区的大小,由所使用的端点数目和每个端点最大的数据分组大小所决定,每个端点最大可使用512字节缓冲区,最多可用于16个单向或8个双向端点.USB模块同P…
Stm32具有IIC接口,接口有以下主要特性 多主机功能:该模块既可做主设备也可做从设备 主设备功能 C地址检测 位/10位地址和广播呼叫 支持不同的通讯速度 状态标志: 发送器/接收器模式标志 字节发送结束标志 总线忙标志 错误标志 个中断向量 可选的拉长时钟功能 具单字节缓冲器的DMA 虽然很多人说STM的硬件IIC不好用,但是对于这么一个设备去探索一下还是很有必要的,指不定哪天就用上了呢, IIC借口一共有九个寄存器,比较重要的几个寄存器分别如下 1.       CR1 由这几个位我们可…
正在准备做毕业设计,配置LED_Config()的时候,又看到了位带操作的宏定义,我又嘀咕了,什么是位带操作,一年前在使用位带操作的时候,就查阅过好多资料,Core-M3也看过,但是对于博主这种“低能儿”来说,你不把它说的白一点,就是感觉理解的不够透彻,于是今天又一次,查阅了各种手册,也算是基本弄懂了,鉴于博主的个人特点,所以本人的介绍也会十分浅显易懂,希望能帮到各位! 首先,抛砖引玉,来两个问题: 1)为什么STM32里面会有位带操作? 2)STM32里面的位带操作是什么意思? 我也不想去弄什…
debug中遇到的问题: 1,写入数据,读出来不对 2,看之前被人写的代码发现,读flash直接用的标准C库函数:memcpy,但是,写用的专门的flash写接口.所以,我这里两个疑问: A,写flash的时候,为什么没有用memcpy,可不可以用? B,用const 修饰的全局变量是存储在ROM空间的(也就是内置flash上),没有用const修饰的全局变量 和 局部变量是存储在RAM空间上的. 比如 有个全局const 变量 A,全局变量 B,那么,memcpy(B,A)为什么就能正确执行,…
#define FLASH_ID_OFFSET 30000    //任意定义一个数 //把地址直接减去或者加上一个数是不要程序中直接出现这个地址 volatile u32 Flash_ID_addr[3]={ 0x1FFFF7E8 - FLASH_ID_OFFSET, 0x1FFFF7EC + FLASH_ID_OFFSET, 0x1FFFF7F0 - FLASH_ID_OFFSET }; /**读取STM32 FLASH ID**/ void Flash_Read_ID(u32 *p){ …
今天在看片内flash的操作,发现按照下面的操作并没有写成功: unsigned long temp = 0x12345678; HAL_FLASH_Unlock(); FLASH_PageErase(APPLICATION_B_ADDRESS) status = HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD,APPLICATION_B_ADDRESS,temp); HAL_FLASH_Lock(); HAL_StatusTypeDef HAL_FLASH_P…
今天在进行STM32内部falsh存储的时候,发现固件库历程的函数原型是这样的: 第一个是地址,在我的STM32中是2K一页的,第二个是要写入的数据. 问题就来了,存储一个小数该怎么办呢?固件库给的是整形数据啊! 三种解决办法: 第一:最具大众性的 把小数乘以系数放大,当做整数存储,然后再除以放大系数得到小数本身.例如 float  a=1.23; int b=a*100;把b存进去,取出来的时候再除以100,就可以得到小数a了.这是最简单可能也是最好想到的了,但同时,这也是最麻烦的了.稍有C语…
以前在学习STM32时候关注过STM32的位带操作,那时候只是知道位带是啥,用来干嘛用,说句心里话,并没有深入去学习,知其然而不知其所以然.但一直在心中存在疑惑,故今日便仔细看了一下,写下心得供日后参考. 位带操作,我所理解的是就是像51单片机那样驱动IO引脚一样,比如要驱动P1端口的第一个引脚直接用P1^1即可对P1.1引脚进行输入和输出,由于STM32基于32位寄存器操作,不允许直接访问某一位,要想控制GPIO端口的某一位怎么办,于是就有了位带操作,说白了就是为解决STM32不能直接访问GP…
磁盘操作是块设备的必备操作,需要认真掌握. 一.硬盘 1.硬盘文件 默认串口硬盘的设备文件为sda(第一块硬盘).sdb(第二块硬盘).... 默认并口硬盘的设备文件为hda(第一块硬盘).hdb(第二块硬盘).... 2.物理分区和逻辑分区 每块硬盘最多有四个主分区(包括真正的分区和扩展分区),编号1~4: 从5开始为逻辑分区: 每个分区能分配独立的文件系统 如下图,主分区容量=sda1+sda2(扩展分区): 扩展分区容量=逻辑分区总容量=sda5,当然本例只有一个逻辑分区,还可以有sda6…
W25Q16V 是华邦出的一颗 spi flash. 25系列是比较通用的一个系列. 后面的数字 16 跟容量有关, 16 表示 16Mbits, 相当于 2MB. 与此类似的还有 W25Q128V 等, 128 就表示容量 16MB. 对于 W25Q16V: page 为最大的编程单位. 1 page = 256 bytes sector 为最小的擦除单位, 1sector = 16 pages = 4096 bytes (4KB) 块擦除有两种大小: 32K block = 8 secotr…
(涉及专有名词较多,难免解释不到位,若有错误还请指出,谢谢!) 硬件连接图如下: 一.扫描 思路是在main函数中通过死循环来扫描端口电平状态检测,以此判断按键是否按下.实现较为简单. 1.初始化(注意C语言中变量声明需放在函数开头) 以下是初始化PB5端口(LED灯)的代码,每一条语句的含义在我另一篇博客里 GPIO_InitTypeDef GPIO_Init1; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); GPIO_Init1.…
社团作业=_= 开发版上的LED灯负极连接在PB5口,正极串联一510Ω电阻后与3.3V相连 若开发板不带LED灯则需要自行连接,务必串联一个合适的电阻防止LED灯烧坏 零.一个有趣的延时函数 来自于开发板配套资料当中的例程,第一次看到的时候觉得耳目一新,代码如下: void Delay(u32 count) { u32 i = 0; for (; i < count; i++) ; } 当中的u32类型是在stm32f10x.h当中的一个宏定义,对应uint32_t,表示32位无符号型整数,在…
嵌入式闪存 闪存存储器有主存储块和信息块组成 大容量产品主存储块最大为64K×64位,每个存储块划分为256个2K字节的页 编程和擦除闪存 闪存编程一次可以写入16位(半字) 闪存擦除操作可以按页面擦除或完全擦除(全擦除).全擦除不影响信息块 编程过程 页擦除过程 操作步骤 1.解锁 2.读操作 3.擦除操作 4.写操作 5.获取FLASH状态 6.锁定 举例 #define STM32_FLASH_BASE 0x08000000 #define STM32_PAGE_NUM 256 #defi…
在STM8中,由于STM8寄存器较少,在头文件中定义寄存器的时候不用采取任何形式的封装,所以操作寄存器的时候直接可以用如下方式处理:PB_DDR |=0x20; 但是在STM32中,由于其寄存器实在太多,不方便像STM8一样定义头文件,而采用大量的结构体指针,宏定义进行封装,所以操作寄存器的时候用如下方式处理:GPIOC->ODR = 0X0000;而不再像STM8一样直接写成GPIOC_ODR =0X0000;…
正在准备做毕业设计,配置LED_Config()的时候,又看到了位带操作的宏定义,我又嘀咕了,什么是位带操作,一年前在使用位带操作的时候,就查阅过好多资料,Core-M3也看过,但是对于博主这种“低能儿”来说,你不把它说的白一点,就是感觉理解的不够透彻,于是今天又一次,查阅了各种手册,也算是基本弄懂了,鉴于博主的个人特点,所以本人的介绍也会十分浅显易懂,希望能帮到各位! 首先,抛砖引玉,来两个问题: 1)为什么STM32里面会有位带操作? 2)STM32里面的位带操作是什么意思? 我也不想去弄什…
STM32 Embedded Software  工作以来一直使用ST的STM32系列芯片,ST为开发者提供了非常方便的开发库.到目前为止,有标准外设库(STD库).HAL库.LL库 三种.前两者都是常用的库,后面的LL库是ST最近才添加,随HAL源码包一起提供,目前支持的芯片也偏少.各库如下所示:库  其中,STD库和HAL库两者相互独立,互不兼容.几种库的比较如下:库比较  目前几种库对不同芯片的支持情况如下:支持情况上图中,LL库目前有部分芯片不支持,官方计划2017年逐步完善.STM32…
STM32中的位带操作: 名字为位带操作,实际上是对位的操作,位操作就是可以单独的对一个比特位读和写,这个在 51 单片机中非常常见. 51 单片机中通过关键字 sbit 来实现位定义, STM32 没有这样的关键字,而是通过访问位带别名区来实现.STM32 的全部寄存器都可以通过访问位带别名区的方式来达到访问原始寄存器比特位的效果,这比 51 单片机强大很多.因为 51 单片机里面并不是所有的寄存器都是可以比特位操作,有些寄存器还是得字节操作,比如 SBUF. 51单片机中的位操作: 51单片…
啊哈.没办法.外国人的芯片就喜欢用英文来命名,所以中文的:通用输入/输出  就用GPIO来代替..谁叫哥们都不是外国人呢.好啦.胡扯了一下,借用唐伯虎点秋香的话:小小书童,可笑可笑... 知道了GPIO的含义了吧..还是老规矩:不知道的,拉出去调戏十分钟.知道的.再赏美女十个.不介意吧. 在STM32中,根据“葵花宝典”中第STM32篇参考手册中,GPIO有以下几种模式: typedef enum { GPIO_Mode_AIN = 0x0, //模拟输入 GPIO_Mode_IN_FLOATI…
译者序:这是一篇给像我这样的新手或者是熟悉图形工具的老鸟看的.仅作为快速入门的教程. git 现在的火爆程度非同一般,它被广泛地用在大型开源项目,团队开发,以及独立开发者,甚至学生之中. 初学者非常容易被各种命令.参数吓哭.但实际上刚上手你并不需要了解所有命令的用途.你可以从掌握一些简单,强大的命令开始,逐步去学习.(这就是这篇文章要讲的).好了,上来! 基本了解 git命令是一些命令行工具的集合,它可以用来跟踪,记录文件的变动.比如你可以进行保存,比对,分析,合并等等.这个过程被称之为版本控制…