Skip to content

Commit 1292053

Browse files
committed
STM32 more information in README file
1 parent c9e0c4f commit 1292053

File tree

1 file changed

+286
-5
lines changed

1 file changed

+286
-5
lines changed

targets/TARGET_STM/README.md

Lines changed: 286 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,65 @@
1-
## README for mbed-os STM32 targets
1+
# README for Mbed OS STM32 targets
22

3-
### MBED Wiki pages
3+
## ST TOOLS
44

5-
https://os.mbed.com/teams/ST/wiki/
5+
### USB drivers
6+
7+
Mandatory: get the latest USB driver in order to make available all the USB interfaces provided by the ST-LINK:
8+
- ST Debug
9+
- Virtual COM port
10+
- ST Bridge interfaces
11+
12+
Default Windows USB drivers will not setup full capabilities.
13+
14+
https://www.st.com/en/development-tools/stsw-link009.html
15+
16+
17+
### ST-Link FW
18+
19+
Mandatory: get the latest ST-Link Firmware:
20+
21+
https://www.st.com/en/development-tools/stsw-link007.html
22+
23+
You could have some issue to connect your board if you didn't install full USB drivers.
24+
25+
26+
Note that with the latest FW version, you are able to check the version number easily with a simple "mbedls":
27+
28+
```
29+
$ mbedls
30+
| platform_name | platform_name_unique | mount_point | serial_port | target_id | interface_version |
31+
|---------------------|------------------------|-------------|-------------|--------------------------|-------------------|
32+
| DISCO_H747I | DISCO_H747I[0] | D: | COM13 | 081402210D03E72132477E08 | V3J7M2 |
33+
| DISCO_L475VG_IOT01A | DISCO_L475VG_IOT01A[0] | E: | COM9 | 07640221683B630A577FF553 | V2J37M26 |
34+
```
635

736
### STM32 Cube
837

938
https://www.st.com/en/embedded-software/stm32cube-mcu-packages.html
1039

11-
This table summarizes the STM32Cube versions currently used :
40+
There is one STM32Cube package for each individual STM32 MCU family.
1241

