Picproje Elektronik Sitesi

DERLEYİCİLER => Diğer Derleyiciler => KEIL => Konuyu başlatan: görkem - 04 Ekim 2017, 00:35:22

Başlık: hal kütüphanesi seri port
Gönderen: görkem - 04 Ekim 2017, 00:35:22
Arkadaşlar merhaba seri porttan terminale veri gördermek istiyorum fakat nedenini anlayamadığım şekilde terminale veri ulaşmıyor usb rs232 çeviriciye ,rs232 to TTL çevirici bağlı uçlarını tx-rx bağladığımda terminalden gönderdiğim veri dönüyor fakat stm32 ye bağladığımda tepki yok

#include "main.h"
#include "stm32f4xx_hal.h"

/* USER CODE BEGIN Includes */

/* USER CODE END Includes */

/* Private variables ---------------------------------------------------------*/
UART_HandleTypeDef huart2;

/* USER CODE BEGIN PV */
/* Private variables ---------------------------------------------------------*/

/* USER CODE END PV */

/* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_USART2_UART_Init(void);

/* USER CODE BEGIN PFP */
/* Private function prototypes -----------------------------------------------*/

/* USER CODE END PFP */
uint8_t buffer=0x45;
/* USER CODE BEGIN 0 */

/* USER CODE END 0 */

int main(void)
{

  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration----------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_USART2_UART_Init();

  /* USER CODE BEGIN 2 */

  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
  /* USER CODE END WHILE */
HAL_UART_Transmit(&huart2,(uint8_t *)&buffer,1,1000);
HAL_Delay(1000);
  /* USER CODE BEGIN 3 */

  }
  /* USER CODE END 3 */

}

/** System Clock Configuration
*/
void SystemClock_Config(void)
{

  RCC_OscInitTypeDef RCC_OscInitStruct;
  RCC_ClkInitTypeDef RCC_ClkInitStruct;

    /**Configure the main internal regulator output voltage
    */
  __HAL_RCC_PWR_CLK_ENABLE();

  __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);

    /**Initializes the CPU, AHB and APB busses clocks
    */
  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
  RCC_OscInitStruct.HSIState = RCC_HSI_ON;
  RCC_OscInitStruct.HSICalibrationValue = 16;
  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI;
  RCC_OscInitStruct.PLL.PLLM = 8;
  RCC_OscInitStruct.PLL.PLLN = 168;
  RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
  RCC_OscInitStruct.PLL.PLLQ = 4;
  if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
  {
    _Error_Handler(__FILE__, __LINE__);
  }

    /**Initializes the CPU, AHB and APB busses clocks
    */
  RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
                              |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
  RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4;
  RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;

  if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5) != HAL_OK)
  {
    _Error_Handler(__FILE__, __LINE__);
  }

    /**Configure the Systick interrupt time
    */
  HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);

    /**Configure the Systick
    */
  HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);

  /* SysTick_IRQn interrupt configuration */
  HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);
}

/* USART2 init function */
static void MX_USART2_UART_Init(void)
{

  huart2.Instance = USART2;
  huart2.Init.BaudRate = 9600;
  huart2.Init.WordLength = UART_WORDLENGTH_8B;
  huart2.Init.StopBits = UART_STOPBITS_1;
  huart2.Init.Parity = UART_PARITY_NONE;
  huart2.Init.Mode = UART_MODE_TX_RX;
  huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  huart2.Init.OverSampling = UART_OVERSAMPLING_16;
  if (HAL_UART_Init(&huart2) != HAL_OK)
  {
    _Error_Handler(__FILE__, __LINE__);
  }

}

/** Configure pins as
        * Analog
        * Input
        * Output
        * EVENT_OUT
        * EXTI
*/
static void MX_GPIO_Init(void)
{

  /* GPIO Ports Clock Enable */
  __HAL_RCC_GPIOH_CLK_ENABLE();
  __HAL_RCC_GPIOA_CLK_ENABLE();

}

/* USER CODE BEGIN 4 */

/* USER CODE END 4 */

/**
  * @brief  This function is executed in case of error occurrence.
  * @param  None
  * @retval None
  */
void _Error_Handler(char * file, int line)
{
  /* USER CODE BEGIN Error_Handler_Debug */
  /* User can add his own implementation to report the HAL error return state */
  while(1)
  {
  }
  /* USER CODE END Error_Handler_Debug */
}

#ifdef USE_FULL_ASSERT

/**
   * @brief Reports the name of the source file and the source line number
   * where the assert_param error has occurred.
   * @param file: pointer to the source file name
   * @param line: assert_param error line source number
   * @retval None
   */
