Настройка USART для отправки символа в сборке большого пальца ARM - PullRequest
0 голосов
/ 26 октября 2018

Я пытаюсь отправить персонажа, используя мой stm32.Я использую программу последовательного захвата Real Term и настроил скорость передачи 9600.

Я попытался написать инициализацию для USART и GPIOA.Пока, когда я перезагружаю свое устройство, оно посылает символ NULL в программу последовательного захвата, так что я думаю, что я как минимум на правильном пути.Но я попытался записать символ в USART_DR, и мне не повезло увидеть его на стороне серийного захвата.

Я следовал по этой ссылке в качестве руководства (http://www.micromouseonline.com/2009/12/31/stm32-usart-basics)

ИВот небольшое руководство для регистров GPIO

@; GPIOx
@; MODER [15:0] 
@;0:'00'-> input mode, which allows the GPIO pin to be used as an input pin,
@;1:'01'-> Output mode, which allows the GPIO pin to be used as an output pin,
@;3:'11'-> Analog mode, which allows the GPIO pin to be used as an Analog input pin and finally,
@;2:'10'-> Alternate function mode which allow the GPIO pins to be used by peripherals such as the UART, SPI e.t.c. 
@;OTYPER
@;'0'-> output push/pull
@;'1'-> output open drain
@;OSPEEDR
@;'x0': 2MHz Low speed
@;'01':10MHz Medium speed
@;'11': 50MHz High speed
@;OPUPDR
@;'00'-> No pull-up/pull-down
@;'01'-> pull up
@;'10'-> pull down
@;'11'-> Reserved

Как я настроил USART:

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

Затем я настроил PA10 как вход общего назначения, плавающий (Хотя мне не нужно использовать это в данный момент, я просто пытаюсь увидеть, еслиСначала я могу получить символ для отправки.)

Затем я должен был убедиться, что часы USART1 были включены.

Я обнаружил, что находится RCC_APB2ENR (регистр разрешения периферийных часов RCC APB2)0x44 от RCC_base. Я включил его примерно так:

@; make sure USART1 is enabled clock
ldr r3,=RCC_BASE
ldr r2,[r3,#RCC_APB2ENR]
orr r2,#(1<<4)  @; set enable bit
str r2,[r3,#RCC_APB2ENR]

Затем я установил скорость передачи и включил биты CR1 TE и RE.

@; load the baud rate (9600), baud = fclk/(16*usartdiv), fclk=16*10^6
ldr r3, =USART1_BASE
mov r2, #0x683      @; Mantissa [15:4] 0x68=0d104 Frac [3:0] 0x3
str r2, [r3, #USART_BRR]

@; enable the USARTx_CR1_UE bit
ldr r2,  [r3, #USART_CR1]
orr r2, #(1<<13)
str r2, [r3, #USART_CR1]

@; enable the USARTx_CR1_TE bit
ldr r2, [r3, #USART_CR1]
orr r2, #(1<<3)
str r2, [r3, #USART_CR1]

@; enable the USARTx_CR1_RE bit
ldr r2, [r3, #USART_CR1]
orr r2, #(1<<2)
str r2, [r3, #USART_CR1]

Я думаю, что установил егоправильно!

Но безрезультатно, я нне вижу никаких символов в моей программе захвата серийного номера.

Я только что попытался поместить символ A в регистр данных, но ничего не получил.

ldr r3, =USART1_BASE
mov r2, #0x41 @; A
str r2, [r3, #USART_DR]

Уже пару дней пытаюсьотладить, что не так, и я не нашел ответа.Некоторый вид помощи будет оценен!Спасибо.

1 Ответ

0 голосов
/ 27 октября 2018

Мне нужно было включить регистр модера в альтернативный режим работы.Но я не включил альтернативную функцию для использования в USART1.

В частности, для контакта 9 (Tx) альтернативная функция для USART1 может быть установлена ​​в верхнем регистре альтернативной функции.

Более подробно здесь: (http://web.eece.maine.edu/~zhu/book/Appendix_I_Alternate_Functions.pdf)

...