Например TDA7294

Форум РадиоКот • Просмотр темы - Настройка USART в STM32 (STM32F103VBT6), Assembler.
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Сб авг 09, 2025 07:58:39

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 50 ]    , 2,  
Автор Сообщение
Не в сети
 Заголовок сообщения: XYZ!
СообщениеДобавлено: Вт мар 11, 2014 00:32:44 
Это не хвост, это антенна
Аватар пользователя

Карма: 12
Рейтинг сообщений: 98
Зарегистрирован: Вс дек 02, 2012 03:13:48
Сообщений: 1429
Откуда: Калининград
Рейтинг сообщения: 0
Эх, вспоминается молодость. Объектно-ориентированный TASM под DOS .

Оффтоп вопрос про "профессионально на ASM".

Объекты на ASM научился создавать?
Выделять память в HEAP?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Настройка USART в STM32 (STM32F103VBT6), Assembler.
СообщениеДобавлено: Вт мар 11, 2014 01:11:24 
Мучитель микросхем

Карма: 5
Рейтинг сообщений: 50
Зарегистрирован: Ср янв 04, 2012 11:57:40
Сообщений: 409
Откуда: Алчевск
Рейтинг сообщения: 0
В DipTrace в предварительном просмотре страницы (там где печать) выбрать "сохранить" и поставить побольше dpi (500-1000). Файл bmp или jpeg отлично видно.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Настройка USART в STM32 (STM32F103VBT6), Assembler.
СообщениеДобавлено: Вт мар 11, 2014 01:37:16 
Открыл глаза
Аватар пользователя

Карма: 1
Рейтинг сообщений: 10
Зарегистрирован: Пт янв 10, 2014 02:05:13
Сообщений: 52
Откуда: Воронеж
Рейтинг сообщения: 0
Цитата:
6 mov R10,#0 ;Константы.
7 mov R11,#1


А это зачем? Явно AVR-овский подход. Для ARM в этом нет никакого смысла и выигрыша.
Тут все ALU-команды в опкоде содержат 8 бит immediate-данных, и сдвиг для них.
Так что в командах можно сразу писать #1 или #0 - на размер кода не повлияет.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Настройка USART в STM32 (STM32F103VBT6), Assembler.
СообщениеДобавлено: Вт мар 11, 2014 08:56:56 
Друг Кота
Аватар пользователя

Карма: 30
Рейтинг сообщений: 156
Зарегистрирован: Пн июл 28, 2008 22:12:01
Сообщений: 3604
Рейтинг сообщения: 0
Sergi, спасибо . Не искал , ибо нужды пока не было...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Настройка USART в STM32 (STM32F103VBT6), Assembler.
СообщениеДобавлено: Пт мар 14, 2014 18:38:11 
Грызет канифоль

Карма: 1
Рейтинг сообщений: 21
Зарегистрирован: Пн май 16, 2011 10:54:32
Сообщений: 299
Откуда: Красноярск
Рейтинг сообщения: 0
Возник вопрос насчет этого:
kisssko писал(а):
Цитата:
6 mov R10,#0 ;Константы.
7 mov R11,#1


А это зачем? Явно AVR-овский подход. Для ARM в этом нет никакого смысла и выигрыша.
Тут все ALU-команды в коде содержат 8 бит immediate-данных, и сдвиг для них.
Так что в командах можно сразу писать #1 или #0 - на размер кода не повлияет.

Смог заменить
Код:
cmp    R1,  R11
на
Код:
cmp    R1#1
Все скомпилировать. Теоретически - работает. А как поступить с bit-band-ом? Как заменить эту строку?
Код:
str    R11[R0]
В R11 константа 1. R0 - адрес побитовой адресации. Перебрал множество вариантов этой команды + суффиксы и разный синтаксис, так и не удалось удачно скомпилировать. А ради этого оставлять целый регистр - не хочется.

_________________
Все можно сделать, было бы желание!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Настройка USART в STM32 (STM32F103VBT6), Assembler.
СообщениеДобавлено: Пт мар 14, 2014 19:58:59 
Открыл глаза
Аватар пользователя

Карма: 1
Рейтинг сообщений: 10
Зарегистрирован: Пт янв 10, 2014 02:05:13
Сообщений: 52
Откуда: Воронеж
Рейтинг сообщения: 0
Цитата:
cmp R1, #1

