Skip to content

Commit 161fb7d

Browse files
committed
Added support to High Density F103 devices such as STM32F103RCT6
High density F103 devices have a 2kB page size, while LOW and MEDIUM F103 devices have a 1kB page size.
1 parent b27e6d1 commit 161fb7d

File tree

6 files changed

+47
-178
lines changed

6 files changed

+47
-178
lines changed

README.md

+13-8
Original file line numberDiff line numberDiff line change
@@ -78,8 +78,8 @@ You might need to reboot or run ```udevadm control --reload-rules``` and replug
7878

7979
### Windows examples:
8080

81-
```D:\STM32_HID_bootloader\cli>make clean``` Clears the previous generated files
82-
```D:\STM32_HID_bootloader\cli>make``` Creates the **hid-flash.exe** file
81+
```[YOUR_HDD_PATH]\STM32_HID_bootloader\cli>make clean``` Clears the previous generated files
82+
```[YOUR_HDD_PATH]\STM32_HID_bootloader\cli>make``` Creates the **hid-flash.exe** file
8383

8484

8585
## Bootloader folder
@@ -88,19 +88,24 @@ You might need to reboot or run ```udevadm control --reload-rules``` and replug
8888
### Examples:
8989
***STM32F10x***
9090

91-
```D:\STM32_HID_bootloader\bootloader\F1>make clean``` Clears the previous generated files
92-
```D:\STM32_HID_bootloader\bootloader\F1>make``` Creates the **hid_bootloader.bin** file
91+
```[YOUR_HDD_PATH]\STM32_HID_bootloader\bootloader\F1>make clean``` Clears the previous generated files
92+
```[YOUR_HDD_PATH]\STM32_HID_bootloader\bootloader\F1>make generic-pc13``` Creates the **hid_bootloader.bin** file, assigning the LED to pin PC13. Edit the ***make_all.bat*** file to see all supported pin options.
93+
94+
95+
If you want to use a ***High Density Device*** such as ***STM32F103RCT6**, then you have to add an extra argument to the ```make``` command.
96+
97+
**Example:** ```[YOUR_HDD_PATH]\STM32_HID_bootloader\bootloader\F1>make generic-pd2 PAGE_SIZE=2048``` Creates the **hid_bootloader.bin** file, assigning the LED to pin PD2. Edit the ***make_all_hd.bat*** file to see all supported pin options.
9398

9499

95100

96101
***STM32F4xx***
97102

98-
```D:\STM32_HID_bootloader\bootloader\F4>make clean``` Clears the previous generated files
99-
```D:\STM32_HID_bootloader\bootloader\F4>make``` Creates the **hid_bootloader.bin** file
103+
```[YOUR_HDD_PATH]\STM32_HID_bootloader\bootloader\F4>make clean``` Clears the previous generated files
104+
```[YOUR_HDD_PATH]\STM32_HID_bootloader\bootloader\F4>make``` Creates the **hid_bootloader.bin** file
100105

101-
The binary file can be found in:
106+
After compiling, the binary file can be found in:
102107

103-
```D:\STM32_HID_bootloader\bootloader\F4\build\hid_bootloader.bin```
108+
```[YOUR_HDD_PATH]\STM32_HID_bootloader\bootloader\F4\build\hid_bootloader.bin```
104109

105110
### Screenshot
106111

bootloader/F1/Makefile

+6-1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,10 @@ DEVICE = STM32F10X_MD
44

55
VECTOR_TABLE_OFFSET = 0x0000
66

7+
# The default Flash Page size (Sector size) for LOW and MEDIUM STM32F103 devices is 1024 bytes
8+
# High Density STM32F103 devices have 2 kB Flash Page size
9+
PAGE_SIZE = 1024
10+
711
C_SRCS = Src/main.c Src/usb.c Src/hid.c Src/led.c Src/flash.c
812

913
# Be silent per default, but 'make V=1' will show all compiler calls.
@@ -33,6 +37,7 @@ CFLAGS += -D$(DEVICE)
3337
CFLAGS += -DVECTOR_TABLE_OFFSET=$(VECTOR_TABLE_OFFSET)
3438
CFLAGS += -nostdlib
3539
CFLAGS += $(TARGETFLAGS)
40+
CFLAGS += -DPAGE_SIZE=$(PAGE_SIZE)
3641

