stm32f407片内Flash写失败问题排查记录

省流:FLASH_Program_DoubleWord函数使用时要求Vpp电压为7V~9V

最近项目选择使用stm32f407来做,之前都是用的嵌入式linux板子。第一次用单片机做项目,买了现成的板子,然后基于自带的例程代码进行修改。
在做参数存储的时候,用的HAL库来进行单片机自身的Flash读写操作。因为要存储的参数是double数据,所以直接用联合体来做。

union 
{
	double data_f;
	uint64_t data_d;
}

对data_f赋值后,直接用HAL_FLASH_Program函数,写入FLASH_TYPEPROGRAM_DOUBLEWORD类型的数据来存储data_d,结果写入一直失败。自带的例程写入FLASH_TYPEPROGRAM_WORD类型的数据,每次都能成功。试了好多次,后来进入到HAL_FLASH_Program内部查看源码,发现在写入FLASH_TYPEPROGRAM_DOUBLEWORD时会调用函数FLASH_Program_DoubleWord,而在这个函数上面有一段注释。里面说明了使用这个函数,设备的Vpp电压必须在7V~9V之间。而楼主使用的板子没有接Vpp供电。所以将联合体改成下面的格式,然后用byte写入,解决问题。

union 
{
	double data_f;
	uint8_t buf[8];
}
/**
  * @brief  Program a double word (64-bit) at a specified address.
  * @note   This function must be used when the device voltage range is from
  *         2.7V to 3.6V and Vpp in the range 7V to 9V.
  *
  * @note   If an erase and a program operations are requested simultaneously,    
  *         the erase operation is performed before the program one.
  *  
  * @param  Address specifies the address to be programmed.
  * @param  Data specifies the data to be programmed.
  * @retval None
  */
  static void FLASH_Program_DoubleWord(uint32_t Address, uint64_t Data)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值