STM32/STM8技术论坛
直播中

安立路

8年用户 808经验值
私信 关注
[问答]

stm32f407zgt6在HAL_FLASHEx_Erase()前如果调用了uart1打印数据就会卡死怎么解决?

使用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;}

回帖(1)

江端淳

2024-3-6 16:32:02
减小打印函数中字符数组大小就可以了:
void printmsg(char *format,...){#ifdef BL_DEBUG_MSG_EN    char str[64];  // 设置为256会程序会失败    memset(str,0,64);    va_list args;    va_start(args,format);    vsprintf(str,format,args);    HAL_UART_Transmit( BL_UART,(uint8_t *)str,strlen(str),HAL_MAX_DELAY);    va_end(args);#endif}
举报

更多回帖

发帖
×
20
完善资料,
赚取积分