Picproje Elektronik Sitesi

MİKRODENETLEYİCİLER => ARM => Konuyu başlatan: sytax333 - 05 Eylül 2018, 12:31:46

Başlık: STM32F4 Discovery board USART1 sıkıntısı
Gönderen: sytax333 - 05 Eylül 2018, 12:31:46
İyi günler,

STM32F4 Discovery board üzerinde bulunan ve 84MHz ile beslenen USART1'i kullanmaya çalışıyorum. Kod aşağıdaki gibidir.




#include "stm32f4xx.h"
#include "stm32f4_discovery.h"
 
void Init ()
{
 USART_InitTypeDef USART_InitStructure;
 GPIO_InitTypeDef GPIO_InitStructure;


 RCC_APB1PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);
 RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB,ENABLE);

 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
 GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
 GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;

 GPIO_Init(GPIOB,&GPIO_InitStructure);

 GPIO_PinAFConfig(GPIOB,GPIO_PinSource6,GPIO_AF_USART1);

 USART1->CR1 |= USART_CR1_OVER8; // Oversampling mode enable since fclk/8*div
 USART_InitStructure.USART_BaudRate = 4000000;
 USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
 USART_InitStructure.USART_Mode = USART_Mode_Tx;
 USART_InitStructure.USART_Parity = USART_Parity_No;
 USART_InitStructure.USART_StopBits = USART_StopBits_1;
 USART_InitStructure.USART_WordLength = USART_WordLength_8b;

 USART_Init(USART1,&USART_InitStructure);

 USART_Cmd(USART1,ENABLE);


}

void USART_Send(uint8_t Data)
{
 while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);
 USART_SendData(USART1,Data);

}


int main(void)
{
 Init();
 uint8_t Data_buff = 0x85;
 while(1)
 {
 USART_Send(Data_buff);
 }
}



Kodtanda anlaşılıcağı üzere PB6 USART1 Tx pininden sürekli 0x85 basıyorum çıkan sonucu scopetan bakıyorum ancak sürekli 3v görüyorum herhangi bir veri akışı görmüyorum.

Aynı kodta USART1'i USART2 ile ,PB6 yı PA2 ile değiştirdim USART2 sorunsuz çalıştı. Ancak uygulamam için
daha yüksek baudrate gerekiyor bunuda ancak USART1 karşılayabilir. Yardımcı olursanız sevinirim.
Başlık: Ynt: STM32F4 Discovery board USART1 sıkıntısı
Gönderen: sımışka - 05 Eylül 2018, 13:22:02

 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; ile
 GPIO_InitStructure.GPIO_Pin    = GPIO_Pin_6 | GPIO_Pin_7; değiştirip,


  GPIO_PinAFConfig(GPIOB, GPIO_PinSource6 , GPIO_AF_USART1);
  GPIO_PinAFConfig(GPIOB, GPIO_PinSource7 , GPIO_AF_USART1); ekleyebilir misiniz
Başlık: Ynt: STM32F4 Discovery board USART1 sıkıntısı
Gönderen: sytax333 - 05 Eylül 2018, 14:29:23
Söylediğiniz gibi değiştirdim ancak sonuç hala aynı
Başlık: Ynt: STM32F4 Discovery board USART1 sıkıntısı
Gönderen: marecrisium - 05 Eylül 2018, 14:36:15
Alıntı yapılan: sytax333 - 05 Eylül 2018, 12:31:46İyi günler,

STM32F4 Discovery board üzerinde bulunan ve 84MHz ile beslenen USART1'i kullanmaya çalışıyorum. Kod aşağıdaki gibidir.




#include "stm32f4xx.h"
#include "stm32f4_discovery.h"
 
void Init ()
{
 USART_InitTypeDef USART_InitStructure;
 GPIO_InitTypeDef GPIO_InitStructure;


 RCC_APB1PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);
 RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB,ENABLE);

 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
 GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
 GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;

 GPIO_Init(GPIOB,&GPIO_InitStructure);

 GPIO_PinAFConfig(GPIOB,GPIO_PinSource6,GPIO_AF_USART1);

 USART1->CR1 |= USART_CR1_OVER8; // Oversampling mode enable since fclk/8*div
 USART_InitStructure.USART_BaudRate = 4000000;
 USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
 USART_InitStructure.USART_Mode = USART_Mode_Tx;
 USART_InitStructure.USART_Parity = USART_Parity_No;
 USART_InitStructure.USART_StopBits = USART_StopBits_1;
 USART_InitStructure.USART_WordLength = USART_WordLength_8b;

 USART_Init(USART1,&USART_InitStructure);

 USART_Cmd(USART1,ENABLE);


}

void USART_Send(uint8_t Data)
{
 while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);
 USART_SendData(USART1,Data);

}


int main(void)
{
 Init();
 uint8_t Data_buff = 0x85;
 while(1)
 {
 USART_Send(Data_buff);
 }
}



Kodtanda anlaşılıcağı üzere PB6 USART1 Tx pininden sürekli 0x85 basıyorum çıkan sonucu scopetan bakıyorum ancak sürekli 3v görüyorum herhangi bir veri akışı görmüyorum.

Aynı kodta USART1'i USART2 ile ,PB6 yı PA2 ile değiştirdim USART2 sorunsuz çalıştı. Ancak uygulamam için
daha yüksek baudrate gerekiyor bunuda ancak USART1 karşılayabilir. Yardımcı olursanız sevinirim.

