使用stm32f407zgt6,使用uart1与pc通信。pc发送命令,f4接收到以后擦除flash。
问题:如果在接收命令前通过uart1向pc打印一些数据就会导致HAL_FLASHEx_Erase()函数卡死;取消uart1打印后可以正常擦除。
#define FLASH_FLAG_ALL_ERRORS (FLASH_FLAG_EOP| \
FLASH_FLAG_OPERR| \
FLASH_FLAG_WRPERR| \
FLASH_FLAG_PGAERR| \
FLASH_FLAG_PGPERR| \
FLASH_FLAG_PGSERR)
uint8_t flash_erase_cpu_flash_by_sector(uint32_t _sector)
{
uint8_t re;
uint32_t page_error=0;
FLASH_EraseInitTypeDef pEraseInit;
pEraseInit.TypeErase = FLASH_TYPEERASE_SECTORS; //页擦除
pEraseInit.Sector = _sector; //擦除地址
pEraseInit.NbSectors = 1; //擦除页数
/* 解锁 */
HAL_FLASH_Unlock();
__HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_ALL_ERRORS) ;
FLASH_WaitForLastOperation(10) ;//等待一下,提升擦除成功率
HAL_GPIO_WritePin(GPIOF,GPIO_PIN_10,GPIO_PIN_RESET); // 绿灯亮
/* 扇区擦除 */
re = HAL_FLASHEx_Erase(&pEraseInit, &page_error);
HAL_GPIO_WritePin(GPIOF,GPIO_PIN_10,GPIO_PIN_SET); // 绿灯灭
/* 擦除完毕后,上锁 */
HAL_FLASH_Lock();
return re;
}
|
问题解决了,减小打印函数中字符数组大小就可以了:
[md]应该是栈溢出了,导致硬件错误