Я пытаюсь отправить персонажа, используя мой 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]
Уже пару дней пытаюсьотладить, что не так, и я не нашел ответа.Некоторый вид помощи будет оценен!Спасибо.