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

Stm32 配置USART以在ARM thumb程序集中发送字符,stm32,gpio,usart,thumb,Stm32,Gpio,Usart,Thumb,我正在尝试使用stm32发送字符。我使用的是实时串行捕获程序,设置的波特率为9600 我试图为USART和GPIOA编写初始化。到目前为止,当我重置我的设备时,它会向串行捕获程序发送一个空字符,所以我认为我至少在正确的轨道上。但是我试着给USART_DR写了一个角色,却没能在连续剧的拍摄端看到这个角色 我一直在关注这个链接作为指导() 这里有一个关于GPIO寄存器的小指南 @; GPIOx @; MODER [15:0] @;0:'00'-> input mode, which allo

我正在尝试使用stm32发送字符。我使用的是实时串行捕获程序,设置的波特率为9600

我试图为USART和GPIOA编写初始化。到目前为止,当我重置我的设备时,它会向串行捕获程序发送一个空字符,所以我认为我至少在正确的轨道上。但是我试着给USART_DR写了一个角色,却没能在连续剧的拍摄端看到这个角色

我一直在关注这个链接作为指导()

这里有一个关于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_基址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]

这是几天来试图调试什么是错误的,我还没有找到答案。如果您能提供一些帮助,我们将不胜感激!谢谢。

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

具体而言,对于引脚9(Tx),USART1的备用功能可在备用功能高电平寄存器中设置


更多细节:()

请注意,您的问题围绕ST逻辑而不是ARM,这实际上是一个ST问题。ST在其产品系列中有不止一个不同的uart,因此这是一个基于arm的更大系列部件的特定芯片子集。哪种替代功能可能会有所不同,ST在一定程度上与uart的一个管脚在许多产品中保持一致,但还有其他管脚。因此,您需要指定具体使用的芯片。如果这是一个arm汇编问题,那么您将有一个经过调试的伪代码程序,精确显示要设置的寄存器中的位,并且您只想将该代码翻译成其他语言,就像将一些文本从法语翻译成英语或德语翻译成俄语(伪代码翻译成asm,或C翻译成asm等)。请不要使用链接,在问题或答案中包含相关文本,链接在这里对我们没有好处,因为stackexchange人员没有管理和维护这些站点,因此问题或答案可以保持相关性。请使用芯片供应商提供的文档,而不是注册的第三方文档。
@; 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]
ldr r3, =USART1_BASE
mov r2, #0x41 @; A
str r2, [r3, #USART_DR]