Да, так правильно. Тем более, что для старших регистров (r8-r12) генерится 32-битная команда (кроме некоторых команд).
Вообще, для ARM нет нужды хранить константы в регистрах. Если уж так хочется чем то занять регистры,
то лучше часто используемыми адресами переменных. В одном на несколько рядом лежащих переменных, и использовать смещения.
Код:
ldr r1, [r0, #4]

Вот так возможности архитектуры будут использоваться более полно.

А ещё вот:
Цитата:
Instructions encoded in 16 bit when using registers R0-R7

ADR Rd, <label> (range 0 to 1020)
<ADDS|SUBS|MOVS> Rd, #imm8
<ADDS|SUBS> Rd, Rn, #imm3
<ADDS|SUBS> Rd, Rn, Rm
<ADCS|ANDS|EORS|BICS|MVNS|ORRS|SBCS|UXTB|UXTH|MULS> Rd, Rm (MULS may be slower than MUL on some CPUs)
RSBS Rd, Rn, #0
<REV|REV16|REVSH> Rd, Rm
<ASRS|LSRS|LSLS> Rn, Rm, #imm5
CMP Rn, #imm8
<CMP|CMN|TST> Rn, Rm (Rm can be any register for CMP)
<LDM|STM> Rn!, <registers>
<LDR|STR>{H|B} Rt, [Rn{, #imm5}]
<LDR|STR>{H|B} Rt, [Rn, Rm ]
LDRS<H|B> Rt, [Rn, Rm]
LDR Rt, <label> (0-1020)
<PUSH|POP> <registers>
IT{x{y{z}}} <cond>
CB{N}Z Rn, <label> (range 0 to 126)
B<cond> <label> (range -256 to 254)
B <label> (range -2048 to 2046)


Instructions encoded in 16 bit using registers R0-R15

MOV Rd, Rm
ADD Rd, Rm
BLX Rm
BX Rm


Отсюда


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Настройка USART в STM32 (STM32F103VBT6), Assembler.
СообщениеДобавлено: Сб мар 15, 2014 15:51:46 
Грызет канифоль

Карма: 1
Рейтинг сообщений: 21
Зарегистрирован: Пн май 16, 2011 10:54:32
Сообщений: 299
Откуда: Красноярск
Рейтинг сообщения: 0
kisssko писал(а):
Цитата:
cmp R1, #1

Да, так правильно. Тем более, что для старших регистров (r8-r12) генерится 32-битная команда (кроме некоторых команд).
Вообще, для ARM нет нужды хранить константы в регистрах. Если уж так хочется чем то занять регистры,
то лучше часто используемыми адресами переменных. В одном на несколько рядом лежащих переменных, и использовать смещения.
Код:
ldr r1, [r0, #4]

Вот так возможности архитектуры будут использоваться более полно.

А ещё вот:
Цитата:
Instructions encoded in 16 bit when using registers R0-R7

ADR Rd, <label> (range 0 to 1020)
<ADDS|SUBS|MOVS> Rd, #imm8
<ADDS|SUBS> Rd, Rn, #imm3
<ADDS|SUBS> Rd, Rn, Rm
<ADCS|ANDS|EORS|BICS|MVNS|ORRS|SBCS|UXTB|UXTH|MULS> Rd, Rm (MULS may be slower than MUL on some CPUs)
RSBS Rd, Rn, #0
<REV|REV16|REVSH> Rd, Rm
<ASRS|LSRS|LSLS> Rn, Rm, #imm5
CMP Rn, #imm8
<CMP|CMN|TST> Rn, Rm (Rm can be any register for CMP)
<LDM|STM> Rn!, <registers>
<LDR|STR>{H|B} Rt, [Rn{, #imm5}]
<LDR|STR>{H|B} Rt, [Rn, Rm ]
LDRS<H|B> Rt, [Rn, Rm]
LDR Rt, <label> (0-1020)
<PUSH|POP> <registers>
IT{x{y{z}}} <cond>
CB{N}Z Rn, <label> (range 0 to 126)
B<cond> <label> (range -256 to 254)
B <label> (range -2048 to 2046)


Instructions encoded in 16 bit using registers R0-R15

MOV Rd, Rm
ADD Rd, Rm
BLX Rm
BX Rm


Отсюда

Я так и не смог здесь найти ответа на свой вопрос, как заменить строку
Код:
STR   R11, [R0]

на что-то типа STR #1, [R0] (Эта конструкция не работает). Тут http://we.easyelectronics.ru/STM32/asm-v-stm32-nachalo.html вообще пишут, что нужно держать константы в памяти.

_________________
Все можно сделать, было бы желание!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Настройка USART в STM32 (STM32F103VBT6), Assembler.
СообщениеДобавлено: Сб мар 15, 2014 19:27:45 
Открыл глаза
Аватар пользователя

Карма: 1
Рейтинг сообщений: 10
Зарегистрирован: Пт янв 10, 2014 02:05:13
Сообщений: 52
Откуда: Воронеж
Рейтинг сообщения: 0
Вадиматоричик писал(а):
Я так и не смог здесь найти ответа на свой вопрос, как заменить строку
Код:
STR   R11, [R0]

на что-то типа STR #1, [R0] (Эта конструкция не работает). Тут http://we.easyelectronics.ru/STM32/asm-v-stm32-nachalo.html вообще пишут, что нужно держать константы в памяти.


Тут не изменить ничего.
8-битные константы удобны только для команд обработки данных, типа cmp, tst, add, sub.
Константы типа 0 и 1 как раз и нужны чаще всего для проверки/сравнения.
И вот тут удобнее использовать иммедиейт, чем держать их в регистрах.

LDR/STR могут выгружать/загружать из/в памяти только регистры.
В иммедиейт для них можно задать дополнительное смещение к адресу.

Сложные 32-битные константы действительно удобнее держать в памяти.
8-битные удобнее задавать в иммедиейте и использовать с командами обработки данных.

Для записи их в память нужно сначала поместить в какой нибудь временный регистр командой mov.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Настройка USART в STM32 (STM32F103VBT6), Assembler.
СообщениеДобавлено: Пн мар 17, 2014 14:15:00 
Грызет канифоль

Карма: 1
Рейтинг сообщений: 21
Зарегистрирован: Пн май 16, 2011 10:54:32
Сообщений: 299
Откуда: Красноярск
Рейтинг сообщения: 0
Решил переписать свою библиотеку под монохромный экран с AVR на STM с нуля. Но столкнулся с проблемой иерархии файлов. Ни в одной статье-мануале не уделяется должного внимания подключению внешних файлов. Удалось лишь подключить файл с адресами регистров и бит.
Код:
                     get    stm32f10x.s                               ;Заголовочный файл.

А как например разбить программу? Не хочется скакать по огромному файлу исправляя пару строк модульного кода. И еще. Если я как-нибудь именую регистры в одном файле, то почему эти обозначения не работают в другом? Например:
Код:
;Имена регистрам.----------                              
Temp       RN    R0                                            ;Для мелких операций.
Pointer    RN    R1                                            ;Адресс (указатель).
Data       RN    R2                                            ;Важные данные.
One        RN    R11                                           ;1.

_________________
Все можно сделать, было бы желание!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Настройка USART в STM32 (STM32F103VBT6), Assembler.
СообщениеДобавлено: Пн мар 17, 2014 17:50:13 
Открыл глаза
Аватар пользователя

Карма: 1
Рейтинг сообщений: 10
Зарегистрирован: Пт янв 10, 2014 02:05:13
Сообщений: 52
Откуда: Воронеж
Рейтинг сообщения: 0
Вадиматоричик писал(а):
Решил переписать свою библиотеку под монохромный экран с AVR на STM с нуля. Но столкнулся с проблемой иерархии файлов. Ни в одной статье-мануале не уделяется должного внимания подключению внешних файлов. Удалось лишь подключить файл с адресами регистров и бит.
Код:
                     get    stm32f10x.s                               ;Заголовочный файл.



Смотря какой ассембер. В GAS и Keil по разному. В Keil есть неплохой мануал.

Спойлер
Цитата:
GET or INCLUDE
ARM Compiler toolchain v5.02 for µVision Assembler Reference

Home > Directives Reference > GET or INCLUDE

GET or INCLUDE
The GET directive includes a file within the file being assembled. The included file is assembled at the location of the GET directive. INCLUDE is a synonym for GET.

Syntax
GET filename
where:

filename
is the name of the file to be included in the assembly. The assembler accepts pathnames in either UNIX or MS-DOS format.

Usage
GET is useful for including macro definitions, EQUs, and storage maps in an assembly. When assembly of the included file is complete, assembly continues at the line following the GET directive.

By default the assembler searches the current place for included files. The current place is the directory where the calling file is located. Use the -i assembler command line option to add directories to the search path. File names and directory names containing spaces must not be enclosed in double quotes ( " " ).

The included file can contain additional GET directives to include other files.

If the included file is in a different directory from the current place, this becomes the current place until the end of the included file. The previous current place is then restored.

GET cannot be used to include object files.

Examples
AREA Example, CODE, READONLY
GET file1.s ; includes file1 if it exists
; in the current place.
GET c:\project\file2.s ; includes file2
GET c:\Program files\file3.s ; space is permitted
See also
Reference
INCBIN

Nesting directives.

Copyright © 2011-2012 ARM. All rights reserved. ARM DUI 0588B
Non-Confidential ID062912
PDF version
Home > Directives Reference > GET or INCLUDE

Copyright © Keil, An ARM Company. All rights reserved


[/spoiler]
Вадиматоричик писал(а):
А как например разбить программу? Не хочется скакать по огромному файлу исправляя пару строк модульного кода. И еще. Если я как-нибудь именую регистры в одном файле, то почему эти обозначения не работают в другом? Например:
Код:
;Имена регистрам.----------                              
Temp       RN    R0                                            ;Для мелких операций.
Pointer    RN    R1                                            ;Адресс (указатель).
Data       RN    R2                                            ;Важные данные.
One        RN    R11                                           ;1.


Нужно инклудить для каждого файла, как и в Си. Естественно, инклудить
по нескольку раз только файлы с определениями, вроде EQU, и прочими
макросами. Файлы с кодом дублировать нельзя. Ещё, если разбивать на файлы,
нужно экспорт функций прописывать. И импорт, где будут использоваться.

Регистры R0-R3 используются стандартно для передачи параметров функции.
Завязки тогда лучше делать начиная с R4. А R0-R3? динамически, когда не используются
для параметров. При вызове библиотечной функции нужно сохранять в стёк
все используемые регистры, кроме R0-R3, R13(SP), R15(PC). И всегда R14(LR).


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Настройка USART в STM32 (STM32F103VBT6), Assembler.
СообщениеДобавлено: Сб апр 12, 2014 15:10:54 
Грызет канифоль

Карма: 1
Рейтинг сообщений: 21
Зарегистрирован: Пн май 16, 2011 10:54:32
Сообщений: 299
Откуда: Красноярск
Рейтинг сообщения: 0
Вообщем так. Сделал я со 2-й попытки нормальную отладочную. Запустил, но как только включаю бит UE (включение USART), так сразу же в порт бегут левые символы. Разбираться не стал, ибо надоело уже мучиться с такими мелочами, да и M3 мне для следующей задачи не хватит, но и компьютер на одной плате много, купил себе отладочную плату STM32F429I-DISCO. Сразу на Cortex-M4. Чтоб уж наверняка. С LCD и внешне SDRAM на 64. Сам камень мне так же понравился. Начал изучать, нашел datasheet на плату, посмотрел как все подключено (Из 144 выводов лишь малую часть можно использовать просто так, остальная уже подключена, ну и ладно, самому не придется), нашел официальный datasheet на камень, но столкнулся с серьезной проблемой. В родной документации не описано ни одного регистра! Что делать - даже не знаю...

_________________
Все можно сделать, было бы желание!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Настройка USART в STM32 (STM32F103VBT6), Assembler.
СообщениеДобавлено: Сб апр 12, 2014 15:20:26 
Друг Кота
Аватар пользователя

Карма: 30
Рейтинг сообщений: 156
Зарегистрирован: Пн июл 28, 2008 22:12:01
Сообщений: 3604
Рейтинг сообщения: 0
Вадиматоричик писал(а):
нашел официальный datasheet на камень, но столкнулся с серьезной проблемой. В родной документации не описано ни одного регистра! Что делать - даже не знаю...


Да, тяжело после AVR с их писанными левой ногой аляповатыми даташитами , где все в кучу свалено .
Найди Reference manual на свою линейку. Все там же на офсайте ...

Цитата:
Разбираться не стал, ибо надоело уже мучиться с такими мелочами,

Это тебе жЫрный минус. Бросить все из за такой ерунды - это не наш метод...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Настройка USART в STM32 (STM32F103VBT6), Assembler.
СообщениеДобавлено: Сб апр 12, 2014 15:28:00 
Грызет канифоль

Карма: 1
Рейтинг сообщений: 21
Зарегистрирован: Пн май 16, 2011 10:54:32
Сообщений: 299
Откуда: Красноярск
Рейтинг сообщения: 0
dosikus писал(а):
Цитата:
Разбираться не стал, ибо надоело уже мучиться с такими мелочами,

Это тебе жЫрный минус. Бросить все из за такой ерунды - это не наш метод...

А кто сказал, что я бросил? Не дождетесь :)) . Просто сейчас мне нужно сделать за лето довольно большой проект, но если я буду тратить время на отладку косяков уровня "плохая отладочная" - я не успею. Да и появилась надобность в M4, чего ранее не было. Обязательно займусь ей позже. Недавно был на одном конкурсе и "умные люди" мне посоветовали больше не делать "основу своими руками", не "изобретать велосипед". Трудиться на идею, а не на реализацию. + бросить все попытки сделать все с нуля, а пользоваться готовыми отладочными наборами и готовыми модулями. "Думаешь, что люди, которые их делали тупее тебя и ты сможешь их превзойти?...".
Очень долго искал... Нашел http://www.st.com/st-web-ui/static/active/en/resource/technical/document/reference_manual/DM00031020.pdf.

_________________
Все можно сделать, было бы желание!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Настройка USART в STM32 (STM32F103VBT6), Assembler.
СообщениеДобавлено: Сб апр 12, 2014 16:35:10 
Друг Кота
Аватар пользователя

Карма: 30
Рейтинг сообщений: 156
Зарегистрирован: Пн июл 28, 2008 22:12:01
Сообщений: 3604
Рейтинг сообщения: 0
Вадиматоричик писал(а):
Недавно был на одном конкурсе и "умные люди" мне посоветовали больше не делать "основу своими руками", не "изобретать велосипед". Трудиться на идею, а не на реализацию. + бросить все попытки сделать все с нуля, а пользоваться готовыми отладочными наборами и готовыми модулями. "Думаешь, что люди, которые их делали тупее тебя и ты сможешь их превзойти?...".


Чушь какая-то , к чему тут мерянье членами с разработчиками ? К тому же демоборды, те же дискаверины , сделаны для быстрого старта а не практического применения в каких либо проектах. К примеру на той же F4, F3 или VL дискаверине заняты нужные пины .
Да и схемотехника построения девайсов на STM32 не составляет из себя что либо сверхсложное.
Возможно твои советчики мало знакомы с эмбеддом и из клана ардуино-халявщиков ?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Настройка USART в STM32 (STM32F103VBT6), Assembler.
СообщениеДобавлено: Сб апр 12, 2014 16:44:14 
Грызет канифоль

Карма: 1
Рейтинг сообщений: 21
Зарегистрирован: Пн май 16, 2011 10:54:32
Сообщений: 299
Откуда: Красноярск
Рейтинг сообщения: 0
Судите сами, так сказала комиссия в лице разработчиков компании siemens в Москве. Читаю документацию. С настройкой портов разобрался, позже выложу сюда свой мини-мануал для настройки. Но при попытке искусственно задать значение порта - получаю отказ (на плате мигает светодиод попытки отладки в этот момент), скорее всего сначала нужно включить тактирование этого пора в APB1, как в M3. Ищу, читаю, пробую.

_________________
Все можно сделать, было бы желание!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Настройка USART в STM32 (STM32F103VBT6), Assembler.
СообщениеДобавлено: Сб апр 12, 2014 16:50:14 
Друг Кота
Аватар пользователя

Карма: 30
Рейтинг сообщений: 156
Зарегистрирован: Пн июл 28, 2008 22:12:01
Сообщений: 3604
Рейтинг сообщения: 0
Вадиматоричик писал(а):
Судите сами, так сказала комиссия в лице разработчиков компании siemens в Москве.


Гы ... а свои симатики они тебе не навязывали ? Знакомые советы "прогромистов на мясорубках".

Пробуй http://kazus.ru/forums/showthread.php?t=106278 с этого поста http://kazus.ru/forums/showpost.php?p=6 ... stcount=22


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Настройка USART в STM32 (STM32F103VBT6), Assembler.
СообщениеДобавлено: Сб апр 12, 2014 17:32:17 
Грызет канифоль

Карма: 1
Рейтинг сообщений: 21
Зарегистрирован: Пн май 16, 2011 10:54:32
Сообщений: 299
Откуда: Красноярск
Рейтинг сообщения: 0
Вообщем все получилось.
Алгоритм (Для keil5! В 4 и камня-то такого нет...):
1. Выбираем порт и пин. Я выбрал PB13, т.к. на моей плате к нему подключен зеленый светодиод.
2. Нужно написать код-пустышку. С бесконечным циклом. У меня такой был под Cortex-m3, я просто сменил камень в настройках. После чего включить отладку и оставить на паузе. Код такой:
Код:
Steck1    equ    0x20000000+0x101                             ;Вершина стека. 0x2000 0000 - начало ОЗУ (СОЗУ). 
                                                         ;Выделяем 10x100 (256) байт + 1 (из книги).
        AREA    RESET, DATA, READONLY                        ;Пишим таблицу вектаров.
      EXPORT   __Vectors
__Vectors                                                  ;Описываем вектора.                                 
     
         DCD    Steck1                                       ; Значение R13 (Указателя стека).
       DCD    Reset_Handler                                ; Адрес переход к основной программе (Вычесляется автоматически).

      EXPORT    Reset_Handler                                ;Далее действия при включении.
 
          AREA    |.text|, CODE, READONLY                    ;В памяти кода.
Reset_Handler       

Lal       B Lal                                              ;Бесконечный цикл.
                  
     
           END             
         END

3. Нужно включить тактирование порта, для этого заходим в Periherals -> System Viever -> RCC (Это, я так понял, общие настройки включения/выключения настроек тактирования всего). В появившемся меню раскрываем список (нажать на + около) AHB1ENR, в раскрывшемся списке нажать на GPIOBEN (Здесь B - номер порта). Все, тактирование порта B включёно.
4. Нужно настроить ножку порта. Для этого заходим снова в Periherals -> System Viever -> но потом в GPIO -> GPIOB. В этом раскрывшемся списке выберем MODER, и там, напротив MODER13 впишем 0x01 (Стандартный выход). Ничего больше настраивать не будем. По умолчанию выставлена минимальная частота.
5. Теперь поморгаем ручками. Раскрываем в том же меню список ODR, и кликаем галочку напротив ODR13. Светодиод загорится.

_________________
Все можно сделать, было бы желание!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Настройка USART в STM32 (STM32F103VBT6), Assembler.
СообщениеДобавлено: Сб апр 12, 2014 18:36:32 
Грызет канифоль

Карма: 1
Рейтинг сообщений: 21
Зарегистрирован: Пн май 16, 2011 10:54:32
Сообщений: 299
Откуда: Красноярск
Рейтинг сообщения: 0
А вот и рабочий код. Очень помог опыт полученный от Cortex-M3. Разницы между МК я пока не заметил (И хорошо...). Только настройка портов более приятная, в документе все, кроме 12 режимов настройки порта понятно.
Код:
Steck1        equ    0x20000000+0x101                         ;Вершина стека. 0x2000 0000 - начало ОЗУ (СОЗУ). 
   
AHB1ENR      equ   0x40023830                               ;Адреса.   
GPIOBEN      equ    0x00000002    
GPIOB_MODER  equ    0x40020400
MODER13_01   equ    0x04000000   
PORTB_ODR    equ    0x40020414
ODR13        equ    0x00002000

        AREA    RESET, DATA, READONLY                        ;Пишим таблицу вектаров.
      EXPORT   __Vectors
__Vectors                                                  ;Описываем вектора.                                 
     
         DCD    Steck1                                       ; Значение R13 (Указателя стека).
       DCD    Reset_Handler                                ; Адрес переход к основной программе (Вычесляется автоматически).

      EXPORT    Reset_Handler                                ;Далее действия при включении.
 
        AREA    |.text|, CODE, READONLY                      ;В памяти кода.
         
Reset_Handler       

         ldr     R1,  = AHB1ENR                              ;Включаем тактирование порта B.
         ldr     R0,  = GPIOBEN
       str     R0,  [R1]
      
       ldr     R1,  = GPIOB_MODER                          ;Настраиваем пин.
       ldr     R0,  = MODER13_01
       str     R0,  [R1]

       ldr     R1,  = PORTB_ODR                           
Z       ldr     R0,  = ODR13
       str     R0,  [R1]                                   ;Включаем светодиод.                     
         
       ldr     R2,  = Off_Led                              ;Метка возвращения из процедуры ожидания в выключение.
         b     Delay

Off_Led  str     R0,  [R1]
       ldr     R2,  = Z
 
                  
Delay                                                            ;Задержка.
         ldr     R0,   =0xFFFFF
D       sub     R0,   1
       cmp     R0,   0
       bne     D
        bx     R2
      
         
         END             
         END

Файл проекта ниже. Посмотрите, если не сложно, внесите свои замечания. И еще вопросы.
1. Почему-то у меня пропал указатель положения при отладке. Он есть в верхнем меню (чистого кода), но нет в том, который я писал. Раньше было, как вернуть? (Такая желтая стрелочка слева напротив каждой строки). А то отлаживал в слепую.
2. Есть ли под Cortex-M4 файл с названиями регистров? А то я прописывал вручную из симулятора...
3. Можно ли входить в процедуру иначе, не так, как я?


Вложения:
1.rar [438.93 KiB]
Скачиваний: 192

_________________
Все можно сделать, было бы желание!
Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Настройка USART в STM32 (STM32F103VBT6), Assembler.
СообщениеДобавлено: Вс апр 13, 2014 01:36:56 
Открыл глаза
Аватар пользователя

Карма: 1
Рейтинг сообщений: 10
Зарегистрирован: Пт янв 10, 2014 02:05:13
Сообщений: 52
Откуда: Воронеж
Рейтинг сообщения: 1
Вадиматоричик писал(а):
3. Можно ли входить в процедуру иначе, не так, как я?

Даже нужно!
Традиционно для ARM подпрограммы вызываются либо BL метка, либо командой BLX с адресом в регистре. При этом в R14 (LR) сохраняется адрес возврата. Если требуется ещё раз вызвать подпрограмму - нужно сохранить перед этим регистр LR в стёк. Возврат из подпрограммы делается либо командой BX LR, либо восстановлением из стёка содержимое LR в регистр PC.
Пример:
Код:
main
 push {r4, lr} @ стёк должен быть выровнен на 8.
 movw r0, #1000
 bl delay
 mov r0, #0 @ код выхода
 pop {r4, pc} @ Выход из main
delay
 subs r0, #1
 nop
 bne delay @ loop
 bx lr @ выход из delay


По стандартному соглашению вызовов для ARM, параметры функциям передуются в регистрах R0-R3. Если используются R4-R12 - их нужно сохранять в стёк, и восстанавливать перед выходом (можно вместе с PC). Результат возвращать нужно в R0, если он 32 бита, и в R0-R1, если 64 битный.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Настройка USART в STM32 (STM32F103VBT6), Assembler.
СообщениеДобавлено: Вс апр 13, 2014 07:27:48 
Грызет канифоль

Карма: 1
Рейтинг сообщений: 21
Зарегистрирован: Пн май 16, 2011 10:54:32
Сообщений: 299
Откуда: Красноярск
Рейтинг сообщения: 0
Весьма тяжело было понять ваш код (Т.к. многих команд наизусть не помню.). Помогло это http://forum.easyelectronics.ru/viewtopic.php?f=35&t=17374. Тут краткое содержание всех команд с их синтаксисом на русском. Правда под Cortex-M3.

_________________
Все можно сделать, было бы желание!


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 50 ]    , 2,  

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y