Цитата(VslavX @ May 16 2012, 08:08)

Именно. Причем по моему опыту сброс через внешний вход ~RESET не помогает. После стирания битов еще приходится делать Power Cycling - тогда только защита гарантировано отключается.
Вопрос 1 - Power Cycling относится к установке защиты GPIO или к защите флэш-памяти. Как в программе сделать Poer Cycling?
Вопрос 2. В нижеприведенной программе сначала зажигается лампочка на PC8, затем ставится защита LCKR, а затем PC8 переводится в режим входа. Если защита установлена правильно, то лампочка должна гореть, а у меня она гаснет (хотя если убрать блок из 4 нижних строк, то светится). Почему не устанавливается защита?
#include "stm32f10x.h"
#include "stm32f10x_gpio.h"
#include "stm32f10x_rcc.h"
int main(void)
{ int tmp;
//Конфигурирование GPIOC.8
RCC->APB2ENR |= RCC_APB2ENR_IOPCEN; // Разрешить тактирование GPIOC
GPIOC->CRH &= ~GPIO_CRH_MODE8; //очистить разряды MODE
GPIOC->CRH &= ~GPIO_CRH_CNF8; //очистить разряды CNF
GPIOC->CRH |= GPIO_CRH_MODE8_0; //выход, 10MHz
GPIOC->CRH &= ~GPIO_CRH_CNF8; //общего назначения, симетричный
GPIOC->BSRR = GPIO_BSRR_BS8; //GPIOC.8=1
GPIOC->LCKR |= GPIO_LCKR_LCK8; //включение защиты настроек
GPIOC->LCKR |= GPIO_LCKR_LCKK; //Записать в LCKK "1”-"0”-"1”
GPIOC->LCKR &= ~GPIO_LCKR_LCKK; //
GPIOC->LCKR |= GPIO_LCKR_LCKK; //
tmp = GPIOC->LCKR; //Две операции чтения регистра LCKR
tmp = GPIOC->LCKR;
//Конфигурирование GPIOC.8
GPIOC->CRH &= ~GPIO_CRH_MODE8; //очистить разряды MODE
GPIOC->CRH &= ~GPIO_CRH_CNF8; //очистить разряды CNF
GPIOC->CRH |= GPIO_CRH_CNF8_1; //дискретный вход, подтяжка к "земле"
GPIOC->BSRR = GPIO_BSRR_BR8; //включить подтягивающий резистор
while(1);
}