Страница 3 из 3
Re: Настройка USART в STM32 (STM32F103VBT6), Assembler.
Добавлено: Вс апр 13, 2014 11:38:20
Вадиматоричик
Часа 3 анализировал ваш код, пока в справочнике (Ссылка на который выше. Отличная вещь! Но уже нашел пару команд, которая не работает, видимо из-за совместимости M3 и M4.), не нашел.
Все указанные команды выполняют переход к метке label или по адресу, находящемуся в регистре Rm. Кроме того:
– команды BL и BLX заносят адрес следующей команды в регистр LR (регистр связи, R14);
– команды ВХ и BLX генерируют исключение Usage Fault, если бит [0] регистра Rm равен 0.
После смог написать свой код. Тут измененная часть.
Код: Выделить всё
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, = 0xFFFFF ;Значение задержки.
bl Delay ;Входим в процедуру задержки.
ldr R2, = 0xFFFFF ;Значение задержки.
ldr R0, = 0 ;Выключаем.
str R0, [R1]
bl Delay
b Z
Delay subs R2, #1 ;Задержка.
bne Delay
bx LR
END
Очень долго пытался найти, как включить "стрелку отладки". Так и не нашел, ушел домой, а там стоял только keil4 с полным пакетом обновлений (когда только начинал изучать и не выбрал МК загрузил обновления всего и вся), там выбрал свой мк и нормально все пошло.
Re: Настройка USART в STM32 (STM32F103VBT6), Assembler.
Добавлено: Вс апр 13, 2014 14:55:19
Вадиматоричик
Поиграв с разными светодиодами (Сделав мигалку на 2 светодиода), решил снова пойти к USART. Достал документацию на отладочную плату, там как раз выход USART1 находится на PA9, а он ничем не занят. Настроил его на максимальную скорость в режиме альтернативных функций. Подключил этот выход к своему модулю на FT232, настроил USART по мануалу, но ничего не выходит. После настройки (до попытки отправки байта), в терминал приходит "<0>". А далее, USART1 игнорирует любую попытку записи регистр DR (данные), при этом не меняя флагов (которые, кстати, показывают, что USART готов к приему). Вот код и проект под keil 4.
Код: Выделить всё
ck1 equ 0x20000000+0x101 ;Вершина стека. 0x2000 0000 - начало ОЗУ (СОЗУ).
GPIOBEN equ 0x00000002
GPIOB_MODER equ 0x40020400
MODER13_01 equ 0x04000000
PORTB_ODR equ 0x40020414
ODR13 equ 0x00002000
RCC_AHB1ENR equ 0x40023830
RCC_AHB1ENR_GPIOAEN equ 0x00000001 ;Тактирование порта A
RCC_APB2ENR equ 0x40023844
RCC_APB2ENR_USART1EN equ 0x00000010 ;Включение тактирования USART1.
GPORT_A_OSPEEDR equ 0x40020008 ;Скорость работы пина.
GPORT_A_MODER equ 0x40020000
MODER9_00 equ 0x00000000 ;Вход (после сброса).
MODER9_01 equ 0x04000000 ;01 - Режим вывода общего назначения.
MODER9_10 equ (1<<19) ;10 - Режим альтернотиыной функции.
MODER9_11 equ 0x0C000000 ;11 - Аналоговый режим.
;Скорость пина.
OSPEEDR9_00 equ 0x00000000 ;Низкая.
OSPEEDR9_01 equ 0x00040000 ;Средняя.
OSPEEDR9_10 equ 0x00080000 ;Быстрая.
OSPEEDR9_11 equ 0x000C0000 ;Высокая.
;USART1
USART1_BRR equ 0x40011008 ;Скорость USART.
USART1_CR1 equ 0x4001100C ;Настройки
USART_CR1_UE equ 1<<13
USART_CR1_TE equ 1<<3
USART_CR1_RE equ 1<<2
USART1_SR equ 0x40011000
USART1_SR_TXE equ 1<<6 ;Передача завершена.
USART1_DR equ 0x40011004 ;Сюда кидать данные.
AREA RESET, DATA, READONLY ;Пишим таблицу вектаров.
EXPORT __Vectors
__Vectors ;Описываем вектора.
DCD Steck1 ; Значение R13 (Указателя стека).
DCD Reset_Handler ; Адрес переход к основной программе (Вычесляется автоматически).
EXPORT Reset_Handler ;Далее действия при включении.
AREA |.text|, CODE, READONLY ;В памяти кода.
Reset_Handler
main
APBCLK equ 8000000
BAUDRATE equ 9600 ;Скорость передачи.
;--------------------------------------Включаем UART1.----------------------------------------------------
;Настраиваем PA9 (TX - выход).
ldr R1, = RCC_AHB1ENR ;Включение тактирования порта A операцией ИЛИ.
ldr R2, [R1]
ldr R0, = RCC_AHB1ENR_GPIOAEN
orr R0, R2
str R0, [R1]
ldr R1, = GPORT_A_MODER ;Альтернативный режим.
ldr R2, [R1]
ldr R0, = MODER9_10
orr R0, R2
str R0, [R1]
ldr R1, = GPORT_A_OSPEEDR ;Максимальная скорость.
ldr R0, = OSPEEDR9_11
str R0, [R1]
ldr R1, = RCC_APB2ENR ;Включаем тактирование USART операцией ИЛИ.
ldr R2, [R1]
ldr R0, = RCC_APB2ENR_USART1EN
orr R0, R2
str R0, [R1]
ldr R1, = USART1_BRR ;Выставляем скорость USART.
ldr R0, = (APBCLK+BAUDRATE/2)/BAUDRATE;
str R0, [R1]
ldr R2, = USART1_CR1 ;Включаем передатчик и сам USART.
ldr R0, [R2]
ldr R1, = USART_CR1_UE|USART_CR1_TE
orr R0, R1
str R1, [R2]
;Считываем бит TXE (7). Ждем 0.
SR ldr R0, = USART1_SR
ldr R1, [R0]
ldr R0, = USART1_SR_TXE
and R1, R0
cmp R1, R0
bne SR
;Отправляем байт по USART
K ldr R0, =USART1_DR
mov R1, #'L'
str R1, [R0]
b SR
b main
END
END
Во время настройки PA9 возникла проблема. На этом же порту, как оказалось, висел отладчик, а я в коде перезаписал этот порт с одним пином как выход, и отладка зависла. Никак не удавалось включить плату. Не перезагрузка ничего не помогало. Решил проблему с помощью встроенного в плату jtag-а через него стер программу с помощью STM32 ST-LINK Utility . Несколько раз так попадался.
Re: Настройка USART в STM32 (STM32F103VBT6), Assembler.
Добавлено: Вс апр 13, 2014 16:39:26
dosikus
Вадиматоричик, ты читал по ссылке что я дал ? Там есть ответы на все твои вопросы .
Окромя непонятного твоего ляпа -что на PA9 висит отладчик, SWD висит на PA13 и PA14 ...
Несколько раз так попадался.
Connect under Reset поможет и никаких танцев с бубном...
Re: Настройка USART в STM32 (STM32F103VBT6), Assembler.
Добавлено: Вс апр 13, 2014 18:23:21
Вадиматоричик
На этом же порту. Я сначала записывал регистр целиком, тем самым сбрасывая пины отладчика. Потом уже дошло делать через "достал, изменил, положил обратно". Читаю документацию по контроллеру LCD-TFT. Завис на "накопленный вертикальное заднее крыльцо и ширина". Буду в ручную со словарем завтра переводить

