本章介绍430F169的FLASH操作以及特性
建议点击下方链接根据官方手册进行程序书写
废话不多说冲!!!
什么是FLASH 简单来说就像是储物间,你的代码就是物品存储在里面,用到那个代码时取出来用再放回去!
1 430F169 具有60KB主存和256B闪存和2KB RAM
相对于其他的单片机来说是比较大的存储空间了
2 注意事项
(敲黑板)
在进行FLASH操作的时候必须保证电压在2.7V以上时钟频率在257~476KHZ之间,不然会出现意想不到的错误
3 FLASH的写入和擦除
(敲黑板)
430F169这款芯片只支持段擦除或者块擦除(擦除主存段)或者全部擦除(主存加闪存)。
选择WRT或者BLKWRT选择是字/字节或者段写入
从RAM写入FLASH流程如下(*字写入*)
<1>关闭所有中断和看门狗(一般情况下关门狗默认关闭)
<2>通过BUSY判断FLASH是否忙碌
<3>设置FLASH控制寄存器 设置字写入(可以理解为解锁)
<4>写入数据
<5>设置控制寄存器(上锁)开启中断
从RAM写入FLASH流程如下(块写入)
<1>关闭中断和看门狗定时器
<2>判断是否忙碌
<3>设置FLASH控制寄存器
<4>设置块写入还是段写入
<5>是否等待
<6>是否忙碌
<7>是否写入其他快
<8>打开中断
4 停止操作FLASH
任何关于FLASH的读写操作可设置EMEX位来停止
5 4KB的FLASH例子如图
5 FLASH寄存器
<1>FCTL1,FLASH控制寄存器1(主要用来选择块写入或者字写入,擦除的方式)
<2>FCTL2,FLASH控制寄存器2(选择FLASH时钟和分频比)
<3>FCTL3,FLASH控制寄存器3(上锁,等待,忙碌)
<4>IE1,中断使能寄存器(内存访问冲突中断)
更加详细的细节请下载用户指导手册!!!!
6 写入FLASH操作流程(以我的代码为例)
<1>选择flash的时钟确定分频比(FLASH最后的时钟要在257~476Khz之间)
<2>FCTL1和FCTL3赋予写的权限擦除方式为段擦除
<3>执行一次假写(必须有)
<4>FCTL1赋予写权限选择字写入
<5>写入数据
<6>FCTL1和FCTL3关闭写权限上锁放置误操作
(本人用的是闪存A和B地址0X1010和0X1080)
void flash_init(void)
{
FCTL2 = FWKEY + FSSEL0 + FN5; //FLASH时钟初始化 MCLK(8MHZ) 32分频
}
void write_flashA(void) //FLASH段A写入数据
{
char *flash_ptr;
unsigned int i;
flash_ptr = (char *) 0x1080; //指针指向你写的F
FCTL1 = FWKEY + ERASE; //执行写操作权限 擦除个别段
FCTL3 = FWKEY; //赋予写操作权限
*flash_ptr = 0; //执行一次flash 需要一次假写入
FCTL1 = FWKEY + WRT; //执行写操作权限 打开写模式
for (i=0; i<128; i++)
{
*flash_ptr++ = value;//写入数据 真正执行写操
value++;
}
FCTL1 = FWKEY ; //清除 WRT写操作位
FCTL3 = FWKEY + LOCK; //FLASH上锁 防止误操作
}
7 确定FLASH写入成功
主程序
#include "msp430x16x.h"
#include "System_clock.h"
#include "flash.h"
void main( void )
{
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;
System_clock(); //初始化时钟
flash_init();
_DINT(); //关闭中断
write_flash(0x1010,123);
write_flashA();
copy_flashAtoB();
read_and_write_one_flash();
write_flash(0x1010,255);
write_flash(0x1080,255);
while(1)
{
}
}
(本人用的是闪存A和B地址0X1010和0X1080)
打开工程(下面有链接)点击 VIEW->Memory->memory1->0x1010->go to
430芯片初始状态都是0XFF如图
添加断点如图点击运行
点击单步调试
0X1010地址被写入123(0x7b)
一直单步调试流程图如下
上一篇:MSP430FR6989系列教程之LCD
下一篇:MSP430 串口通讯
推荐阅读最新更新时间:2024-11-13 19:46
设计资源 培训 开发板 精华推荐
- AD9609-40EBZ,用于 AD9609BCPZ-40、单通道、10 位、40 MSPS 模数转换器的评估板
- LT1084CT-12、12V/5A 电池后备稳压电源的典型应用电路
- 柿饼派屏幕扩展模块
- 电子盘底座
- 使用 Analog Devices 的 LTC1286CS8 的参考设计
- TWR-S08PT60-KIT,用于 MC9S08PT60 坚固型 5V、8 位 MCU 的开发塔式系统模块,以突出触摸感应和电机控制
- 采用单端 15V 输入电源的 LTC3265EFE 低功率 ±20V 电源的典型应用电路
- UM10862,TEA1832 45W/19.5V Ultra Book 适配器演示板
- CYC1000,基于 10CL025YU256C8G Cyclone 10 LP FPGA 的最低成本 Cyclone 10 LP 入门板
- LT8570IMS8E 1.5MHz、5V 至 12V 升压转换器的典型应用