내부 백업레지스터의 정보를 제거하는 용도로 사용하는 TAMPER 패리패럴을 설정하고 사용하는 방법입니다.
주요 정보를 저장해두고 유사시에 제거하는 용도로 사용하도록 설정하여 사용하면 될 것 같습니다.
TAMPER 핀은 PULL-DOWN해두고 유사시에 TAMPER 핀에 HIGH 신호를 주는 설정으로 하였습니다.
전원 OFF 시에 전원이 TAMPER 핀으로 들어가지 않게 하기 위함이었습니다.
/*******************************************************************************
* Function Name :
* Parameters :
* Return : none
* Description :
*******************************************************************************/
void BackupRegister_Init(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
/* Enable PWR and BKP clock */
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE);
/* Enable write access to Backup domain */
PWR_BackupAccessCmd(ENABLE);
/* Clear Tamper pin Event(TE) pending flag */
BKP_ClearFlag();
/* Enable Tamper pin */
BKP_TamperPinCmd(ENABLE);
/* Tamper pin active on low level */
BKP_TamperPinLevelConfig(BKP_TamperPinLevel_High);//BKP_TamperPinLevel_Low
/* Enable Tamper interrupt */
BKP_ITConfig(ENABLE);
/* Enable TAMPER IRQChannel */
NVIC_InitStructure.NVIC_IRQChannel = TAMPER_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
UART1_printf("\r\n\n%X", BKP_ReadBackupRegister(BKP_DR1));
if (BKP_ReadBackupRegister(BKP_DR1) != 0xAAAA)
{
/* Backup data register value is not correct or not yet programmed (when
the first time the program is executed) */
BKP_WriteBackupRegister(BKP_DR1, 0xAAAA);
UART1_printf("\r\n\n Write %X", BKP_ReadBackupRegister(BKP_DR1));
}
else
{
/* Check if the Power On Reset flag is set */
if (RCC_GetFlagStatus(RCC_FLAG_PORRST) != RESET){
UART1_printf("\r\n\n Power On Reset occurred....");
}
/* Check if the Pin Reset flag is set */
else if (RCC_GetFlagStatus(RCC_FLAG_PINRST) != RESET){
UART1_printf("\r\n\n External Reset occurred....");
}
}
/* Clear reset flags */
RCC_ClearFlag();
}
void TAMPER_IRQHandler(void)
{
if(BKP_GetITStatus() != RESET)
{ /* Tamper detection event occured */
/* Clear Tamper pin interrupt pending bit */
BKP_ClearITPendingBit();
/* Clear Tamper pin Event(TE) pending flag */
BKP_ClearFlag();
}
}
'초보의 아웅다웅 설계하기 > STM32' 카테고리의 다른 글
IAR Debugger 다운로드 설정 (0) | 2018.08.16 |
---|---|
LCD 5*8 픽셀 글자 (0) | 2018.07.27 |
다중 이동식 저장장치 (0) | 2018.07.23 |
USB Composite (0) | 2018.07.22 |
error C1189: #error : MFC does not support WINVER less than 0x0501. (0) | 2018.07.18 |