STM32F4 Discovery board USART1 sıkıntısı

Başlatan sytax333, 05 Eylül 2018, 12:31:46

sytax333

İ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.

sımışka


 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

sytax333

Söylediğiniz gibi değiştirdim ancak sonuç hala aynı

marecrisium

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.

sımışka

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.

sytax333

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.

sytax333

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.

marecrisium

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.

sytax333

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?

marecrisium

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 buraya bakın mikrofon jackına yakın olan entegre olması lazım.

sytax333

#10
Alıntı yapılan: marecrisium - 05 Eylül 2018, 17:58:06Hayır sadece sökmeniz yeterli.
STM32F4 Discovery 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.

marecrisium

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.