STM32: Difference between revisions

From Braindump
Jump to navigation Jump to search
No edit summary
Line 129: Line 129:


==== RDP with Trustzone ====
==== RDP with Trustzone ====
Option byte settings :
https://www.st.com/content/st_com/en/support/learning/stm32-education/stm32-moocs/stm32u5-rdp.html
  STM32_Programmer_CLI.exe -c port=SWD mode=UR  -ob displ
 
  STM32_Programmer_CLI.exe -c port=SWD mode=UR  -ob TZEN=1
https://www.youtube.com/watch?v=B3l6iuA7U8Q&list=PLnMKNibPkDnEkeKd_fytwc_9x2Ht2gRUn&index=2
  STM32_Programmer_CLI.exe -c port=SWD mode=UR  -ob SECWM1_PSTRT=0x0 SECWM1_PEND=0x7F SECWM2_PSTRT=0x7F SECWM2_PEND=0x0
 
Option byte settings  
  STM32_Programmer_CLI.exe -c port=SWD mode=UR -ob displ
  STM32_Programmer_CLI.exe -c port=SWD mode=UR -ob TZEN=1
  STM32_Programmer_CLI.exe -c port=SWD mode=UR -ob SECWM1_PSTRT=0x0 SECWM1_PEND=0x7F SECWM2_PSTRT=0x7F SECWM2_PEND=0x0


Flash the binaries
Flash the binaries

Revision as of 07:14, 22 December 2024

https://stm32-base.org/

https://stm32world.com/wiki/STM32_Memory_Map

https://github.com/stm32duino/Arduino_Core_STM32

https://uraltone.com/stm32f401ccu6-kehitysalusta-usb-c.html

https://github.com/stlink-org/stlink

https://kleinembedded.com/stm32-without-cubeide-part-1-the-bare-necessities/

STM32 F1

STM32F103C8T6 Used in the Bluepill ($2.7946 / 10k)

Cortex-M3 ARM @72 MHz, 20 Kb RAM and 64Kb Flash. 3.3V, some of its pins are 5V tolerant.

https://www.st.com/en/microcontrollers-microprocessors/stm32f103.html

https://www.st.com/en/microcontrollers-microprocessors/stm32f103c8.html

STMicrelectronics RM0008 STM32F10xxx Reference Manual

STMicrelectronics AN2834 Application Note: How to get the best ADC accuracy in STM32 microcontrollers

The Generic STM32F103 Pinout Diagram, Rasmus Friis Kjeldsen


https://stm32-base.org/boards/STM32F103C8T6-Blue-Pill

Based on Maple Mini from Leaflabs, does not have USB-to-Serial chip

STM32 F4

STM32F401CCU6 Used in the Blackpill ($2.2469 / 10k)

St32-pinout.png

Cortex-M4 @84 Mhz,with DSP, FPU 64 Kb of RAM and 256Kb flash

https://www.st.com/en/embedded-software/stsw-stm32065.html

https://www.freertos.org/Documentation/02-Kernel/03-Supported-devices/04-Demos/ST-Microelectronics/FreeRTOS-for-STM32F4xx-Cortex-M4F-IAR#ConfigAndUsage

STM32 H5

stm32h533ret6 (2.6679 / 10k)

Cortex-M33 @250 MHz, 512-Kbyte Flash, 272-Kbyte RAM

https://www.st.com/en/evaluation-tools/nucleo-h533re.html

um3121-stm32h5-nucleo64-board-mb1814-stmicroelectronics.pdf

https://github.com/STMicroelectronics/STM32CubeH5

STM32 N6

https://estore.st.com/en/nucleo-n657x0-q-cpn.html

Cortex-M55

Fake

Is my bluepill a fake one? did I blow it up or does it miss some bootloader? In run mode the blink program runs.

Fake unlicensed Gigadevice and other clones exist

https://mecrisp-stellaris-folkdoc.sourceforge.io/bluepill-diags-v1.640.html

https://www.e-tinkers.com/2020/01/getting-started-with-stm32-and-things-you-need-to-be-aware-of/

http://web.archive.org/web/20240214091007/https://www.e-tinkers.com/2020/01/getting-started-with-stm32-and-things-you-need-to-be-aware-of/

Bootloader

https://github.com/rogerclarkmelbourne/STM32duino-bootloader

https://github.com/STMicroelectronics/stm32-mw-openbl

https://www.youtube.com/watch?v=Myon8H111PQ

https://www.youtube.com/watch?v=L670v-Oghs4

Programmer Bluepill
RxD A9
TxD A10
5V 5V
GND GND

115200baud, 8E1 (even parity) ... Failed to detect F7 ... apparently the stm32 reads one byte to detect the baud speed.


USB D+ pin has 10kOhm insted of 1.5kOhm

boot0 set to 1 to enable programmer mode

boot1 set to 0 is system memory and set to 1 is embedded sram

https://deepbluembedded.com/stm32-boot-modes-stm32-boot0-boot1-pins/

ST-Link

https://estore.st.com/en/st-link-v2-cpn.html

clone: https://www.partco.fi/en/measurement/debugging/20140-stlinkv2.html

