STM discovery çift USART

Başlatan omereliusuk, 28 Nisan 2013, 01:50:51

omereliusuk

RCC->APB1ENR|=0x00060000;  // USART3 usart2 Clk Enable (Rehber Sayfa 113)
      RCC->APB1RSTR|=0x00060000;  // USART3 usart2 Resetlendi
      GPIOB->AFR[1]=0x07777700;  // PB10..PB14 pinleri USART3 ile alakalandirildi (Hard Sayfa 49)

GPIOB->AFR[1]=0x07777700;  // PB10..PB14 pinleri USART3 ile alakalandirildi (Hard Sayfa 49)
burayı anlamadım.(Hard Sayfa 49) u inceledim GPIOB->AFR[1]=0x07777700; değeri nereden gelmiş anlamadım. hem usart2 hem de usart3 beraber çalışması için uğraşıyorum. yardımcı olursanız sevinirim.


çözdüm galiba:
her pin için 4 bitlik bir değer var. gpiob->afr[1];//üst 8 pinin değerlerini içeriyor. gpio 10 için 4 bit. gpio 11 için 4 bit. eğer yanlış anladıysam düzeltin.

RCC->APB1ENR|=0x00060000;  // USART3 usart2 Clk Enable (Rehber Sayfa 113)
      RCC->APB1RSTR|=0x00060000;  // USART3 usart2 Resetlendi
      GPIOD->AFR[0]=0x77777000;  // Pd3..Pd13 pinleri USART2 VE usart3 ile alakalandirildi (Hard Sayfa 49)
	  GPIOD->AFR[1]=0x00077777;  // devam edildi. pinler USART3 ile alakalandirildi (Hard Sayfa 49)
	  GPIOD->MODER|= 0x02AAAA80;  //

iyildirim

Rehber sf.153 de ki GPIO_AFRH registerine bi bakın. 
0x07777700 karşılığında  10-14 arası pinlere alternatif fonksiyon olarak AF7 atandığını göreceksiniz. Hard sf.49 da B10-14 arasındaki pinlere ait AF7 sütununa bakarsanız USART3 pinlerinin atandığını görebilirsiniz. 

omereliusuk

#2
RCC->APB1ENR|=0x00060000;  // USART3 usart2 Clk Enable (Rehber Sayfa 113)
      RCC->APB1RSTR|=0x00060000;  // USART3 usart2 Resetlendi
      GPIOD->AFR[0]=0x77777000;  // Pd3..Pd13 pinleri USART3 ile alakalandirildi (Hard Sayfa 49)
	  GPIOD->AFR[1]=0x00077777;  // Pd3..Pd13 pinleri USART3 ile alakalandirildi (Hard Sayfa 49)
	  GPIOD->MODER|= 0x02AAAA80;  //
      //GPIOB->MODER|= GPIOB 10..14 icin alternatif fonksiyon tanimi (Rehber Sayfa 148)
 
// USART2 USART3 MODULUNU AYARLAYALIM  		// 1 Start, 8 Data, 1 Stop, No parity (Default degerler)
      RCC->APB1RSTR&=~0x00060000;  	// USART3 Reseti kaldiralim
     USART2->BRR= USART3->BRR=0X1112;    				// 9600 Baud
	  
      	USART3->CR1|=0x0000202C;  		// USART3 enable
	    USART2->CR1|=0x0000202C;  		// USART2 enable
      NVIC->ISER[1]|=0x80;         	// NVIC da USART3 interrupta izin verelim
 
NVIC->ISER[1]|=0x80;            // NVIC da USART3 interrupta izin verelim

USART2 ve USART3 e NVIC->ISER [?] interrupta izin vermek gerekiyor.Buna ulaşamadım.
nereye bakmam gerekiyor? yardımcı olursanız sevinirim. HARD ? REHBER?

z

#3
NVIC ARM çekirdeğin bir parçası. Bundan dolayı buna ait bilgileri rehberde de hardda da bulamazsın.

Bundan dolayı ST nin dokumanını bilmediğim için TI CM3 dokumandan yararlanmıştım.

STnin Ayrıca dokumanı var. Forumda linki vardı arayıp bulman gerek.

CM4 dokumanını buluncaya kadar aşağıdaki ST CM3 dokumanı da iş görmesi lazım.

http://www.st.com/st-web-ui/static/active/en/resource/technical/document/programming_manual/CD00228163.pdf?s_searchtype=keyword

Daha iyi dokumanları buluncaya kadar interrupt numaralarını CM3  de nasıl öğrendiğimi aşağıdaki sayfadan izleyebilirsin.

http://www.cncdesigner.com/wordpress/?p=2463
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

iyildirim

#4
CM4 için olanı bu sanırım.. Ama burada da direkt bir şey açıklanmıyor. CM3-4 lerle register seviyesinde çalışmak bilmece çözmek gibi. Dökümantasyon kötü..
http://www.st.com/st-web-ui/static/active/en/resource/technical/document/programming_manual/DM00046982.pdf?s_searchtype=keyword

Mantığı şöyle.
Rehber sf. 197 den USART3 int no 39 bulunur. ISER registerleri 32 bit. Hangi ISER registeri olduğunu bulmak için 39/32 veya 39>>5 işleminden sonuç 1 bulunur. Buda ISER[1] registerini gösterir. 39-32 = 7 biti set edersek (0x80) 39 nolu int enable olacak..
USART 2 için int no 38. Buda ISER[1] in 6. biti. 0x40. Hem usart 2 hemde 3 için 6 ve 7. bitleri set etmek gerekir. ISER[1] |= 0xC0