मैं अपने stm32 का उपयोग कर एक चरित्र भेजने की कोशिश कर रहा हूँ। मैं रीयल टर्म सीरियल कैप्चर प्रोग्राम का उपयोग कर रहा हूं और 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]

मुझे लगता है कि मैंने इसे सही तरीके से स्थापित किया है!

लेकिन कोई फायदा नहीं हुआ, मुझे अपने सीरियल कैप्चर प्रोग्राम में कोई किरदार दिखाई नहीं दे रहा है।

मैंने अभी चरित्र ए को डेटा रजिस्टर में डालने की कोशिश की है लेकिन कुछ भी नहीं मिला है।

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

यह कुछ दिन हो गया है कि अब क्या गलत है डीबग करने का प्रयास कर रहा है और मुझे कोई जवाब नहीं मिला है। किसी प्रकार की मदद की सराहना की जाएगी! धन्यवाद।

-1
Darklink9110 26 अक्टूबर 2018, 03:02

1 उत्तर

सबसे बढ़िया उत्तर

मुझे मोडर रजिस्टर को वैकल्पिक फ़ंक्शन मोड में सक्षम करने की आवश्यकता थी। लेकिन मैंने जो नहीं किया वह USART1 द्वारा उपयोग के लिए वैकल्पिक कार्य को सक्षम करना था।

विशेष रूप से, पिन 9 (टीएक्स) के लिए वैकल्पिक फ़ंक्शन USART1 के लिए वैकल्पिक फ़ंक्शन को वैकल्पिक फ़ंक्शन उच्च रजिस्टर में सेट किया जा सकता है।

यहां अधिक विवरण: (http://web.eece.maine.edu/ ~झू/पुस्तक/परिशिष्ट_I_Alternate_Functions.pdf)

1
Darklink9110 27 अक्टूबर 2018, 20:17