完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
使用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个回答
|
|
减小打印函数中字符数组大小就可以了:
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} |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
1299 浏览 1 评论
1313 浏览 1 评论
求助大佬我使用STM32F030F4P6 的PA3引脚输出PWM波形
1166 浏览 0 评论
1377 浏览 1 评论
STM32H750VB sys为什么无法选择debug模式?
1541 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-4-6 05:38 , Processed in 0.452168 second(s), Total 41, Slave 35 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191