Вс янв 15, 2023 17:11:12
Error message from debugger back end: Error finishing flash
/* USER CODE BEGIN WHILE */
uint32_t time = 0;
uint32_t VarFlach = 0;
HAL_StatusTypeDef flash_IS = HAL_ERROR;
VarFlach = *(__IO uint32_t*)0x08000000;
// +**************************************************************Писать в Flash
while (flash_IS != HAL_OK)
flash_IS = HAL_FLASH_Unlock();
flash_IS = HAL_ERROR;
while (flash_IS != HAL_OK)
{
flash_IS = HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, 0x0800C000, 0x89ABCD);
}
flash_IS = HAL_ERROR;
while (flash_IS != HAL_OK)
flash_IS = HAL_FLASH_Lock();
// +**************************************************************Закончить писать в Flash
VarFlach = *(__IO uint32_t*)0x0800C000;
// +**************************************************************Стирать Flash
flash_IS = HAL_ERROR;
while (flash_IS != HAL_OK)
{
flash_IS = HAL_FLASH_Unlock();
}
FLASH_EraseInitTypeDef strToErase;
strToErase.Banks = FLASH_BANK_1;
strToErase.Sector = FLASH_SECTOR_3;
strToErase.NbSectors = 1;
strToErase.TypeErase = FLASH_TYPEERASE_SECTORS;
strToErase.VoltageRange = FLASH_VOLTAGE_RANGE_3;
uint32_t sectorError = 0;
//HAL_FLASHEx_Erase(&strToErase, §orError); //Вариант 1
//HAL_FLASHEx_Erase_IT(&strToErase); //Вариант 2
//FLASH_Erase_Sector(FLASH_SECTOR_3, FLASH_VOLTAGE_RANGE_3); //Вариант 3
//if (FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE)==HAL_OK) //Вариант 3
// VarFlach = 0; //Вариант 3
CLEAR_BIT(FLASH->CR, FLASH_CR_PSIZE); //Вариант 4
FLASH->CR |= FLASH_PSIZE_WORD; //Вариант 4
CLEAR_BIT(FLASH->CR, FLASH_CR_SNB); //Вариант 4
FLASH->CR |= FLASH_CR_SER | (FLASH_SECTOR_3 << FLASH_CR_SNB_Pos); //Вариант 4
FLASH->CR |= FLASH_CR_STRT; //Вариант 4
while(__HAL_FLASH_GET_FLAG(FLASH_FLAG_BSY) != RESET) //Вариант 4
{
;
}
/* If the erase operation is completed, disable the SER and SNB Bits */
CLEAR_BIT(FLASH->CR, (FLASH_CR_SER | FLASH_CR_SNB));
flash_IS = HAL_ERROR;
while (flash_IS != HAL_OK)
flash_IS = HAL_FLASH_Lock();
// +**************************************************************Закончить стирать Flash
VarFlach = *(__IO uint32_t*)0x0800C000;
//VarFlach = FLASH->SR;
HAL_GPIO_WritePin(GPIOG, GPIO_PIN_13, GPIO_PIN_SET);//set is On
HAL_GPIO_WritePin(GPIOG, GPIO_PIN_14, GPIO_PIN_RESET);//set is Off
while (1)
{
if (VarFlach==0x89ABCD)
if ((HAL_GetTick()-time)>1000)
{
HAL_GPIO_TogglePin(GPIOG, GPIO_PIN_13 | GPIO_PIN_14);
time = HAL_GetTick();
}
/* USER CODE END WHILE */
Пн янв 16, 2023 08:58:40
while (1)
{
if (VarFlach==0x89ABCD)
if ((HAL_GetTick()-time)>1000)
{
HAL_GPIO_TogglePin(GPIOG, GPIO_PIN_13 | GPIO_PIN_14);
time = HAL_GetTick();
}
if ((HAL_GPIO_ReadPin (GPIOA, GPIO_PIN_0) == GPIO_PIN_SET) ) //&& ((HAL_GetTick() - zaderjka) > 5000)
{
flash_IS = HAL_ERROR;
while (flash_IS != HAL_OK)
{
flash_IS = HAL_FLASH_Unlock();
}
HAL_FLASHEx_Erase(&strToErase, §orError);
flash_IS = HAL_ERROR;
while (flash_IS != HAL_OK)
flash_IS = HAL_FLASH_Lock();
zaderjka = HAL_GetTick();
HAL_GPIO_WritePin(GPIOG, GPIO_PIN_13, GPIO_PIN_SET);//set is On
}
VarFlach = *(__IO uint32_t*)0x0800C000;
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
Пн янв 16, 2023 09:06:32