Y
Y
Yu Yu2016-05-08 15:15:25
Microcontrollers
Yu Yu, 2016-05-08 15:15:25

How to blink an LED on STM32 in assembler?

Hello!
I continue to try to study the work of MK according to the textbook https://habrahabr.ru/post/274579/
I did everything the same for my controller. I have STM32F100C4T6B I
forwarded it to the 100th series according to RM, but nothing worked (does not blink, does not even light up).
Help me find the error, please.

@GNU AS

@ Настройки компилятора
.syntax unified    @ тип синтаксиса
.thumb                @ тип используемых инструкций Thumb
.cpu cortex-m3   @ микроконтроллер

.include "STM32F100.INC"   @ файл определений микроконтроллера

@ макрос псевдокоманды MOV32, пока просто используем, не вникая как, что и почему
.macro	MOV32 regnum,number
  MOVW \regnum,:lower16:\number
  MOVT \regnum,:upper16:\number
.endm

@ таблица векторов прерываний
.section .text

.word	0x20010000	@ Вершина стека
.word	Reset+1		@ Вектор сброса

Reset:
    @ включим тактирование GPIOH
    MOV32	R0, RCC_APB2ENR  @ адрес
    MOV32   R1, 0x04     @ значение
    LDR	R2, [R0]		 @ прочитали значение регистра
    ORR	R1, R1, R2       @ логическое, побитовое ИЛИ: R1= R1 ИЛИ R2
    STR	R1, [R0]            @ запись R1 по адресу указанному в R0

    @ установим режим GPIOH PH2
    MOV32	R0, GPIOA_CRL  @ адрес
    MOV32   R1, 0x2000     @ значение
    LDR	R2, [R0]		 @ прочитали значение регистра
    ORR	R1, R1, R2       @ логическое, побитовое ИЛИ: R1= R1 ИЛИ R2
    STR	R1, [R0]            @ запись R1 по адресу указанному в R0

BLINK_LOOP:
    @ включим светодиод
    MOV32	R0, GPIOA_BSRR  @ адрес
    MOV32   R1, 0x08          @ значение
    STR	R1, [R0]          @ запись R1 по адресу указанному в R0
  
    BL	DELAY             @   пауза
  
    @ выключим светодиод
    @MOV32	R0, GPIOA_BSRR  @ адрес
    @MOV32   R1, 0x08 << (1*16)   @ значение 1-размер поля, 16-во второе полуслово
    @STR	R1, [R0]          @ запись R1 по адресу указанному в R0

    BL	DELAY             @   пауза	

    B	BLINK_LOOP         @ делаем цикл

DELAY:
    MOV32	R2, 0x00100000     @ повтор цикла задержки 0x0010 0000 раз.
Delay_loop:	
    SUBS	R2, R2, 1
    BNE	Delay_loop
    BX	LR
.end

ripped out the addresses like this:
@file STM32F100.INC
.equ RCC_APB2ENR, 0x40021018
.equ GPIOA_CRL, 0x40010800
.equ GPIOA_BSRR, 0x40010810

PS I can't leave comments on Habré, so I can't ask the author of this tutorial. How can you contact him?

Answer the question

In order to leave comments, you need to log in

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question