C stm32f2xx HAL_闪存_程序返回无意义
我正在尝试写入flash,但返回错误不在可接受的范围内 例如:C stm32f2xx HAL_闪存_程序返回无意义,c,stm32,flash-memory,C,Stm32,Flash Memory,我正在尝试写入flash,但返回错误不在可接受的范围内 例如: uint32_t Address = 0x0800C000; uint8_t Data = 0x01; HAL_FLASH_Unlock(); __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_EOP | FLASH_FLAG_OPERR | FLASH_FLAG_WRPERR | FLASH_FLAG_PGAERR | FLASH_FLAG_PGPERR | FLASH_FLAG_PGSERR); FLASH_
uint32_t Address = 0x0800C000;
uint8_t Data = 0x01;
HAL_FLASH_Unlock();
__HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_EOP | FLASH_FLAG_OPERR | FLASH_FLAG_WRPERR | FLASH_FLAG_PGAERR | FLASH_FLAG_PGPERR | FLASH_FLAG_PGSERR);
FLASH_Erase_Sector(FLASH_SECTOR_3, VOLTAGE_RANGE_3); //sector3 0x800C000 0x800CFFF
printf("---%u\n", HAL_FLASH_Program(FLASH_TYPEPROGRAM_BYTE, Address, Data));
if ( HAL_FLASH_Program(FLASH_TYPEPROGRAM_BYTE, Address, Data)==HAL_OK ) printf("---%u\n", 0);
if ( HAL_FLASH_Program(FLASH_TYPEPROGRAM_BYTE, Address, Data)==HAL_ERROR ) printf("---%u\n", 1);
if ( HAL_FLASH_Program(FLASH_TYPEPROGRAM_BYTE, Address, Data)==HAL_BUSY ) printf("---%u\n", 2);
if ( HAL_FLASH_Program(FLASH_TYPEPROGRAM_BYTE, Address, Data)==HAL_TIMEOUT ) printf("---%u\n", 3);
if ( HAL_FLASH_Program(FLASH_TYPEPROGRAM_BYTE, Address, Data) > 0x03) printf("---none\n");
HAL_FLASH_Lock();
请原谅这段草率的代码,但它是用于测试的。我总是得到大于3的回报。如果追踪到它是1073888268,但结构显示
typedef enum
{
HAL_OK = 0x00,
HAL_ERROR = 0x01,
HAL_BUSY = 0x02,
HAL_TIMEOUT = 0x03
} HHAL_StatusTypeDef;
这是怎么回事?您使用的是哪种微控制器?你为什么要清除所有的旗帜?您的程序的大小是多少?stm32f205,我正在根据我看到的示例清除标志。我当前的程序大小为0x08000000到0x08083dfre重复这可能对我们来说很难。我建议它通过进入函数并查看哪一步失败以及失败原因来调试它:变量值无效,检查一些寄存器标志。如果是第二个,应该给你更多关于为什么会发生这种情况的信息。这些HAL_FLASH_程序功能是不可步进的。试图介入,只是让它跨过函数。也许这是我的问题?好吧,KEIL IDE需要添加设备->闪存。之后它就可以工作了。你用的是哪个微控制器?你为什么要清除所有的旗帜?您的程序的大小是多少?stm32f205,我正在根据我看到的示例清除标志。我当前的程序大小为0x08000000到0x08083dfre重复这可能对我们来说很难。我建议它通过进入函数并查看哪一步失败以及失败原因来调试它:变量值无效,检查一些寄存器标志。如果是第二个,应该给你更多关于为什么会发生这种情况的信息。这些HAL_FLASH_程序功能是不可步进的。试图介入,只是让它跨过函数。也许这是我的问题?好吧,KEIL IDE需要添加设备->闪存。在那之后它就开始工作了。