User Tools

Site Tools


manual:ports:armcm4_stm32f3

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
manual:ports:armcm4_stm32f3 [2019/09/24 22:12]
127.0.0.1 external edit
manual:ports:armcm4_stm32f3 [2022/11/07 11:28] (current)
voorburg [Checksum location]
Line 14: Line 14:
 In case you want to manually change the size of the bootloader, make sure the size is aligned to the sectors as outlined in the flashLayout[] array in file flash.c. For the STM32F3xx targets, all sectors are 2 kbyte in size, so the space reserved for the bootloader can be configured in steps of 2 kbyte. ​ In case you want to manually change the size of the bootloader, make sure the size is aligned to the sectors as outlined in the flashLayout[] array in file flash.c. For the STM32F3xx targets, all sectors are 2 kbyte in size, so the space reserved for the bootloader can be configured in steps of 2 kbyte. ​
  
-Because ​the bootloader ​remaps ​the base address of the interrupt vector table, make sure that your program'​s initialization routine does not set it back to its original locationThis is the case if you use function SystemInit() from ST's driver library. To correct this you need to remove ​the following lines from function ​SystemInit():+Before ​the bootloader ​starts your firmware, it automatically reconfigured ​the start address of the interrupt vector table. ​Unfortunately, ​the default system initialization ​function SystemInit() from ST's driver library, overwrites this change. This function is implemented in source file system_stm32f3xx.c. To correct this you need to explicitly set the start address of the interrupt vector table as the first thing in function ​main(). Here is an example of how this can be done when using STM32CubeIDE:
  
-<​code>​ +Add the following function to main.c:
-#ifdef VECT_TAB_SRAM +
-  SCB->​VTOR = SRAM_BASE | VECT_TAB_OFFSET;​ /* Vector Table Relocation in Internal SRAM*/ +
-#else +
-  SCB->​VTOR = FLASH_BASE | VECT_TAB_OFFSET;​ /* Vector Table Relocation in Internal FLASH. */ +
-#endif  +
-</​code>​+
  
 +<code c>
 +static void VectorBase_Config(void)
 +{
 +  /* The constant array with vectors of the vector table is declared externally in the
 +   * c-startup code.
 +   */
 +  extern const unsigned long g_pfnVectors[];​
 +
 +  /* Remap the vector table to where the vector table is located for this program. */
 +  SCB->​VTOR = (unsigned long)&​g_pfnVectors[0];​
 +}
 +</​code> ​
 +
 +And call this newly added function at the start of main():
 +
 +<code c>
 +int main(void)
 +{
 +  /* Configure the vector table base address. */
 +  VectorBase_Config();​
 +
 +  ...
 +
 +}
 +</​code>​
  
 ===== Checksum location ===== ===== Checksum location =====
Line 29: Line 48:
 A 32-bit checksum value is programmed by the bootloader at the end of a programming session. Upon startup, the bootloader verifies the correctness of this checksum to determine if a valid user program is present and can be started. A 32-bit checksum value is programmed by the bootloader at the end of a programming session. Upon startup, the bootloader verifies the correctness of this checksum to determine if a valid user program is present and can be started.
  
-The bootloader programs this value at the end of the user program'​s vector table. Its exact location is configured by macro FLASH_VECTOR_TABLE_CS_OFFSET ​in flash.c. The vector table size can vary based on the microcontroller derivative you are using. Please verify that the default value of FLASH_VECTOR_TABLE_CS_OFFSET ​is correct. If not, you can simply override the value by adding the macro with the correct value to the blt_conf.h configuration header file.+The bootloader programs this value at the end of the user program'​s vector table. Its exact location is configured by macro BOOT_FLASH_VECTOR_TABLE_CS_OFFSET ​in flash.c. The vector table size can vary based on the microcontroller derivative you are using. Please verify that the default value of BOOT_FLASH_VECTOR_TABLE_CS_OFFSET ​is correct. If not, you can simply override the value by adding the macro with the correct value to the blt_conf.h configuration header file.
  
 The user program must reserve space for this 32-bit checksum value. To reserve this space, simply enter one extra dummy entry into the interrupt vector table. This reserves space for the checksum at memory address: flash base address + flash reserved for bootloader ​ + FLASH_VECTOR_TABLE_CS_OFFSET. Refer to the demo program for an example. The user program must reserve space for this 32-bit checksum value. To reserve this space, simply enter one extra dummy entry into the interrupt vector table. This reserves space for the checksum at memory address: flash base address + flash reserved for bootloader ​ + FLASH_VECTOR_TABLE_CS_OFFSET. Refer to the demo program for an example.
manual/ports/armcm4_stm32f3.1569355959.txt.gz · Last modified: 2019/09/24 22:12 by 127.0.0.1