Ich möchte in den Optionbytes den Readprotectionlevel=1 setzen.
Allerdings sehe ich kein Togglen des Pins, was nach Abschließen der
Initialisierung geschehen müsste. Die Funktion HAL_FLASH_OB_Launch();
scheint Probleme zu machen.Bei Auskommentieren der Funktion
HAL_FLASH_OB_Launch() wird die mainloop erreicht. Ist an diesem Vorgehen
den RDP=1 zu setzen etwas falsch ?
Ich verwende hier die HAL_DRIVER. Das gleiche Problem habe ich aber auch
mit der STD_PERIPHERAL_DRIVER. Tools: Keil 4.73, EWARM 7.2, ST-LINKV2
1 |
|
2 | void MX_Flash_Init(void)
|
3 | {
|
4 | FLASH_OBProgramInitTypeDef Optbyte;
|
5 |
|
6 | HAL_FLASHEx_OBGetConfig(&Optbyte); // read out RDPLvL
|
7 |
|
8 | if(Optbyte.RDPLevel ==RESET){ // Lvl 0 = 0, Lvl 1,2 =1
|
9 | Optbyte.OptionType=OPTIONBYTE_RDP; // select RDP optionbyte
|
10 | Optbyte.RDPLevel=OB_RDP_LEVEL_1; // select RDP level 1
|
11 | HAL_FLASH_Unlock(); // unlock Flash
|
12 | HAL_FLASH_OB_Unlock(); // unlock Optionbytes
|
13 | HAL_FLASHEx_OBProgram(&Optbyte); // set RDP=1
|
14 | HAL_FLASH_OB_Launch(); // write OB to Flash and reset
|
15 | }
|
16 | HAL_FLASH_OB_Lock(); // Lock Optionbytes
|
17 | HAL_FLASH_Lock(); // lock Flash
|
18 | }
|
1 | int main(void)
|
2 | {
|
3 | MX_GPIO_Init();
|
4 | MX_Flash_Init();
|
5 | while (1)
|
6 | {
|
7 | GPIOA->ODR^=GPIO_PIN_7;
|
8 | }
|
9 | }
|