Просто зажечь светодиоды не интересно поэтому мы ими будем мигать с частотой около герца( частота получается приблизительной из-за того что комплилятор может по разному соптимизировать код).
Перейдём в папку наших исходиков
nis@jane ~ $ cd stm32/examples/
Скопируем нулевой пример в новую папку и перейдем в нее
nis@jane ~/stm32/examples $ cp -av 00-enable-led/ 01-blink-led
nis@jane ~/stm32/examples $ cd 01-blink-led/
модифицируем файл main.c добавив в него функцию задержки(т.к. процессор работает после старта на частоте ~ 8МГц) и цикл включения-выключения светодиодов.
Советую обратить внимание на то что переменная delay_tick объявлена как volatile, это сделанно для того чтобы компилятор gcc не упразднил код посчитав его бессмысленным.
Соберем проект
nis@jane ~/stm32/examples/01-blink-led $ make all
arm-softfloat-linux-gnueabi-gcc -g -O2 -mlittle-endian -mthumb -ffreestanding -nostdlib -nostdinc -mcpu=cortex-m3 -DSTM32F10X_MD_VL -I. -I../../stlink/example/libs_stm/inc/base -I../../stlink/example/libs_stm/inc/core_support -I../../stlink/example/libs_stm/inc/device_support -Wl,-T,stm32f100xb_flash.ld -c -o main.o main.c
arm-softfloat-linux-gnueabi-gcc -g -O2 -mlittle-endian -mthumb -ffreestanding -nostdlib -nostdinc -mcpu=cortex-m3 -DSTM32F10X_MD_VL -I. -I../../stlink/example/libs_stm/inc/base -I../../stlink/example/libs_stm/inc/core_support -I../../stlink/example/libs_stm/inc/device_support -Wl,-T,stm32f100xb_flash.ld -o firmware.elf main.o -L.
arm-softfloat-linux-gnueabi-objcopy -O binary firmware.elf firmware.bin
Подключим плату к пк и зальем новую прошивку.
nis@jane ~/stm32/examples/01-blink-led $ make write
2012-02-21T10:36:25 INFO src/stlink-common.c: Loading device parameters....
2012-02-21T10:36:25 INFO src/stlink-common.c: Device connected is: F1 Medium-density Value Line device
2012-02-21T10:36:25 INFO src/stlink-common.c: SRAM size: 0x2000 bytes (8 KiB), Flash: 0x20000 bytes (128 KiB) in pages of 1024 bytes
2012-02-21T10:36:25 INFO src/stlink-sg.c: Successfully opened a stlink v1 debugger
2012-02-21T10:36:25 INFO src/stlink-common.c: Attempting to write 144 (0x90) bytes to stm32 address: 134217728 (0x8000000)
2012-02-21T10:36:25 INFO src/stlink-common.c: Erasing flash page at addr: 0x8000000
2012-02-21T10:36:25 INFO src/stlink-common.c: Successfully unlocked flash
2012-02-21T10:36:25 INFO src/stlink-common.c: Finished erasing 1 pages of 1024 (0x400) bytes
2012-02-21T10:36:25 INFO src/stlink-common.c: Starting Flash write for VL core id
2012-02-21T10:36:25 INFO src/stlink-common.c: Successfully loaded flash loader in sram
2012-02-21T10:36:25 INFO src/stlink-common.c: Writing flash block 0 of size 64 (0x40)
2012-02-21T10:36:25 INFO src/stlink-common.c: Successfully unlocked flash
2012-02-21T10:36:25 INFO src/stlink-common.c: Writing flash block 1 of size 64 (0x40)
2012-02-21T10:36:25 INFO src/stlink-common.c: Successfully unlocked flash
2012-02-21T10:36:25 INFO src/stlink-common.c: Writing flash block 2 of size 64 (0x40)
2012-02-21T10:36:25 INFO src/stlink-common.c: Successfully unlocked flash
2012-02-21T10:36:25 INFO src/stlink-common.c: Starting verification of write complete
2012-02-21T10:36:25 INFO src/stlink-common.c: Flash written and verified! jolly good!
Утилита прошивки сообщила нам что всё ок и дейтвительно светодиоды мигают с частотой примерно 1 Гц. множитель 2000 выбран из расчёта 4 такта на каждую итерацию while. Листинг дизассемблера тому подтверждение.
08000008 <delay_ms>:
8000008: f44f 63fa mov.w r3, #2000 ; 0x7d0
800000c: fb03 f000 mul.w r0, r3, r0
8000010: b082 sub sp, #8
8000012: 9001 str r0, [sp, #4]
8000014: 9b01 ldr r3, [sp, #4]
8000016: 1e5a subs r2, r3, #1
8000018: 9201 str r2, [sp, #4]
800001a: 2b00 cmp r3, #0
800001c: d1fa bne.n 8000014 <delay_ms+0xc>
800001e: b002 add sp, #8
8000020: 4770 bx lr
8000022: bf00 nop
И на последок видео.
Перейдём в папку наших исходиков
nis@jane ~ $ cd stm32/examples/
Скопируем нулевой пример в новую папку и перейдем в нее
nis@jane ~/stm32/examples $ cp -av 00-enable-led/ 01-blink-led
nis@jane ~/stm32/examples $ cd 01-blink-led/
модифицируем файл main.c добавив в него функцию задержки(т.к. процессор работает после старта на частоте ~ 8МГц) и цикл включения-выключения светодиодов.
Советую обратить внимание на то что переменная delay_tick объявлена как volatile, это сделанно для того чтобы компилятор gcc не упразднил код посчитав его бессмысленным.
Соберем проект
arm-softfloat-linux-gnueabi-gcc -g -O2 -mlittle-endian -mthumb -ffreestanding -nostdlib -nostdinc -mcpu=cortex-m3 -DSTM32F10X_MD_VL -I. -I../../stlink/example/libs_stm/inc/base -I../../stlink/example/libs_stm/inc/core_support -I../../stlink/example/libs_stm/inc/device_support -Wl,-T,stm32f100xb_flash.ld -c -o main.o main.c
arm-softfloat-linux-gnueabi-gcc -g -O2 -mlittle-endian -mthumb -ffreestanding -nostdlib -nostdinc -mcpu=cortex-m3 -DSTM32F10X_MD_VL -I. -I../../stlink/example/libs_stm/inc/base -I../../stlink/example/libs_stm/inc/core_support -I../../stlink/example/libs_stm/inc/device_support -Wl,-T,stm32f100xb_flash.ld -o firmware.elf main.o -L.
arm-softfloat-linux-gnueabi-objcopy -O binary firmware.elf firmware.bin
Подключим плату к пк и зальем новую прошивку.
2012-02-21T10:36:25 INFO src/stlink-common.c: Loading device parameters....
2012-02-21T10:36:25 INFO src/stlink-common.c: Device connected is: F1 Medium-density Value Line device
2012-02-21T10:36:25 INFO src/stlink-common.c: SRAM size: 0x2000 bytes (8 KiB), Flash: 0x20000 bytes (128 KiB) in pages of 1024 bytes
2012-02-21T10:36:25 INFO src/stlink-sg.c: Successfully opened a stlink v1 debugger
2012-02-21T10:36:25 INFO src/stlink-common.c: Attempting to write 144 (0x90) bytes to stm32 address: 134217728 (0x8000000)
2012-02-21T10:36:25 INFO src/stlink-common.c: Erasing flash page at addr: 0x8000000
2012-02-21T10:36:25 INFO src/stlink-common.c: Successfully unlocked flash
2012-02-21T10:36:25 INFO src/stlink-common.c: Finished erasing 1 pages of 1024 (0x400) bytes
2012-02-21T10:36:25 INFO src/stlink-common.c: Starting Flash write for VL core id
2012-02-21T10:36:25 INFO src/stlink-common.c: Successfully loaded flash loader in sram
2012-02-21T10:36:25 INFO src/stlink-common.c: Writing flash block 0 of size 64 (0x40)
2012-02-21T10:36:25 INFO src/stlink-common.c: Successfully unlocked flash
2012-02-21T10:36:25 INFO src/stlink-common.c: Writing flash block 1 of size 64 (0x40)
2012-02-21T10:36:25 INFO src/stlink-common.c: Successfully unlocked flash
2012-02-21T10:36:25 INFO src/stlink-common.c: Writing flash block 2 of size 64 (0x40)
2012-02-21T10:36:25 INFO src/stlink-common.c: Successfully unlocked flash
2012-02-21T10:36:25 INFO src/stlink-common.c: Starting verification of write complete
2012-02-21T10:36:25 INFO src/stlink-common.c: Flash written and verified! jolly good!
Утилита прошивки сообщила нам что всё ок и дейтвительно светодиоды мигают с частотой примерно 1 Гц. множитель 2000 выбран из расчёта 4 такта на каждую итерацию while. Листинг дизассемблера тому подтверждение.
08000008 <delay_ms>:
8000008: f44f 63fa mov.w r3, #2000 ; 0x7d0
800000c: fb03 f000 mul.w r0, r3, r0
8000010: b082 sub sp, #8
8000012: 9001 str r0, [sp, #4]
8000014: 9b01 ldr r3, [sp, #4]
8000016: 1e5a subs r2, r3, #1
8000018: 9201 str r2, [sp, #4]
800001a: 2b00 cmp r3, #0
800001c: d1fa bne.n 8000014 <delay_ms+0xc>
800001e: b002 add sp, #8
8000020: 4770 bx lr
8000022: bf00 nop
И на последок видео.
Комментариев нет:
Отправить комментарий