Ich verwende die Keil MDK IDE Version 5.31.0 und schaffe es anhand der
Einstellungen leider nicht, dass mein STM32F103C8 einen automatischen
Reset nach dem Downloaden per SWDIO/SWCLK erhält.
Nach kurzem googlen hat anscheinend jemand ein sehr ähnliches Problem:
https://community.arm.com/developer/tools-software/tools/f/keil-forum/44063/mdk-arm-5-28-problem-with-reset-and-run
Ich verwende einen ST-Link V2 (Klon) mit Firmware V2J35S7 (die mir Keil
angeboten hat).
Hmm, kann doch nicht sein, dass dieser Fehler (falls es denn ein Bug
ist) bei Keil noch niemandem aufgefallen ist? Oder hängt das mit dem
ST-Link Klon zusammen?
Mein Beispielprogramm:
1 | #include "stm32f10x.h"
|
2 | #include <stdbool.h>
|
3 | #include <stdint.h>
|
4 |
|
5 | void wait(volatile uint32_t cnt);
|
6 |
|
7 | void wait(volatile uint32_t cnt) {
|
8 | while(cnt > 0) {
|
9 | __ASM("nop");
|
10 | cnt--;
|
11 | }
|
12 | }
|
13 |
|
14 | int main(void) {
|
15 |
|
16 | /* Enable Clock for GPIO Port C */
|
17 | RCC->APB2ENR |= RCC_APB2ENR_IOPCEN;
|
18 |
|
19 | /* GPIO Port C Pin 13 Push-Pull */
|
20 | GPIOC->CRH &= ~( GPIO_CRH_CNF13_0 | GPIO_CRH_CNF13_1 );
|
21 |
|
22 | /* GPIO Port C Pin 13 50MHz Output Mode */
|
23 | GPIOC->CRH |= ( GPIO_CRH_MODE13_0 | GPIO_CRH_MODE13_1 );
|
24 |
|
25 | while(true) {
|
26 | GPIOC->ODR |= GPIO_ODR_ODR13;
|
27 | wait(1000000);
|
28 | GPIOC->ODR &= (uint16_t)( ~GPIO_ODR_ODR13 );
|
29 | wait(1000000);
|
30 | }
|
31 | }
|
Sobald ich auf dem "Blue-Pill"-Board den Reset-Schalter betätige bzw. in
Keil in den Debug-Modus wechsle (und dann gleich wieder rausgehe),
blinkt die LED einwandfrei.
Nur wenn ich auf "Download (F8)" in Keil klicke, wird das Programm zwar
geladen:
1 | *** Using Compiler 'V6.14', folder: 'C:\Keil_v5\ARM\ARMCLANG\Bin'
|
2 | Rebuild target 'Target 1'
|
3 | compiling main.c...
|
4 | assembling startup_stm32f10x_md.s...
|
5 | compiling system_stm32f10x.c...
|
6 | linking...
|
7 | Program Size: Code=712 RO-data=252 RW-data=0 ZI-data=1632
|
8 | FromELF: creating hex file...
|
9 | ".\Objects\ProjectFile.axf" - 0 Error(s), 0 Warning(s).
|
10 | Build Time Elapsed: 00:00:01
|
11 | Load "C:\\Users\\test\\Documents\\STM32TestProject\\Objects\\ProjectFile.axf"
|
12 | Full Chip Erase Done.
|
13 | Programming Done.
|
14 | Verify OK.
|
15 | Application running ...
|
16 | Flash Load finished at 20:15:28
|
aber es tut sich nichts.
Ich verwende von Keil die Startup-Datei sowie "CMSIS CORE" für die
Registerdefinitionen.
In "Flash -> Configure Flash Tools -> Settings -> Flash Download" ist
"Program", "Verify" und "Reset and Run" aktiviert.
Jemand eine Idee?