.
Re: Настройка USART в STM32 (STM32F103VBT6), Assembler.
Добавлено: Вс апр 13, 2014 18:30:16
dosikus
Вадиматоричик писал(а): Завис на "накопленный вертикальное заднее крыльцо и ширина". Буду в ручную со словарем завтра переводить

.
Полезней язык выучить. Тем более, если решил извращением заняться ...
Re: Настройка USART в STM32 (STM32F103VBT6), Assembler.
Добавлено: Вс апр 13, 2014 19:33:02
Вадиматоричик
Огромное спасибо!!! Прочел внимательно треть форума. Откуда узнал, что помимо того, что пин нужно перевести в альтернативный режим, его нужно еще и указать, т.к. для каждого пина куча доп. функций. Я думал, что он становиться общим для всех автоматически. Вот исправленный код.
Спойлер
Код: Выделить всё
Steck1 equ 0x20000000+0x101 ;Вершина стека. 0x2000 0000 - начало ОЗУ (СОЗУ).
GPIOBEN equ 0x00000002
GPIOB_MODER equ 0x40020400
MODER13_01 equ 0x04000000
PORTB_ODR equ 0x40020414
ODR13 equ 0x00002000
RCC_AHB1ENR equ 0x40023830
RCC_AHB1ENR_GPIOAEN equ 0x00000001 ;Тактирование порта A
RCC_APB2ENR equ 0x40023844
RCC_APB2ENR_USART1EN equ 0x00000010 ;Включение тактирования USART1.
GPORT_A_OSPEEDR equ 0x40020008 ;Скорость работы пина.
GPORT_A_MODER equ 0x40020000
MODER9_00 equ 0x00000000 ;Вход (после сброса).
MODER9_01 equ 0x04000000 ;01 - Режим вывода общего назначения.
MODER9_10 equ (1<<19) ;10 - Режим альтернотиыной функции.
MODER9_11 equ 0x0C000000 ;11 - Аналоговый режим.
[color=#FF0000]GPIOA_AFRH equ 0x40020024 ;Изменять альтернативную функцию.[/color]
;Скорость пина.
OSPEEDR9_00 equ 0x00000000 ;Низкая.
OSPEEDR9_01 equ 0x00040000 ;Средняя.
OSPEEDR9_10 equ 0x00080000 ;Быстрая.
OSPEEDR9_11 equ 0x000C0000 ;Высокая.
;USART1
USART1_BRR equ 0x40011008 ;Скорость USART.
USART1_CR1 equ 0x4001100C ;Настройки
USART_CR1_UE equ 1<<13
USART_CR1_TE equ 1<<3
USART_CR1_RE equ 1<<2
USART1_SR equ 0x40011000
USART1_SR_TXE equ 1<<6 ;Передача завершена.
USART1_DR equ 0x40011004 ;Сюда кидать данные.
AREA RESET, DATA, READONLY ;Пишим таблицу вектаров.
EXPORT __Vectors
__Vectors ;Описываем вектора.
DCD Steck1 ; Значение R13 (Указателя стека).
DCD Reset_Handler ; Адрес переход к основной программе (Вычесляется автоматически).
EXPORT Reset_Handler ;Далее действия при включении.
AREA |.text|, CODE, READONLY ;В памяти кода.
Reset_Handler
main
APBCLK equ 8000000
BAUDRATE equ 9600 ;Скорость передачи.
;--------------------------------------Включаем UART1.----------------------------------------------------
;Настраиваем PA9 (TX - выход).
ldr R1, = RCC_AHB1ENR ;Включение тактирования порта A операцией ИЛИ.
ldr R2, [R1]
ldr R0, = RCC_AHB1ENR_GPIOAEN
orr R0, R2
str R0, [R1]
ldr R1, = RCC_APB2ENR ;Включаем тактирование USART операцией ИЛИ.
ldr R2, [R1]
ldr R0, = RCC_APB2ENR_USART1EN
orr R0, R2
str R0, [R1]
ldr R1, = GPORT_A_MODER ;Альтернативный режим выхода.
ldr R2, [R1]
ldr R0, = MODER9_10
orr R0, R2
str R0, [R1]
[color=#FF0000] ldr R1, = GPIOA_AFRH ;Указываем альтернативную функцию.
ldr R0, = (1<<4)|(1<<5)|(1<<6) ;TX USART1 имеет функцию AF7.
str R0, [R1][/color]
ldr R1, = GPORT_A_OSPEEDR ;Максимальная скорость.
ldr R0, = OSPEEDR9_11
str R0, [R1]
ldr R1, = USART1_BRR ;Выставляем скорость USART.
ldr R0, = (APBCLK+BAUDRATE/2)/BAUDRATE;
str R0, [R1]
ldr R2, = USART1_CR1 ;Включаем передатчик и сам USART.
ldr R0, [R2]
ldr R1, = USART_CR1_UE|USART_CR1_TE
orr R0, R1
str R1, [R2]
;Считываем бит TXE (7). Ждем 0.
SR ldr R0, = USART1_SR
ldr R1, [R0]
ldr R0, = USART1_SR_TXE
and R1, R0
cmp R1, R0
bne SR
;Отправляем байт по USART
K ldr R0, =USART1_DR
mov R1, #'L'
str R1, [R0]
b SR
b main
END
END
Re: Настройка USART в STM32 (STM32F103VBT6), Assembler.
Добавлено: Пн апр 14, 2014 20:15:12
dosikus
Вадиматоричик писал(а):Прочел внимательно треть форума.
Так уж и форума, может ветки .

Re: Настройка USART в STM32 (STM32F103VBT6), Assembler.
Добавлено: Ср апр 16, 2014 11:49:24
Вадиматоричик
Да, ветку, прошу прощения. И уже целиком. Перевел начало того мануала, касательно контроллера LTDC. Перевод на 3-чку, но куда лучше авто переводчика. Нет ли статей на русском о работе с этим контроллером на русском? Просто тупо библиотеки не интересуют. Если не найду, то буду и дальше переводить даташит.
Re: Настройка USART в STM32 (STM32F103VBT6), Assembler.
Добавлено: Ср апр 16, 2014 14:45:04
Вадиматоричик
Перевод дается очень сложно. Иногда приходиться гадать, о чем идет речь... Ни смотря на то, что основы английского я все таки знаю. Вот кусок, над переводом которого бился около часа:
Английский:
Спойлер
LTDC Global configuration parameters
Synchronous Timings:
Figure 82 presents the configurable timing parameters generated by the Synchronous
Timings Generator block presented in the block diagram Figure 81. It generates the
Horizontal and Vertical Synchronization timings panel signals, the Pixel Clock and the Data
Enable signals.
Русский.
Спойлер
16.4.1 Глобальные настраиваемые параметры LTDC.
Синхронизация координат:
На рисунке 82 показана конфигурация координат, параметры генератора по синхронизации синхронизационного генератора в блок-диаграмме на рисунке 81. Он генерирует вертикальные и горизонтальные сигналы синхронизации координат панели, пиксельного времени и данных включения сигнала.
Re: Настройка USART в STM32 (STM32F103VBT6), Assembler.
Добавлено: Ср апр 16, 2014 15:29:51
ut1wpr
Чаще всего проблема правильного восприятия мысли, изложенной на английском в том, что имеет место попытка частично-фрагментального перевода, "кусками". Русская речь имеет иную фразеологию, не совпадающую с английским. Слова в фразах переставлены местами, что дает при кусочном переводе "вывернутый" смысл. Лучше всего выписать отдельные незнакомые слова в предложении, попытаться их осмыслить "по-русски", переставляя их так или эдак, а потом и перевод сложится. Не по смешному.
