Estoy usando MDK-Lite Versión 5.23 con una placa STMicroelectronics STM32F072B-Disco "Discovery" y estoy tratando de usar el Ejemplo Flash provisto por las muestras Discovery.
He usado esta placa y cadena de herramientas para otros ejemplos y he codificado algunos trabajos de SPI y GPIO. El IDE funciona como un campeón. Sin embargo, para este proyecto en particular, puedo construir el código y ejecutarlo descargando y usando el botón de reinicio. No puedo usar el depurador en el proyecto tan pronto como uso la rutina HAL_FLASHEx_Erase (). Una vez que ejecuto esa rutina, el IDE aparece un cuadro de diálogo que dice "No se puede acceder al objetivo. Cerrar sesión de depuración".
Por lo que vale, sé que no es un error de programación porque si descargo el código y luego lo ejecuto presionando el botón de reinicio, funcionará. He usado este mismo depurador con una placa TI y también fue capaz de programar flash y ejecutar rutinas flash. Estoy bastante seguro de que no estoy borrando la parte de flash donde se almacena el código, por lo que no es eso.
Si paso por encima de esta línea en main.c
if (HAL_FLASHEx_Erase(&EraseInitStruct, &PageError) != HAL_OK)
entonces cae la sesión de depuración. Si, en cambio, entro en la misma línea y luego paso por encima de cada una de las llamadas en la rutina de borrado flash, funcionará y eventualmente saldré de la rutina y puedo depurar el resto del código.