void assert_failed(uint8_t* file, uint32_t line)
{
  /* USER CODE BEGIN 6 */
  /* User can add his own implementation to report the file name and line number,
    ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
  /* USER CODE END 6 */

}

#endif

/**
  * @}
  */

/**
  * @}
*/

/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
Başlık: Ynt: hal kütüphanesi seri port
Gönderen: görkem - 04 Ekim 2017, 10:28:22
Lojik analizör ile baktığımda 1 byte lık gönderdiğim veriyi görüyorum windows 10 olduğu için usb -rs232 uyumsuzlukmu yapıyor dicem ama rx-tx i kendi içinde bağladığımda veri iletimi sağlanıyor
Başlık: Ynt: hal kütüphanesi seri port
Gönderen: MC_Skywalker - 04 Ekim 2017, 10:47:35
Kullandığın terninal programında sıkıntı olabilir. TerraTerm kullanıyordum benzer soruın yaşadım. Daha sonra RealTerm diye başka bir programla deneyince sorunsuz verileri gördüm.

Stm32F0 için


/* USER CODE BEGIN PV */
/* Private variables ---------------------------------------------------------*/
uint8_t tampon[100];
int len;
/* USER CODE END PV */




while (1)
  {
  /* USER CODE END WHILE */

  /* USER CODE BEGIN 3 */
    sprintf(tampon, "Merhaba Dunya");
    len=strlen(tampon);       
    HAL_UART_Transmit(&huart1, tampon, len, 1000);
    HAL_Delay(500);
  }
  /* USER CODE END 3 */



/* USART1 init function */
static void MX_USART1_UART_Init(void)
{

  huart1.Instance = USART1;
  huart1.Init.BaudRate = 115200;
  huart1.Init.WordLength = UART_WORDLENGTH_8B;
  huart1.Init.StopBits = UART_STOPBITS_1;
  huart1.Init.Parity = UART_PARITY_NONE;
  huart1.Init.Mode = UART_MODE_TX_RX;
  huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  huart1.Init.OverSampling = UART_OVERSAMPLING_16;
  huart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
  huart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
  if (HAL_UART_Init(&huart1) != HAL_OK)
  {
    _Error_Handler(__FILE__, __LINE__);
  }

}
Başlık: Ynt: hal kütüphanesi seri port
Gönderen: yasin_arsln - 04 Ekim 2017, 11:30:48
Kod bloğunda bir problem göremedim. Bende terminal.exe adında bir program kullanıyorum bende bunu da deneyebilirsin. Bağlantılarını da kontrol etmekte fayda var. RX --> RX e, TX-->TX'e  denk gelmiş ise bundanda kaynaklanıyor olabilir.
Başlık: Ynt: hal kütüphanesi seri port
Gönderen: uardal - 04 Ekim 2017, 13:17:11
Bende yaşadığım sorunu yazayım, pc ile arduinoyu seri portla haberleştiriyorum usb to rs232 ve ttl dönüştürücü yaptım. fakat devre usb kablo bağlı olmadan haberleşmiyor. rs232 nin 5 nolu (-) ucunu ortak kullanmama rağmen arada izole olduğu için usb program kablosundan (-) alıyor anladığım kadarıyla. Böyle bir sorununuz olabilirmi?
Başlık: Ynt: hal kütüphanesi seri port
Gönderen: MC_Skywalker - 04 Ekim 2017, 15:08:08

şu tarz bir dönüştürücü tercih edebilirsiniz. (https://i.hizliresim.com/9DqmON.jpg)https://i.hizliresim.com/9DqmON.jpg
Başlık: Ynt: hal kütüphanesi seri port
Gönderen: görkem - 06 Ekim 2017, 13:14:14
önerdiğiniz usb dönüştürücü den aldım ilk etapda yine çalışmadı çıkarıp taktım birden çalışmaya başladı anlayamadım ne olduğunu çevirici de kullanılan çip ile eski kullandığım seriport dönüştürücüde aynıydı sadece kablolu olan versiyondu bu çipin driver ı sorunlu sanırım
Başlık: Ynt: hal kütüphanesi seri port
Gönderen: MC_Skywalker - 06 Ekim 2017, 13:51:54
Sorun sizdeki sürücünün klon PL2303 vb. çipli dönüştürücüleri tanımaması gibi duruyor.
Başlık: Ynt: hal kütüphanesi seri port
Gönderen: görkem - 06 Ekim 2017, 17:37:01
diğer bilgisayarımda sorunsuz kullanabiliyordum klon değildi bu pc de saçmaladı driver problemi muhtemelen
Başlık: Ynt: hal kütüphanesi seri port
Gönderen: Hattusa - 01 Mayıs 2019, 23:14:37
slm arkadaşlar;

uint_16 veriler[25];
uint_8 buffer[50];
uint_8 sayac =0;

veriler adlı 25 adet int tipi verim var ve ben usart üzerinden  göndermek istiyorum. bu int tipi verileri tek tek
8 bitlik verilere dönüştürüpte mi yollamalıyım? yoksa başka bir teknik varmıdır?
sayac =0;
for(int x=0;x<50;x=x+2){
buffer[x] =veriler[sayac] /255;
buffer[x+1] =veriler[sayac]%255;
sayac++;
}
HAL_UART_Transmit(&huart2,(uint8_t *)&buffer,50,1000);
Başlık: Ynt: hal kütüphanesi seri port
Gönderen: tekosis - 02 Mayıs 2019, 00:36:34
uint16_t adc_veri_16bit[500];

void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart){
 bayrakDmaUsartTransferBittimi=1;
 HAL_UART_DMAStop(&huart1);
}

