
我在使用STM32F4中发现另一个奇怪的现象。 我用STM32F407VGT6 作为数字控制电源的处理器。将ADC转换系数存在Flash中。例如: VolCoeff1 = ( *(s32*)VOL1_COEFF_ADDR),VOL1_COEFF_ADDR为Flash地址。则真实的电压为 the real voltage=VolCoeff1 * ADC digital value 在TIM2定时器中断(15kHz,66.7us)中读取系数,用于真实电压/电流的换算。因为有十几个ADC转换系数,因此每小时读Flash的次数超过7亿次。 后来发现: (1)存在用户Flash区域中的ADC转换系数有的变为0(转换的真实采样值变为0,并且在Keil 内存Watch窗口可以看到)。 (2)此外,有的系数在读的过程中是不断变化的,这个在Keil 内存Watch窗口中也可以观察到(写flash的指令都被屏蔽了)。 在重新刷写相应的Flash数据扇区后,系数都能恢复正常。 上述现象与很多文献所说的read disturb(就是过量读操作可能导致Flash数据改变)比较吻合。但我现在也不能完全确定。 内核在程序存储区取指令应该也是一种“读”操作吧,这与访问用户自定义的Flash数据区有什么区别吗? 希望有大神能给于解释,不甚感激!!! |
确实很奇怪,没有碰见过这种问题。你可以尝试把这些参数定义到内部ram里面,这样还快一点。 |
怀疑还是你代码方面的问题。 你似乎在程序运行过程中有做flash编程,你如果不做flash编程动作,再比较测试下。 |
STM32407 使用串口闲时中断+DMA方式接收最大接收字节是多少
USB_CDC_HOST 标准库里边USBH_DeAllocate_AllChannel()函数的疑问?
STM32部署机器学习算法硬件至少要使用哪个系列的芯片?
重新配置SCB->VTOR = 0x08010000后,再次复位,程序异常,发现不进tick中断,IIC读数卡死在准备查询循环中。
uboot初始化IIC1,跳转到应用程序中后,先读一字节AT24C04的数据,然后初始化IIC1(未复位),再读一字节AT24C04时,有概率一直检测到IIC处于busy状态。
STM32F407的flash读写问题
keil调试阶段无法进行仿真,能进到仿真界面,但是无法执行程序,这个怎么解决?
STM32F4的IO口5V容忍问题
询问STM32F407两种USB可以实现的功能
TOF传感器(VL53L5),无法得到data ready