https://www.st.com/resource/en/user_manual/um1075-stlinkv2-incircuit-debuggerprogrammer-for-stm8-and-stm32-stmicroelectronics.pdf

The ST-Link/V2 is based on a STM32F103C8 it has an ERNI 4-pin SWIM connector and a 20 pin flat ribbon for JTAG/SWD serial wire debugging

JTAG: TCK, TMS, TDI, TDO

SWD: VCC, GND, RESET, SWCLK, SWDIO, SWO

For STM8, use the SWIM single wire interface module

For STM32, use the 20-pin interface. Connect the SWD pins VPP, GND, CLK, DIO


https://stm32-base.org/guides/connecting-your-debugger.html#official-st-linkv2

https://waterpigs.co.uk/articles/black-blue-pill-stm32-st-link-connection/

Update STlink firmware

..\Drivers\FirmwareUpgrade\STLinkUpgrade.jar

RDP with Trustzone

https://www.st.com/content/st_com/en/support/learning/stm32-education/stm32-moocs/stm32u5-rdp.html

https://www.youtube.com/watch?v=B3l6iuA7U8Q&list=PLnMKNibPkDnEkeKd_fytwc_9x2Ht2gRUn&index=2

Option byte settings

STM32_Programmer_CLI.exe -c port=SWD mode=UR -ob displ
STM32_Programmer_CLI.exe -c port=SWD mode=UR -ob TZEN=1
STM32_Programmer_CLI.exe -c port=SWD mode=UR -ob SECWM1_PSTRT=0x0 SECWM1_PEND=0x7F SECWM2_PSTRT=0x7F SECWM2_PEND=0x0

Flash the binaries

STM32_Programmer_CLI.exe -c port=SWD mode=UR –d GPIO_IOToggle_TrustZone_NonSecure.elf
STM32_Programmer_CLI.exe -c port=SWD mode=UR –d GPIO_IOToggle_TrustZone_Secure.elf

Read FLASH_NSSR register

STM32_Programmer_CLI.exe -c port=SWD mode=hotplug -r32 0x40022020 4

Provision OEM1KEY key

STM32_Programmer_CLI.exe -c port=SWD mode=hotplug -lockRDP1 0x01234567 0x89ABCDEF

Provision OEM2KEY key

STM32_Programmer_CLI.exe -c port=SWD mode=hotplug -lockRDP2 0xFEDCBA98 0x76543210

RDP level 2

STM32_Programmer_CLI.exe -c port=SWD mode=hotplug -ob RDP=0xCC

Get authentication ID RDP2 to RDP1 regression

STM32_Programmer_CLI.exe -c port=SWD mode=UR -unlockRDP2 0xFEDCBA98 0x76543210

Check RDP level

STM32_Programmer_CLI.exe -c port=SWD mode=hotplug -ob displ 

Unlock the RDP 0.5 regression:

STM32_Programmer_CLI.exe -c port=SWD mode=hotplug -unlockRDP1 0xFEDCBA98 0x76543210

Regression to RDP 0.5

STM32_Programmer_CLI.exe -c port=SWD mode=hotplug –ob RDP=0x55

Flash again the non secure

STM32_Programmer_CLI.exe -c port=SWD mode=hotplug –d GPIO_IOToggle_TrustZone_NonSecure.elf

RDP 0.5 to RDP1

STM32_Programmer_CLI.exe -c port=SWD mode=hotplug -ob RDP=0xDC

Unlock the RDP 0 regression

STM32_Programmer_CLI.exe -c port=SWD mode=hotplug -unlockRDP1 0x01234567 0x89ABCDEF

RDP 0 regression

STM32_Programmer_CLI.exe -c port=SWD mode=hotplug -ob RDP=0xAA

Read FLASH_NSSR register

STM32_Programmer_CLI.exe -c port=SWD mode=hotplug -r32 0x40022020 4

Erase OEM1KEY

STM32_Programmer_CLI.exe -c port=SWD mode=hotplug -lockRDP1 0xFFFFFFFF 0xFFFFFFFF

Erase OEM2KEY

STM32_Programmer_CLI.exe -c port=SWD mode=hotplug -lockRDP2 0xFFFFFFFF 0xFFFFFFFF


RUST

https://jonathanklimt.de/electronics/programming/embedded-rust/rust-on-stm32-2/

https://docs.rs/stm32f1xx-hal/latest/stm32f1xx_hal/index.html

https://github.com/stm32-rs/stm32f1xx-hal/tree/master

rustup update
rustup target install thumbv7m-none-eabi
cargo install cargo-flash
cargo init rusty-blink
openocd -f interface/stlink-v2.cfg -f target/stm32f1x.cfg
cargo flash --release --chip stm32f103c8

Arduino

https://github.com/stm32duino/BoardManagerFiles/raw/main/package_stmicroelectronics_index.json

https://www.phippselectronics.com/blue-pill-programming-via-usb/

https://github.com/stm32duino/Arduino_Core_STM32/wiki/HAL-configuration

https://github.com/Serasidis/STM32_HID_Bootloader/releases

stm32flash.exe -g 0x8000000 -b 115200 -w hid_generic_pc13.bin COM2

IAR Workbench

IAR STM32F401CC.png