Вернее, проект работал, но "отваливался" дебаг порт SWD - помогала только загрузка через замыкание BOOT0. Радостно потирая руки, начал писать демонстрацию бага...
Внимательное чтение документации выявило причину.
Пока - код-загадка, который после программирования в STM32F103RC делал его "невидимым" для J-FLASH.
CODE
#include "stm32f10x.h"
#define STACK_SIZE 0x600
static __attribute__ ((aligned(8), section(".noinit"))) uint32_t pdwStack [STACK_SIZE] ;
typedef void IntFunc(void);
typedef IntFunc * IntFuncP;
static IntFunc ResetException;
static
__attribute__((used, section(".vectors"))) IntFuncP exception_table [256] = {
(IntFuncP) (& pdwStack [STACK_SIZE]),
ResetException,
};
static void ResetException(void)
{
/* Используется только SWD */
RCC->APB2ENR |= RCC_APB2ENR_AFIOEN;
AFIO->MAPR = (AFIO->MAPR & ~ AFIO_MAPR_SWJ_CFG) | AFIO_MAPR_SWJ_CFG_JTAGDISABLE; // PA15, BP3 & PB4 pins free for use.
/* ... много кода */
RCC->APB2ENR |= RCC_APB2ENR_AFIOEN;
AFIO->MAPR |= AFIO_MAPR_SPI1_REMAP;
/* ... инициализация SPI1 */
/* ... много кода */
RCC->APB2ENR |= RCC_APB2ENR_IOPBEN; /* I/O port B clock enable */
// Set PB3 as output
GPIOB->CRL = GPIO_CRL_CNF3_0;
/* ... много кода */
for (;;)
;
}
#define STACK_SIZE 0x600
static __attribute__ ((aligned(8), section(".noinit"))) uint32_t pdwStack [STACK_SIZE] ;
typedef void IntFunc(void);
typedef IntFunc * IntFuncP;
static IntFunc ResetException;
static
__attribute__((used, section(".vectors"))) IntFuncP exception_table [256] = {
(IntFuncP) (& pdwStack [STACK_SIZE]),
ResetException,
};
static void ResetException(void)
{
/* Используется только SWD */
RCC->APB2ENR |= RCC_APB2ENR_AFIOEN;
AFIO->MAPR = (AFIO->MAPR & ~ AFIO_MAPR_SWJ_CFG) | AFIO_MAPR_SWJ_CFG_JTAGDISABLE; // PA15, BP3 & PB4 pins free for use.
/* ... много кода */
RCC->APB2ENR |= RCC_APB2ENR_AFIOEN;
AFIO->MAPR |= AFIO_MAPR_SPI1_REMAP;
/* ... инициализация SPI1 */
/* ... много кода */
RCC->APB2ENR |= RCC_APB2ENR_IOPBEN; /* I/O port B clock enable */
// Set PB3 as output
GPIOB->CRL = GPIO_CRL_CNF3_0;
/* ... много кода */
for (;;)
;
}
ps: вот тут
мучаются с похожей проблемой, но не нашли решения...