本帖最后由 xiaoshen-372360 于 2018-11-28 16:33 编辑 说说现在的状况吧,我只是写了一个测试程序,都是用的库操作,但是在库函数的提示是正在执行Flash操作 先把代码贴出来
仔细查找原因,是由于使能了定时器的时钟之后就出现了这个问题,不知道为啥会出现这个状况 所以这个就直接跳到 return 不知道啥原因,查了Flash编程手册也没找到原因,求大侠指导一下 大侠们帮帮忙,谢谢了 ======================================================== 解决的方式是这样的~~~~~~ ======================================================== 在需要写入前,先清掉两个状态标志位(根据手册上的来说是将该位写入1 则会将该位清零) FLASH->SR |= FLASH_SR_PGSERR|FLASH_SR_PGPERR; 这样的话Flash 的标志位被清除掉就可以了, 需要注意的是,要按照flash编程手册上的来,遇到问题了再解决,哈哈哈哈哈, |
STM32F407 定时器触发DMA 求助大神
【MCU实战经验】基于STM32F407的音频播放器设计
盘古UE-STM32F407工控板原理图
【STM32F429心得\疑问】+STM32F4之FSMC和FMC
STM32F429读取IO口传输的数据速率
STM32F407ZGT6 手摸芯片背部重启
STM32F4 SPI 动作时,软件片选信号被拉高,IO口程序逻辑失控
STM32F401RE NUCLEO求助,串口一直不能进中断
读取STM32F407内部温度传感器值错误
STM32F429多路内部ADC独立采集的办法
评分
查看全部评分
刚刚试过了,还是不行
我的测试代码如下:
在遇到状态监测这个函数的时候始终返回说:FLASH_ERROR_PROGRAM 返回的是这个状态位--而状态寄存器当前的状态是这个样子的
或者说从单片机一上电之后使能了定时器中断之后就是这个样子
不知道哪里出现了问题,我查看了编程手册,库函数是按照编程手册的顺序来完成的。
刚刚定位了一下那个Flash状态寄存器发生变化是由于定时器中断使能,在启用NVIC_Init(&NVIC_InitStructure);之后就出现了上述的两个Flash状态标志位的置位现象,请问大佬知道原因么?
其次是确认一下写入的地址在用的这款芯片里面存在吗?是不是刚好写到跨页了?这个型号的页是1K还是2K?
评分
查看全部评分
如果原始的数据位FF可以直接写入的,
我先回答大佬的问题嘛,我用的是32的内部Flash
1:芯片地址是存在的,Jlink可以访问并读出数据
2:跨页这个问题需要确认
3:这个页是128K,
我刚刚试了,擦除了再写入还是不行,那两个状态寄存器的标志一直在,不知道哪里出了问题
楼主操作的时候,有解锁FLASH吗?FLASH_Unlock
FLASH_Unlock(); //解锁
FLASH_DataCacheCmd(DISABLE);//FLASH擦除期间,必须禁止数据缓存
Flash解锁了,数据缓存没做。我试试看
我在网上找了一个关于STM32F407的总中断的处理,但是好像没啥效果,不知道版主知不知道关闭总中断有啥好的方法不?目前用的是
__set_PRIMASK(1);//关闭总中断
__set_PRIMASK(0);//开放总中断
版主,出大问题了,刚刚不是说有Flash 的两个状态寄存器么?我软件端将Flash标志位清除了。现在只要操作Flash,整个芯片就出问题了……系统跑不起来,一上电就进hardfault,代码恢复到原来的样子也不行了……