配置USART以在ARM Thumb程序集中发送字符

时间:2018-10-26 00:02:03

标签: gpio stm usart thumb

我正在尝试使用我的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外围时钟使能寄存器)位于RCC_base的0x44处。我是这样启用的,

@; 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 :(得分:0)

我确实需要将Moder寄存器启用为备用功能模式。但是我没有做的是启用了USART1使用的替代功能。

具体来说,对于引脚9(Tx),可以在备用功能高位寄存器中设置USART1的备用功能。

此处有更多详细信息:(http://web.eece.maine.edu/~zhu/book/Appendix_I_Alternate_Functions.pdf