adc_verisi_oku(){
adc okuma işlemi.......  }

adc_verisi_yolla()
{
HAL_UART_Transmit_DMA(&huart1,(uint8_t *)adc_veri_16bit,1000);
 while(bayrakDmaUsartTransferBittimi==0){}
 bayrakDmaUsartTransferBittimi=0;
}

Yukarıdaki kodla dma kullanarak 16bitlik dizinin 500 adet verisini gönderiyorum. HAL_UART_Transmit_DMA 8bit veri transfer ediyor. ondan dolayı 500 adet veri için 1000 değerini girdim. göndereceğiniz veri 8 bit ise 1000 yerine istediğiniz sayıyı yazabilirsiniz. Aşağıda da cubemx kullanarak dma ile usart veri transferi anlatılıyor.

Başlık: Ynt: hal kütüphanesi seri port
Gönderen: Hattusa - 04 Mayıs 2019, 12:36:20
slm arkadaşlar;
stm32 dden gönderdiğim datalar sanırım gidiyor, yalnız aklıma takılan konu ise;

java arayüzünde almış olduğum dataları byte den tekrar integer değere çevirmem lazım, yanlış bir mantık mı kullanıyorum bilmiyorum. lütfen bir inceleyebilirmisiniz?
şimdi
byte[]buffer=SerialPort.readBytes(52);
komutu ile stmden gelen 26 datamın byte dönüştürülmüş hali değil mi? yani stmden gelen 2 bytelik 26 verim byte byte olarak 52 adet byte olarak java programıma geliyor.
şimdi ben bu 52 byte i 26 tane integer değere nasıl dönüştürmeliyim?

int datam[0]=(buffer[0]*255)+buffer[1]şeklinde mi olmalı yoksa daha basit bir teknik varmıdır?
Başlık: Ynt: hal kütüphanesi seri port
Gönderen: Hattusa - 04 Mayıs 2019, 22:01:33
Alıntı yapılan: pro-TR - 04 Mayıs 2019, 12:36:20slm arkadaşlar;
stm32 dden gönderdiğim datalar sanırım gidiyor, yalnız aklıma takılan konu ise;

java arayüzünde almış olduğum dataları byte den tekrar integer değere çevirmem lazım, yanlış bir mantık mı kullanıyorum bilmiyorum. lütfen bir inceleyebilirmisiniz?
şimdi
byte[]buffer=SerialPort.readBytes(52);
komutu ile stmden gelen 26 datamın byte dönüştürülmüş hali değil mi? yani stmden gelen 2 bytelik 26 verim byte byte olarak 52 adet byte olarak java programıma geliyor.
şimdi ben bu 52 byte i 26 tane integer değere nasıl dönüştürmeliyim?

int datam[0]=(buffer[0]*255)+buffer[1]şeklinde mi olmalı yoksa daha basit bir teknik varmıdır?


sanırım java platformunda byte değeri -128 +128 arasında kalıyor. benim seri porttan okuma yaptırdığım zamanlarda eğer gelen data - değere düşüyor olmalı ki dönüştürdüğüm integer değer saçmalıyor.
seri porttan gelen datayı integer değere dönüştürmeden önce 0 dan küçük mü diye sorgulamam lazım, eğer düşükse elimdeki - değeri +256 ile toplarsam doğru sonuca ulaşabilirim. yanlışmıyım?