3742
LDFLAGS += -Wl,-Map=$(BUILD_DIR)/$(TARGET).map,--cref
3843
LDFLAGS += -Wl,--gc-sections
@@ -80,7 +85,7 @@ generic-pb12: $(SRCS) clean gccversion build_generic-pb12 copy_generic-pb12 info
8085
mini-stm32v3: $(SRCS) clean gccversion build_mini-stm32v3 copy_mini-stm32v3 info size
8186

8287
build_maple-mini: TARGETFLAGS= -DTARGET_MAPLE_MINI
83-
build_maple-mini: LINKER_SCRIPT=STM32F103CBT6.ld
88+
build_maple-mini: LINKER_SCRIPT=STM32F103C8T6.ld
8489
build_maple-mini: $(BUILD_DIR)/$(TARGET).elf $(BUILD_DIR)/$(TARGET).bin
8590
copy_maple_mini: $(BIN_DIR)
8691
$(ECHO) "COPY $(BIN_DIR)/hid_maple_mini.bin"

bootloader/F1/STM32F103CBT6.ld

-139
This file was deleted.

bootloader/F1/Src/hid.c

+17-6
Original file line numberDiff line numberDiff line change
@@ -36,18 +36,26 @@
3636
/* Flash memory base address */
3737
#define FLASH_BASE_ADDRESS 0x08000000
3838

39-
/* This should be the last page taken by the bootloader */
39+
/* *
40+
* PAGE_SIZE : Flash Page size
41+
* Low and MEDIUM Density F103 devices have 1 kB Flash page
42+
* High Density F103 devices have 2 kB Flash page
43+
*
44+
* PAGEMIN : This should be the last page taken by the bootloader
45+
* (2 * 1024) or (1 * 2048) In any case, the bootloader size is 2048 bytes
46+
*/
47+
#if (PAGE_SIZE == 2048)
48+
#define MIN_PAGE 1
49+
#else
4050
#define MIN_PAGE 2
51+
#endif
4152

4253
/* Maximum packet size */
4354
#define MAX_PACKET_SIZE 8
4455

4556
/* Command size */
4657
#define COMMAND_SIZE 64
4758

48-
/* Page size */
49-
#define PAGE_SIZE 1024
50-
5159
/* Buffer table offsset in PMA memory */
5260
#define BTABLE_OFFSET (0x00)
5361

@@ -276,10 +284,13 @@ static void HIDUSB_HandleData(uint8_t *data)
276284
PAGE_SIZE / 2);
277285
CurrentPage++;
278286
CurrentPageOffset = 0;
279-
USB_SendData(ENDP1, (uint16_t *) Command,
280-
sizeof (Command));
281287
LED1_OFF;
282288
}
289+
290+
if((CurrentPageOffset == 0)||(CurrentPageOffset == 1024)){
291+
USB_SendData(ENDP1, (uint16_t *) Command,
292+
sizeof (Command));
293+
}
283294
}
284295

285296
void USB_Reset(void)

bootloader/F1/make_all_hd.bat

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
make generic-pc13 PAGE_SIZE=2048
2+
make generic-pd2 PAGE_SIZE=2048
3+
make generic-pd1 PAGE_SIZE=2048
4+
make generic-pa1 PAGE_SIZE=2048
5+
make generic-pb9 PAGE_SIZE=2048
6+
make generic-pe2 PAGE_SIZE=2048
7+
make generic-pa9 PAGE_SIZE=2048
8+
make generic-pe5 PAGE_SIZE=2048
9+
make generic-pb7 PAGE_SIZE=2048
10+
make generic-pb0 PAGE_SIZE=2048
11+
make generic-pb12 PAGE_SIZE=2048

bootloader/F4/Src/main.c

-24
Original file line numberDiff line numberDiff line change
@@ -169,33 +169,9 @@ int main(void)
169169

170170
/* USER CODE BEGIN 2 */
171171

172-
173-
174-
175-
176-
177-
178-
179-
180172
static volatile uint32_t current_Page = (USER_CODE_OFFSET / 1024);
181173
static volatile uint16_t currentPageOffset = 0;
182174

183-
184-
185-
186-
187-
188-
189-
190-
191-
192-
193-
194-
195-
196-
197-
198-
199175
/* USER CODE END 2 */
200176

201177
/* Infinite loop */

0 commit comments

Comments
 (0)