完善资料让更多小伙伴认识你,还能领取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} |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
2105 浏览 1 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
1941 浏览 3 评论
4537 浏览 0 评论
如何解决MPU-9250与STM32通讯时,出现HAL_ERROR = 0x01U
2084 浏览 1 评论
hal库中i2c卡死在HAL_I2C_Master_Transmit
2599 浏览 1 评论
浏览过的版块 |
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 18:26 , Processed in 0.654881 second(s), Total 76, Slave 58 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号