sıkıntım şu 15 yıldır mcu lara program yazmaya çalışıyorum ve geçirdiğim bu süre ne yazıkki basic diliydi, işlemler C de olunca huyu suyu değişiyor işlerin. her ne kadar yazılım lagoritması aynı olsa da...
Başlık: Ynt: hal kütüphanesi seri port
Gönderen: yasin_arsln - 04 Mayıs 2019, 22:15:21
Alıntı yapılan: pro-TR - 04 Mayıs 2019, 22:01:33sanırım java platformunda byte değeri -128 +128 arasında kalıyor. benim seri porttan okuma yaptırdığım zamanlarda eğer gelen data - değere düşüyor olmalı ki dönüştürdüğüm integer değer saçmalıyor.
seri porttan gelen datayı integer değere dönüştürmeden önce 0 dan küçük mü diye sorgulamam lazım, eğer düşükse elimdeki - değeri +256 ile toplarsam doğru sonuca ulaşabilirim. yanlışmıyım?

sıkıntım şu 15 yıldır mcu lara program yazmaya çalışıyorum ve geçirdiğim bu süre ne yazıkki basic diliydi, işlemler C de olunca huyu suyu değişiyor işlerin. her ne kadar yazılım lagoritması aynı olsa da...
Hocam merhaba,
Burada senin java da tanımladığın değişkeni unsigned yapmak gerekli java da böyle bir tanımlama yok. istersen byte array'ini short olarak tanımla 2byte'lık verilere eşitlersin. işlem yaparkende
short[]buffer=SerialPort.readBytes(52);
int datam[0]=((buffer[0]&0x00FF)<<8)+(buffer[1]&0x00FF) şeklinde alabilirsin.
Java da uzman değilim ama işini bu çözebilir.
Başlık: Ynt: hal kütüphanesi seri port
Gönderen: devrecii - 04 Mayıs 2019, 23:10:15
söyle yapabilirsin.


byte[] gelen ;
short yada int aaa;


  aaa=gelen[xx];

  aaa&=0xff;
 
  ...=aaa;

Direk söyle de olablir     

=((short) (gelen[xx]))&0xff;



Başlık: Ynt: hal kütüphanesi seri port
Gönderen: Hattusa - 04 Mayıs 2019, 23:34:00
hocam bir çay koydum işi en başa alıyorum;
şimdi elimde kendim oluşturduğum bir kartım var, bu kart stm32f103 üzerine kurulmuş, HC06 bluetooth modülü taktım, ve java da da bir arayüz hazırladım. şimdi;
elimdeki karttan 21 adet adc okutup bu adc leri HC06 kullanarak javadaki programdan dataları görmek istiyorum.
gönderdiğim datalar 1ms de 47 kez (bu hızı kaldırırmı bilmiyorum,ancak gönderdiğim kartta bir pini referans alarak süreleri ölçtüğümde sürelerde bir sıkıntı yok) aldığım datalar karttan okunan adc değer dataları değil saçmalıyor.
şimdi hatamı bulmak adına işlemi parçalara ayırıp bulmak istiyorum.
acaba elimdeki karttan gönderdiğim datalar doğru mu gidiyor? bunu nasıl test edebilirim? doğru gönderiyorsa alıcı kısmında ki java programımmı sapıtıyor? bunu PC ekranına print ln yaparak görebilirim. baktığımda doğru değil. data miktarını düşürdüğümde yani 1 taneye düşürdüğümde bazen doğru, bazen yanlış geliyor,yani integer değerimin highbyte ile lowbyte değerleri kafasına göre yer değiştiriyor.
sizce ne yaparsam çözüme ulaşabilirim?
Başlık: Ynt: hal kütüphanesi seri port
Gönderen: devrecii - 04 Mayıs 2019, 23:54:19
@pro-TR kontrol byteleri koy mesela 0x19,0x53,adc1,adc2,adc3......

Aldığın yerde ise bakarsın  0x19 0x53 değerini görmüşsen sonraki değerlere tam doğru ulaşacaksın demektir.

KOntrol bytelerinin sayısını artırablirsin.

Bluetooh, internet tcp iletimi gibi değil ki hata olasılığı mutlaka var.   
Başlık: Ynt: hal kütüphanesi seri port
Gönderen: Hattusa - 04 Mayıs 2019, 23:58:17
Alıntı yapılan: iboibo - 04 Mayıs 2019, 23:54:19@pro-TR kontrol byteleri koy mesela 0x19,0x53,adc1,adc2,adc3......

Aldığın yerde ise bakarsın  0x19 0x53 değerini görmüşsen sonraki değerlere tam doğru ulaşacaksın demektir.

KOntrol bytelerinin sayısını artırablirsin.

Bluetooh, internet tcp iletimi gibi değil ki hata olasılığı mutlaka var.   

güzel bir fikir bunu deneyeceğim, tşk ederim