Например TDA7294

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

Текущее время: Ср авг 13, 2025 13:06:51

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


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



Начать новую тему Ответить на тему  [ Сообщений: 50 ]    , , 3
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: Настройка USART в STM32 (STM32F103VBT6), Assembler.
СообщениеДобавлено: Вс апр 13, 2014 11:38:20 
Грызет канифоль

Карма: 1
Рейтинг сообщений: 21
Зарегистрирован: Пн май 16, 2011 10:54:32
Сообщений: 299
Откуда: Красноярск
Рейтинг сообщения: 0
Часа 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 с полным пакетом обновлений (когда только начинал изучать и не выбрал МК загрузил обновления всего и вся), там выбрал свой мк и нормально все пошло.


Вложения:
STM32F4.rar [23.99 KiB]
Скачиваний: 189

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

Карма: 1
Рейтинг сообщений: 21
Зарегистрирован: Пн май 16, 2011 10:54:32
Сообщений: 299
Откуда: Красноярск
Рейтинг сообщения: 0
Поиграв с разными светодиодами (Сделав мигалку на 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 . Несколько раз так попадался.


Вложения:
STM32F4.rar [26.65 KiB]
Скачиваний: 197

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

Карма: 30
Рейтинг сообщений: 156
Зарегистрирован: Пн июл 28, 2008 22:12:01
Сообщений: 3604
Рейтинг сообщения: 0
Вадиматоричик, ты читал по ссылке что я дал ? Там есть ответы на все твои вопросы .
Окромя непонятного твоего ляпа -что на PA9 висит отладчик, SWD висит на PA13 и PA14 ...

Цитата:
Несколько раз так попадался.

Connect under Reset поможет и никаких танцев с бубном...


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

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

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


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

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

Полезней язык выучить. Тем более, если решил извращением заняться ...


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

Карма: 1
Рейтинг сообщений: 21
Зарегистрирован: Пн май 16, 2011 10:54:32
Сообщений: 299
Откуда: Красноярск
Рейтинг сообщения: 0
Огромное спасибо!!! Прочел внимательно треть форума. Откуда узнал, что помимо того, что пин нужно перевести в альтернативный режим, его нужно еще и указать, т.к. для каждого пина куча доп. функций. Я думал, что он становиться общим для всех автоматически. Вот исправленный код.
Спойлер
Код:
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


Вложения:
STM32F4.rar [26.89 KiB]
Скачиваний: 222

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

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


Так уж и форума, может ветки . :)))


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

Карма: 1
Рейтинг сообщений: 21
Зарегистрирован: Пн май 16, 2011 10:54:32
Сообщений: 299
Откуда: Красноярск
Рейтинг сообщения: 0
Да, ветку, прошу прощения. И уже целиком. Перевел начало того мануала, касательно контроллера LTDC. Перевод на 3-чку, но куда лучше авто переводчика. Нет ли статей на русском о работе с этим контроллером на русском? Просто тупо библиотеки не интересуют. Если не найду, то буду и дальше переводить даташит.

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


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

Карма: 1
Рейтинг сообщений: 21
Зарегистрирован: Пн май 16, 2011 10:54:32
Сообщений: 299
Откуда: Красноярск
Рейтинг сообщения: 0
Перевод дается очень сложно. Иногда приходиться гадать, о чем идет речь... Ни смотря на то, что основы английского я все таки знаю. Вот кусок, над переводом которого бился около часа:
Английский:
Спойлер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 
Вымогатель припоя

Зарегистрирован: Ср янв 05, 2011 10:03:18
Сообщений: 581
Рейтинг сообщения: 0
Чаще всего проблема правильного восприятия мысли, изложенной на английском в том, что имеет место попытка частично-фрагментального перевода, "кусками". Русская речь имеет иную фразеологию, не совпадающую с английским. Слова в фразах переставлены местами, что дает при кусочном переводе "вывернутый" смысл. Лучше всего выписать отдельные незнакомые слова в предложении, попытаться их осмыслить "по-русски", переставляя их так или эдак, а потом и перевод сложится. Не по смешному. :)

_________________
С уважением,
Виктор.


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

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


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

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


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

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


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