Discovery kartta B6 pini I2C hattı ile ses entegresine bağlı durumda olduğundan USART1 i bu pinde kullanamazsınız.Alternatif olarak A9 pinini deneyebilirsiniz fakat bu pin de OTG ye bağlı olduğu için sorun çıkabilir yine. Denemekte fayda var.
Başlık: Ynt: STM32F4 Discovery board USART1 sıkıntısı
Gönderen: sımışka - 05 Eylül 2018, 15:38:54
stm32f4xx.h dosyası içerisindeki HSE değerine bakabilir misin ? defualt olarak 25mhz yazıyordu sanırım. Onu ayarlaman gerekebilir. 8mhz yapıp deneyin.
Başlık: Ynt: STM32F4 Discovery board USART1 sıkıntısı
Gönderen: sytax333 - 05 Eylül 2018, 15:51:37
Alıntı yapılan: marecrisium - 05 Eylül 2018, 14:36:15Discovery kartta B6 pini I2C hattı ile ses entegresine bağlı durumda olduğundan USART1 i bu pinde kullanamazsınız.Alternatif olarak A9 pinini deneyebilirsiniz fakat bu pin de OTG ye bağlı olduğu için sorun çıkabilir yine. Denemekte fayda var.

PA9 pininde sorun yasadığım için PB6 pinini denemiştim ama ondada durum dediğiniz gibiyse zaten sorunumu discovery kitinde çözemiceğime benziyor.
Başlık: Ynt: STM32F4 Discovery board USART1 sıkıntısı
Gönderen: sytax333 - 05 Eylül 2018, 15:52:16
Alıntı yapılan: sımışka - 05 Eylül 2018, 15:38:54stm32f4xx.h dosyası içerisindeki HSE değerine bakabilir misin ? defualt olarak 25mhz yazıyordu sanırım. Onu ayarlaman gerekebilir. 8mhz yapıp deneyin.

Clock ayarlarımda herhangi bir sıkıntı yok 25mhz i 8mhz olarak değiştiriyorum her projede.
Başlık: Ynt: STM32F4 Discovery board USART1 sıkıntısı
Gönderen: marecrisium - 05 Eylül 2018, 16:02:23
Alıntı yapılan: sytax333 - 05 Eylül 2018, 15:51:37PA9 pininde sorun yasadığım için PB6 pinini denemiştim ama ondada durum dediğiniz gibiyse zaten sorunumu discovery kitinde çözemiceğime benziyor.

Çok gerekli değilse ses entegresini sökebilirsiniz, o zaman sorun çözülür B6 için.
Başlık: Ynt: STM32F4 Discovery board USART1 sıkıntısı
Gönderen: sytax333 - 05 Eylül 2018, 16:26:49
Alıntı yapılan: marecrisium - 05 Eylül 2018, 16:02:23Çok gerekli değilse ses entegresini sökebilirsiniz, o zaman sorun çözülür B6 için.

Bunun için ses entegresini söktükten sonra yolları bağlamam gerekli değil midir? birde hangisinin ses entegresi oldugunu hangi dökümandan öğrenebilirim?
Başlık: Ynt: STM32F4 Discovery board USART1 sıkıntısı
Gönderen: marecrisium - 05 Eylül 2018, 17:58:06
Alıntı yapılan: sytax333 - 05 Eylül 2018, 16:26:49Bunun için ses entegresini söktükten sonra yolları bağlamam gerekli değil midir? birde hangisinin ses entegresi oldugunu hangi dökümandan öğrenebilirim?
Hayır sadece sökmeniz yeterli.
STM32F4 Discovery (https://www.st.com/content/ccc/resource/technical/document/user_manual/70/fe/4a/3f/e7/e1/4f/7d/DM00039084.pdf/files/DM00039084.pdf/jcr:content/translations/en.DM00039084.pdf) buraya bakın mikrofon jackına yakın olan entegre olması lazım.
Başlık: Ynt: STM32F4 Discovery board USART1 sıkıntısı
Gönderen: sytax333 - 05 Eylül 2018, 19:24:22
Alıntı yapılan: marecrisium - 05 Eylül 2018, 17:58:06Hayır sadece sökmeniz yeterli.
STM32F4 Discovery (https://www.st.com/content/ccc/resource/technical/document/user_manual/70/fe/4a/3f/e7/e1/4f/7d/DM00039084.pdf/files/DM00039084.pdf/jcr:content/translations/en.DM00039084.pdf) buraya bakın mikrofon jackına yakın olan entegre olması lazım.

Söylediğiniz gibi gereken entegreyi söktüm ancak hala bir değişim yok.

Hala çıkışında 3v alıyorum sadece.
Başlık: Ynt: STM32F4 Discovery board USART1 sıkıntısı
Gönderen: marecrisium - 10 Eylül 2018, 12:58:41
Alıntı yapılan: sytax333 - 05 Eylül 2018, 19:24:22Söylediğiniz gibi gereken entegreyi söktüm ancak hala bir değişim yok.

Hala çıkışında 3v alıyorum sadece.

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
 GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
 GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;

 GPIO_Init(GPIOB,&GPIO_InitStructure);

Hocam yeni fark ettim bunu. Neden pini Pull up seçiyorsunuz, Usartda buna gerek yok.Sürekli 3 V görmenizin sebebi bu olabilir.