Код
#include "stm32f0xx.h"
void SystemInit(void)
{
// Включить тактирование порта C
RCC->AHBENR |= RCC_AHBENR_GPIOCEN;
// 9, 10 выводы - на выход (general purpose output mode)
GPIOC->MODER |= GPIO_MODER_MODER8_0 | GPIO_MODER_MODER9_0;
}
void delay(uint32_t Value)
{
volatile uint32_t Counter = Value;
while(Counter--) { }
}
void led_On(void)
{
GPIOC->BSRR = GPIO_BSRR_BS_9; // Установить бит 9
GPIOC->BSRR = GPIO_BSRR_BS_8;
}
void led_Off(void)
{
GPIOC->BSRR = GPIO_BSRR_BR_9; // Сбросить бит 9
GPIOC->BSRR = GPIO_BSRR_BR_8;
}
int main(void)
{
while(1)
{
led_On();
delay(1000000UL);
led_Off();
delay(1000000UL);
}
}
void SystemInit(void)
{
// Включить тактирование порта C
RCC->AHBENR |= RCC_AHBENR_GPIOCEN;
// 9, 10 выводы - на выход (general purpose output mode)
GPIOC->MODER |= GPIO_MODER_MODER8_0 | GPIO_MODER_MODER9_0;
}
void delay(uint32_t Value)
{
volatile uint32_t Counter = Value;
while(Counter--) { }
}
void led_On(void)
{
GPIOC->BSRR = GPIO_BSRR_BS_9; // Установить бит 9
GPIOC->BSRR = GPIO_BSRR_BS_8;
}
void led_Off(void)
{
GPIOC->BSRR = GPIO_BSRR_BR_9; // Сбросить бит 9
GPIOC->BSRR = GPIO_BSRR_BR_8;
}
int main(void)
{
while(1)
{
led_On();
delay(1000000UL);
led_Off();
delay(1000000UL);
}
}
Makefile:
Код
CC=arm-none-eabi-gcc
AS=arm-none-eabi-as
LD=arm-none-eabi-ld
CCFLAGS=-mcpu=cortex-m0 -mthumb -g
ASFLAGS=-mcpu=cortex-m0 -mthumb -g
OBJS= startup.o \
main.o
main.elf : $(OBJS)
$(LD) $(OBJS) -T linker_script.ld --cref -Map main.map -nostartfiles -o main.elf
main.o: main.c
$(CC) -c $(CCFLAGS) main.c -o main.o
startup.o: startup.s
$(AS) $(ASFLAGS) startup.s -asghl=startup.lst -o startup.o
clean:
rm $(OBJS)
rm main.elf
AS=arm-none-eabi-as
LD=arm-none-eabi-ld
CCFLAGS=-mcpu=cortex-m0 -mthumb -g
ASFLAGS=-mcpu=cortex-m0 -mthumb -g
OBJS= startup.o \
main.o
main.elf : $(OBJS)
$(LD) $(OBJS) -T linker_script.ld --cref -Map main.map -nostartfiles -o main.elf
main.o: main.c
$(CC) -c $(CCFLAGS) main.c -o main.o
startup.o: startup.s
$(AS) $(ASFLAGS) startup.s -asghl=startup.lst -o startup.o
clean:
rm $(OBJS)
rm main.elf
Для отладки использую st-util + gdb:
Код
./st-util
2013-11-14T22:35:54 INFO src/stlink-common.c: Loading device parameters....
2013-11-14T22:35:54 INFO src/stlink-common.c: Device connected is: F0 device, id 0x20006440
2013-11-14T22:35:54 INFO src/stlink-common.c: SRAM size: 0x2000 bytes (8 KiB), Flash: 0x10000 bytes (64 KiB) in pages of 1024 bytes
Chip ID is 00000440, Core ID is 0bb11477.
KARL - should read back as 0x03, not 60 02 00 00
init watchpoints
Listening at *:4242...
2013-11-14T22:35:54 INFO src/stlink-common.c: Loading device parameters....
2013-11-14T22:35:54 INFO src/stlink-common.c: Device connected is: F0 device, id 0x20006440
2013-11-14T22:35:54 INFO src/stlink-common.c: SRAM size: 0x2000 bytes (8 KiB), Flash: 0x10000 bytes (64 KiB) in pages of 1024 bytes
Chip ID is 00000440, Core ID is 0bb11477.
KARL - should read back as 0x03, not 60 02 00 00
init watchpoints
Listening at *:4242...
Код
make
arm-none-eabi-as -mcpu=cortex-m0 -mthumb -g startup.s -asghl=startup.lst -o startup.o
arm-none-eabi-gcc -c -mcpu=cortex-m0 -mthumb -g main.c -o main.o
arm-none-eabi-ld startup.o main.o -T linker_script.ld --cref -Map main.map -nostartfiles -o main.elf
arm-none-eabi-as -mcpu=cortex-m0 -mthumb -g startup.s -asghl=startup.lst -o startup.o
arm-none-eabi-gcc -c -mcpu=cortex-m0 -mthumb -g main.c -o main.o
arm-none-eabi-ld startup.o main.o -T linker_script.ld --cref -Map main.map -nostartfiles -o main.elf
Код
arm-none-eabi-gdb main.elf
(gdb) target remote localhost:4242
Remote debugging using localhost:4242
0xfffffffe in ?? ()
(gdb) target remote localhost:4242
Remote debugging using localhost:4242
0xfffffffe in ?? ()
Код
Chip ID is 00000440, Core ID is 0bb11477.
KARL - should read back as 0x03, not 60 02 00 00
init watchpoints
Listening at *:4242...
GDB connected.
recv: qSupported:qRelocInsn+
query: Supported;qRelocInsn+
send: PacketSize=3fff;qXfer:memory-map:read+
recv: Hg0
send:
recv: ?
send: S05
recv: Hc-1
send:
recv: qC
send:
recv: qAttached
query: Attached;
send:
recv: g
send: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffd8fffffff9fffffffeffffff
recv: qXfer:memory-map:read::0,fff
query: Xfer;memory-map:read::0,fff
Xfer: type:memory-map;op:read;annex:;addr:0;length:4095
send: m<?xml version="1.0"?><!DOCTYPE memory-map PUBLIC "+//IDN gnu.org//DTD GDB Memory Map V1.0//EN" "http://sourceware.org/gdb/gdb-memory-map.dtd"><memory-map> <memory type="rom" start="0x00000000" length="0x10000"/> <memory type="ram" start="0x20000000" length="0x2000"/> <memory type="flash" start="0x08000000" length="0x10000"> <property name="blocksize">0x400</property> </memory> <memory type="ram" start="0x40000000" length="0x1fffffff"/> <memory type="ram" start="0xe0000000" length="0x1fffffff"/> <memory type="rom" start="0x1fffec00" length="0xc00"/> <memory type="rom" start="0x1ffff800" length="0x10"/></memory-map>
recv: qXfer:memory-map:read::27c,d83
query: Xfer;memory-map:read::27c,d83
Xfer: type:memory-map;op:read;annex:;addr:636;length:3459
send: l
recv: mfffffffe,1
send: 00
recv: qTStatus
query: TStatus;
send:
recv: qSymbol::
query: Symbol;:
send:
recv: g
send: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffd8fffffff9fffffffeffffff
recv: qfThreadInfo
query: fThreadInfo;
send:
recv: qL1200000000000000000
send:
recv: qL1200000000000000000
send:
recv: mfffffffe,1
send: 00
recv: mfffffff8,4
send: 80000000
recv: p19
send: 030000c1
recv: mfffffff8,4
send: 80000000
recv: qL1200000000000000000
send:
recv: qL1200000000000000000
send:
recv: m0,2
libusb_submit_transfer(-4)
[!] send_recv
send: 8000
recv: m2,2
libusb_submit_transfer(-4)
[!] send_recv
send: 0000
recv: m4,2
libusb_submit_transfer(-4)
[!] send_recv
send: 8000
recv: m6,2
libusb_submit_transfer(-4)
[!] send_recv
send: 0000
recv: m8,2
libusb_submit_transfer(-4)
[!] send_recv
send: 8000
recv: ma,2
KARL - should read back as 0x03, not 60 02 00 00
init watchpoints
Listening at *:4242...
GDB connected.
recv: qSupported:qRelocInsn+
query: Supported;qRelocInsn+
send: PacketSize=3fff;qXfer:memory-map:read+
recv: Hg0
send:
recv: ?
send: S05
recv: Hc-1
send:
recv: qC
send:
recv: qAttached
query: Attached;
send:
recv: g
send: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffd8fffffff9fffffffeffffff
recv: qXfer:memory-map:read::0,fff
query: Xfer;memory-map:read::0,fff
Xfer: type:memory-map;op:read;annex:;addr:0;length:4095
send: m<?xml version="1.0"?><!DOCTYPE memory-map PUBLIC "+//IDN gnu.org//DTD GDB Memory Map V1.0//EN" "http://sourceware.org/gdb/gdb-memory-map.dtd"><memory-map> <memory type="rom" start="0x00000000" length="0x10000"/> <memory type="ram" start="0x20000000" length="0x2000"/> <memory type="flash" start="0x08000000" length="0x10000"> <property name="blocksize">0x400</property> </memory> <memory type="ram" start="0x40000000" length="0x1fffffff"/> <memory type="ram" start="0xe0000000" length="0x1fffffff"/> <memory type="rom" start="0x1fffec00" length="0xc00"/> <memory type="rom" start="0x1ffff800" length="0x10"/></memory-map>
recv: qXfer:memory-map:read::27c,d83
query: Xfer;memory-map:read::27c,d83
Xfer: type:memory-map;op:read;annex:;addr:636;length:3459
send: l
recv: mfffffffe,1
send: 00
recv: qTStatus
query: TStatus;
send:
recv: qSymbol::
query: Symbol;:
send:
recv: g
send: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffd8fffffff9fffffffeffffff
recv: qfThreadInfo
query: fThreadInfo;
send:
recv: qL1200000000000000000
send:
recv: qL1200000000000000000
send:
recv: mfffffffe,1
send: 00
recv: mfffffff8,4
send: 80000000
recv: p19
send: 030000c1
recv: mfffffff8,4
send: 80000000
recv: qL1200000000000000000
send:
recv: qL1200000000000000000
send:
recv: m0,2
libusb_submit_transfer(-4)
[!] send_recv
send: 8000
recv: m2,2
libusb_submit_transfer(-4)
[!] send_recv
send: 0000
recv: m4,2
libusb_submit_transfer(-4)
[!] send_recv
send: 8000
recv: m6,2
libusb_submit_transfer(-4)
[!] send_recv
send: 0000
recv: m8,2
libusb_submit_transfer(-4)
[!] send_recv
send: 8000
recv: ma,2
На этом все, компилятор пробовал от CodeSourcery и 4.6.3 и 4.7.3 все равно без изменений.