13-
| STM32 Serie | Cube version | GitHub source |
42+
It includes:
43+
- The hardware abstraction layer (HAL) enabling portability between different STM32 devices via standardized API calls
44+
- Low-layer (LL) APIs, a light-weight, optimized, expert oriented set of APIs designed for both performance and runtime efficiency
45+
- A collection of middleware components including RTOS, USB library, file system, TCP/IP stack, touch-sensing library or graphics library (depending on the STM32 series)
46+
- BSP drivers, based on HAL drivers.
47+
48+
Part of STM32Cube files are copied in each targets/TARGET_STM/TARGET_STM32\<xx\>/STM32Cube_FW directory:
49+
- CMSIS header files in CMSIS sub-directory
50+
- HAL and LL files in STM32\<XX\>xx_HAL_Driver sub-directory
51+
52+
Mbed OS HAL calls ST porting layer, which calls ST HAL and LL API.
53+
54+
Note that all ST HAL and LL files are available:
55+
- you can then develop some applications with direct ST HAL and LL call, even if feature is not supported in Mbed OS
56+
- BSP for LCD, AUDIO, SENSORS, etc... are not available in Mbed OS, but you should be able to use it in your local application.
57+
58+
59+
Each STM32Cube package is also available in Github.
60+
This table summarizes the STM32Cube versions currently used in Mbed OS master branch :
61+
62+
| STM32 Serie | Cube version | Github source |
1463
|-------------|--------------|---------------------------------------------------|
1564
| F0 | 1.9.0 | https://github.com/STMicroelectronics/STM32CubeF0 |
1665
| F1 | 1.6.1 | https://github.com/STMicroelectronics/STM32CubeF1 |
@@ -25,3 +74,235 @@ This table summarizes the STM32Cube versions currently used :
2574
| L4 | 1.11.0 | https://github.com/STMicroelectronics/STM32CubeL4 |
2675
| L5 | 1.1.0 | https://github.com/STMicroelectronics/STM32CubeL5 |
2776
| WB | 1.4.0 | https://github.com/STMicroelectronics/STM32CubeWB |
77+
78+
In Mbed OS repository, we try to minimize the difference between "official" and copied files.
79+
80+
81+
### STM32CubeMX
82+
83+
STM32CubeMX is a graphical tool that allows a very easy configuration of all STM32
84+
85+
https://www.st.com/en/development-tools/stm32cubemx.html
86+
87+
Tool is not used in Mbed OS, but it can be useful for you.
88+
89+
90+
### STM32CubeProgrammer
91+
92+
It provides an easy-to-use and efficient environment for reading, writing and verifying device memory.
93+
94+
https://www.st.com/en/development-tools/stm32cubeprog.html
95+
96+
Tool is not used in Mbed OS, but it can be useful for you.
97+
98+
99+
## STM32 families
100+
101+
### STM32WB
102+
103+
[STM32WB README](TARGET_STM32WB/README.md)
104+
105+
### STM32H7
106+
107+
[STM32H7 README](TARGET_STM32H7/README.md)
108+
109+
110+
111+
## Custom boards
112+
113+
It should be "easy" to add your custom board with a STM32 MCU in Mbed OS
114+
115+
### STM32 organisation
116+
117+
STM32 root directory is https://github.com/ARMmbed/mbed-os/tree/master/targets/TARGET_STM
118+
119+
This contains:
120+
- all STM32 families directories: F0, F1, F2, F3, F4, F7, G0, H7, L0, L1, L4, WB
121+
- Mbed OS porting layer common for all
122+
123+
Each STM32 family contains several "sub-families".
124+
125+
Each STM32 Part Number defines a sub-family: STM32F401 / STM32F407 / STM32F429 / ...
126+
127+
But also each STM32 Part Number with different FLASH size : STM32F401xC / STM32F401xE
128+
129+
Mbed OS porting layer specific for this family are placed here.
130+
131+
Example in TARGET_STM32G0:
132+
- TARGET_STM32G031xx
133+
- TARGET_STM32G071xx
134+
- ...
135+
136+
Each STM32 sub-family contains:
137+
- toolchains files
138+
- board specific files
139+
140+
141+
### Add a custom board
142+
143+
ST provides the complete support for few NUCLEO and DISCO boards.
144+
145+
Locate one of these boards with the minimum difference with your chosen MCU.
146+
147+
Copy paste, and update!
148+
149+
150+
### Board specific files (pinmap)
151+
152+
2 files in Mbed OS:
153+
- PeripheralPins.c
154+
- PinNames.h
155+
156+
It is recommended to use a python script to generate those files
157+
158+
https://github.com/ARMmbed/mbed-os/blob/master/tools/targets/STM32_gen_PeripheralPins.py
159+
160+
STM32CubeMX has to be installed first. Path has to be specified in the `cube_path.json` file.
161+
162+
```
163+
$ python tools/targets/STM32_gen_PeripheralPins.py -h
164+
165+
Script version 1.9
166+
usage: STM32_gen_PeripheralPins.py [-h] [-l | -b | -m xml | -t HW | -c CUSTOM]
167+
168+
Script will generate PeripheralPins.c thanks to the xml files description available in
169+
STM32CubeMX directory defined in 'cube_path.json':
170+
C:\Program Files\STMicroelectronics\STM32Cube\STM32CubeMX
171+
172+
optional arguments:
173+
-h, --help show this help message and exit
174+
-l, --list list available mcu xml files description in STM32CubeMX
175+
-b, --boards list available boards description in STM32CubeMX
176+
-m xml, --mcu xml specify the mcu xml file description in STM32CubeMX to use (use double quotes).
177+
Parameter can be a filter like L496 if you want to parse all L496 chips (-m STM32 to parse all).
178+
-t HW, --target HW specify the board file description in STM32CubeMX to use (use double quotes).
179+
Parameter can be a filter like L496 (only the first file found will be parsed).
180+
-c CUSTOM, --custom CUSTOM
181+
specify a custom board .ioc file description to use (use double quotes).
182+
183+
Once generated, you have to check and comment pins that can not be used (specific HW, internal ADC channels, remove PWM using us ticker timer, ...)
184+
```
185+
186+
How to generate files for a custom boards based on a STM32F427 MCU:
187+
```
188+
$ python tools/targets/STM32_gen_PeripheralPins.py -l | grep F427
189+
STM32F427A(G-I)Hx.xml
190+
STM32F427I(G-I)Hx.xml
191+
STM32F427I(G-I)Tx.xml
192+
STM32F427V(G-I)Tx.xml
193+
STM32F427Z(G-I)Tx.xml
194+
195+
$ python tools/targets/STM32_gen_PeripheralPins.py -m "STM32F427V(G-I)Tx.xml"
196+
197+
Script version 1.9
198+
CubeMX DB version DB.5.0.60
199+
200+
* Output directory: C:\github\mbed\STM32F427V(G-I)Tx
201+
* Generating PeripheralPins.c and PinNames.h with 'STM32F427V(G-I)Tx.xml'
202+
* GPIO file: C:\Program Files\STMicroelectronics\STM32Cube\STM32CubeMX\db\mcu\IP\GPIO-STM32F427_gpio_v1_0_Modes.xml
203+
* I/O pins found: 82 connected: 0
204+
```
205+
206+
### Use of custom_targets.json
207+
208+
https://os.mbed.com/docs/mbed-os/v6.0/porting/porting-a-custom-board.html
209+
210+
Example with a board based on STM32F103C8 (like BluePill):
211+
- MCU_STM32F103x8 generic configuration is already available in targets.json file
212+
213+
```
214+
$ python tools/targets/STM32_gen_PeripheralPins.py -m "STM32F103C(8-B)Tx.xml"
215+
// PeripheralPins.c and PinNames.h template files are created in STM32H745ZITx directory
216+
217+
$ mv STM32F103C\(8-B\)Tx/ TARGET_BLUEPILL_F103C8
218+
// Edit PeripheralPins.c and PinNames.h to match your board configuration
219+
220+
// Create a custom_targets.json with:
221+
{
222+
"BLUEPILL_F103C8": {
223+
"inherits": [
224+
"MCU_STM32F103x8"
225+
],
226+
"overrides": {
227+
"clock_source": "USE_PLL_HSE_XTAL"
228+
},
229+
"device_has_remove": [
230+
"STDIO_MESSAGES"
231+
],
232+
"device_name": "STM32F103C8"
233+
}
234+
}
235+
```
236+
237+
Example with a board based on STM32H745ZI
238+
- this is dual core MCU with CM4 and CM7
239+
- MCU_STM32H745I_CM4 and MCU_STM32H745I_CM7 generic configuration is already available in targets.json file
240+
241+
```
242+
$ python tools/targets/STM32_gen_PeripheralPins.py -m "STM32H745ZITx.xml"
243+
// PeripheralPins.c and PinNames.h template files are created in STM32H745ZITx directory
244+
245+
$ mv STM32H745ZITx TARGET_H745ZI_BOARD
246+
// Edit PeripheralPins.c and PinNames.h to match your board configuration
247+
248+
// Create a custom_targets.json with:
249+
{
250+
"H745ZI_BOARD_CM4": {
251+
"inherits": [
252+
"MCU_STM32H745I_CM4"
253+
],
254+
"extra_labels_add": [
255+
"H745ZI_BOARD"
256+
]
257+
},
258+
"H745ZI_BOARD_CM7": {
259+
"inherits": [
260+
"MCU_STM32H745I_CM7"
261+
],
262+
"extra_labels_add": [
263+
"H745ZI_BOARD"
264+
]
265+
}
266+
}
267+
```
268+
269+
270+
## ST specific implementation
271+
272+
### WiFi configuration
273+
274+
https://github.com/ARMmbed/wifi-ism43362
275+
276+
https://os.mbed.com/teams/ST/wiki/How-to-make-wifi-tests
277+
278+
279+
### Ethernet configuration
280+
281+
Depending on your PHY, you will have to customize several configuration values:
282+
- the number of RX buffers
283+
- the number of TX buffers
284+
- thread size
285+
- PHY address
286+
- media interface
287+
- AutoNegotiation mode
288+
- DuplexMode mode
289+
- Speed mode
290+
- PHY register Offset
291+
- Speed mask information in the PHY status register
292+
- Duplex mask information in the PHY status register
293+
294+
Check the default values in:
295+
https://github.com/ARMmbed/mbed-os/blob/master/features/netsocket/emac-drivers/TARGET_STM/mbed_lib.json
296+
297+
Option is also to define your own `HAL_ETH_MspInit` function,
298+
you then have to add **USE_USER_DEFINED_HAL_ETH_MSPINIT** macro.
299+
300+
301+
302+
## Mbed OS Wiki pages
303+
304+
https://os.mbed.com/teams/ST/wiki/
305+
306+
https://os.mbed.com/teams/ST/wiki/How-to-enable-flash-dual-bank
307+
308+
https://os.mbed.com/teams/ST/wiki/Nucleo-144pins-ethernet-spi-conflict

0 commit comments

Comments
 (0)