Picproje Elektronik Sitesi

MİKRODENETLEYİCİLER => ARM => Cortex ARM => Konuyu başlatan: izturk - 30 Nisan 2018, 10:17:12

Başlık: Stm32 Can Bus Hakkında Bir Kaç Soru
Gönderen: izturk - 30 Nisan 2018, 10:17:12
Merhaba arkadaşlar,

stm32f1 ile can bus haberleşmesi kurmaya çalışıyorum.
ayarlamaları yapıp filtreleri ayarlayıp iyi kötü can bus haberleşmesini sağladım. değişik alıcılardan veri alıp gönderebiliyorum.

soru1. stm32f1 de 3 adet tx mailbox var. Bunların id lerini başta ayarlıyoruz. program içerisinde bu id leri yeniden kurmadıkça 3 farklı id de mesaj gönderebiliriz mi demek. 4. farklı id de mesaj göndereceğimiz zaman bu mailboxların ayarlarını mı değiştirmek gerekli yoksa başka bir yöntemi var mı?

soru2. mesaj karşıdan alındı bilgisini CAN_ESR(error status register) registerinin LEC (last error code) bitinden takip ediyorum. bu doğru bir yöntemmidir?

soru3. belli bir id deki mesajı birden farklı alıcı alacak. diyelim ki mesajı bir alıcı aldı ama diğer alıcı alamadı. böyle bir durumda CAN_ESR de hata oluşur mu oluşmaz mı? Bunu ayırt etmenin yolu nedir?
Başlık: Ynt: Stm32 Can Bus Hakkında Bir Kaç Soru
Gönderen: foseydon - 30 Nisan 2018, 11:01:57
STM'de CAN kullanmadım. fakat CAN Frame'i içerisinde ID frame'i var burada ID değerini değiştirerek istediğin cihaza mesaj gönderebilirsin yani kısıtlama yok. O başta verdiğim 3 ID ise cihazın kendisine ait, yani gelen mesajları filtreleyip kendisine gelip gelmediğini kontrol edebilsin diye.

işleyiş yapısını bilmiyorum, ama error'den takip etmek bana hatalı geliyor. ben dsPIC ile kullanmıştım ve TX ve RX için kesme vardı, muhtemelen sende de benzer bir yapı vardır. Başta atadığın ID'leri filtreliyor ve kendisine geldiyse kesme oluşturuyordu.

ID'ler tek, yani mesajı alamayan cihaz senin cevap almak istediğin cihaz ise geriye mesaj dönmez. buradan iletişimde sorun olduğunu anlayıp tekrar sorgu yapabilirsin.
Başlık: Ynt: Stm32 Can Bus Hakkında Bir Kaç Soru
Gönderen: izturk - 02 Mayıs 2018, 12:42:59
3. sorumu denedim ve aynı id li mesajı alıcının birisi alıp diğeri almadığında hata oluşmuyor.her alıcıdan da tek tek geri cevap almak işime gelmiyor. bunun başka bir yolu yokmudur.

bir de id dışında id mask var. bu maskelemenin amacı nedir. zaten id ile hangi alıcının veriyi alacağını belirledik. yeniden maska ne ihtiyaç var. benim problemimin çözümü bu maskın kullanımı olabilir mi acaba?
Başlık: Ynt: Stm32 Can Bus Hakkında Bir Kaç Soru
Gönderen: foseydon - 03 Mayıs 2018, 11:52:00
Alıntı yapılan: izturk - 02 Mayıs 2018, 12:42:593. sorumu denedim ve aynı id li mesajı alıcının birisi alıp diğeri almadığında hata oluşmuyor.her alıcıdan da tek tek geri cevap almak işime gelmiyor. bunun başka bir yolu yokmudur.

bir de id dışında id mask var. bu maskelemenin amacı nedir. zaten id ile hangi alıcının veriyi alacağını belirledik. yeniden maska ne ihtiyaç var. benim problemimin çözümü bu maskın kullanımı olabilir mi acaba?

hocam ID ve mask gelen mesajı filtrelemek için kullanılıyor. Misal, bunları cihazın kendi ID'sine denk gelecek şekilde ayarlarsan, bu ID dışındaki mesajları görmezden gelir.Bunları kullanarak cihaz gruplandırması yaparak, kendi olduğu gruba gönderilen mesajları dikkate almasını da sağlayabilirsin. Bu işine yarayabilir. Kullanım detayını için texas'ın CANBUS dökümanı var, tavsiye ederim. aramaya üşendiğimden linki eklemedim :)
Başlık: Ynt: Stm32 Can Bus Hakkında Bir Kaç Soru
Gönderen: Tagli - 03 Mayıs 2018, 13:15:39
Bilmiyorum pek yeri olmayabilir belki ama birkaç soru da ben sorayım:

Genelde CAN bus'ı ham olarak mı kullanıyorsunuz yoksa CANopen veya DeviceNet gibi bir üst katman ile mi kullanıyorsunuz? Eğer tercihiniz ikinci yöntem ise, yaygın olarak kullanılan bir kütüphane falan var mıdır STM32 için?

Bir de merak ediyorum, CAN bus'ı genelde ne tür sistemlerde kullanıyorsunuz?
Başlık: Ynt: Stm32 Can Bus Hakkında Bir Kaç Soru
Gönderen: Ax2_Bx_C - 03 Mayıs 2018, 13:43:18
Gürültünün bol olduğu yapılarda kullanılması önerilir. Genel olarak jeneratör sistemlerinde, kritik haberleşme gereken güç konularında hep can kullanılır. Can'in güzel yanı hem master hem slave yapıda olabilmesidir. Bu da Modbus gibi yapılara karşı onu öne çıkarır. İyi bir fiziksel layer kurarsanızda hata dönüşünüz çok az olur. Ayrıca filtrelemeler vb. sayesinde software'e çok az iş düşer. UPS ve kaynak makineleri gibi gürültülü ortamlarda sıkça kullanılır.
Başlık: Ynt: Stm32 Can Bus Hakkında Bir Kaç Soru
Gönderen: Cemre. - 03 Mayıs 2018, 17:27:01
Alıntı yapılan: Tagli - 03 Mayıs 2018, 13:15:39Bilmiyorum pek yeri olmayabilir belki ama birkaç soru da ben sorayım:

Genelde CAN bus'ı ham olarak mı kullanıyorsunuz yoksa CANopen veya DeviceNet gibi bir üst katman ile mi kullanıyorsunuz? Eğer tercihiniz ikinci yöntem ise, yaygın olarak kullanılan bir kütüphane falan var mıdır STM32 için?

Bir de merak ediyorum, CAN bus'ı genelde ne tür sistemlerde kullanıyorsunuz?
CANopen ve EtherCat hareket kontrol sistemlerinde (servo sistemler) sıklıkla kullanılıyor.
Başlık: Ynt: Stm32 Can Bus Hakkında Bir Kaç Soru
Gönderen: izturk - 04 Mayıs 2018, 12:32:59
Hocalarım ben hala aynı konularda cebelleşiyorum. Bazı şeyler hala aklımda tam netleşmedi.
Şimdi ilk sorumu biraz daha açarak tekrar sorayım.

CAN1->sTxMailBox[0].TIR = 0;
CAN1->sTxMailBox[0].TIR = 0x100<<21;
CAN1->sTxMailBox[0].TDHR = 0;
CAN1->sTxMailBox[0].TDTR = 1;
CAN1->sTxMailBox[0].TDTR  &= ~(0x0000000F);
CAN1->sTxMailBox[0].TDTR |= 8;

tx ayarlarını bu şekilde yapıyorum. mailbox[0] 0x100 id ile gönderiyor. mailbox[1] i de 0x200 id ile kurduk.
0 ın data sına yazıp gönder deyince 0x100 id ile mesaj gitti. 1 in datasına yazıp gönder deyince 0x200 ile mesaj gitti.
bu şekilde 3 farklı mesaj yollayabildik. çünkü mailbox 3 adet. ama benim 17 farklı alıcıya mesaj göndermem gerekiyor.

her farklı id de mailbox[0] ın id sini değiştirip sadece mailbox[0] dan mı gönderme yapıyım?
Başlık: Ynt: Stm32 Can Bus Hakkında Bir Kaç Soru
Gönderen: Tagli - 04 Mayıs 2018, 13:05:20
Şimdi benim bu işten anladığım, CAN Bus'ta aslında hat üzerindeki herkes herhangi bir adres hedeflemeden ortalığa bağırıyor, isteyen de istediği kadarını duyuyor (mesaj ID'sine göre filtreleme). Aynı anda bağıran olursa, yüksek öncelikli mesaj baskın geliyor. Düşük öncelikli mesajın sahibi de ortalık durulduğunda tekrar deniyor şansını.

TX için farklı mail box'lar olmasının sebebi de bu sanırım. Bir cihaz, farklı öncelikli (yani ID) mesajlar göndermek isteyebilir. Bunlar için ayrı birer buffer şart, çünkü hat durumuna göre sıra beklemek zorunda kalabilirler. Donanım ilk fırsatta tekrar deneme işini otomatik yapıyor anladığım kadarıyla.

Yani aslında cihaz adresleme CAN Bus'ın ana fikrine biraz ters. En azından ham halinde. Ham CAN Bus'ta master-slave diye bir kavram yok. Ama CANopen gibi üst katmanlarda master-slave ilişkisi ile adresli çalışma durumu olabiliyor.

Yukarıdaki sorumun bir sebebi de oydu. Yani merak ettiğim şey aslında "Ne tür sistemlerde master-slave ilişkisi kullanmayız?" sorusu idi. Öte yandan, bu imkanın CANopen gibi üst seviye protokollerle eklenmiş olması kafamı karıştırıyor.

@izturk, senin durumda belki CAN ID'lerini adres gibi düşünmeyip farklı bir yöntem izleyebilirsin. Yani adres kısmı belki o 8 byte'lık yerde olabilir. Ama tabi bu sefer slave cihazlar donanımsal filtrelerden yararlanamayacaklar. Ne bileyim, mesela cihazlar arasındaki standart iletişim bir ID üzerinden giderken hata mesajları başka bir ID ile broadcast yapılır.

Dönüp dolaşıp aynı soruya geliyorum... Belki de senin sistemin için en uygun yaklaşım CAN Bus değildir? Veya en azından ham CAN Bus değildir. Belki de Modbus veya CANopen kullanman daha uygun olur.

Öte yandan, mailbox ID'lerini de çalışma sırasında değiştirmek mümkündür muhtemelen (dokümanı incelemedim). Belki bu da senin için bir çözüm olabilir.
Başlık: Ynt: Stm32 Can Bus Hakkında Bir Kaç Soru
Gönderen: izturk - 04 Mayıs 2018, 19:01:38
@Tagli hocam zaten ben bu sistemi daha önce rs485 ile protokol olmaksızın soru cevap şeklinde çalıştırdım. Ama bağlantıda kopmalar hatalar yaşadım. Böyle olunca hem can bus öğreneyim hem de sistem daha düzenli çalışsın diye can bus yapmak istiyorum.

Aslında bu halde de soru cevap şekliyle işimi çözebilirim. Ama can bus ın madem id filtreleme error frame gibi özellikleri var hem bunları öğreneyim hem de sistem daha otonom çalışır hale gelsin diye çabalıyorum.

Şimdi mesajlardan anladığım benim 3 adet tx mailbox kullanmaya ihtiyacım yok. sadece 0.mailboxu kullanacağım ve id leri değiştirerek mesajları göndereceğim.

Şimdi de merak ettiğim ikinci konu bu filter mask lar ne işe yarar. Diyelim tek id de mesaj yolladım. 3 adet alıcım var ama alıcılardan filter maskla sadece biri bu mesajla ilgileniyor. Bunu filter maskla yapmaktansa neden 3 farklı id de mesajı yollamayım. Zaten 11 bit id var. Buranın "püf" noktası nedir?


Alıntı yapılan: foseydon - 03 Mayıs 2018, 11:52:00hocam ID ve mask gelen mesajı filtrelemek için kullanılıyor. Misal, bunları cihazın kendi ID'sine denk gelecek şekilde ayarlarsan, bu ID dışındaki mesajları görmezden gelir.Bunları kullanarak cihaz gruplandırması yaparak, kendi olduğu gruba gönderilen mesajları dikkate almasını da sağlayabilirsin. Bu işine yarayabilir. Kullanım detayını için texas'ın CANBUS dökümanı var, tavsiye ederim. aramaya üşendiğimden linki eklemedim :)
Yani @foseydon hocam burayı birazcık daha açabilirmiyiz.
Başlık: Ynt: Stm32 Can Bus Hakkında Bir Kaç Soru
Gönderen: OptimusPrime - 04 Mayıs 2018, 20:47:47
http://www.ti.com/lit/an/sloa101b/sloa101b.pdf
burayi okumakta fayda var.

soru 3 icin broadcast kullanabilirsin fakat hicbir alicinin mesaji alip almadigini belirleyemezsin.

CAN kullamayali uzun zaman oldu. Tam hatirlayamiyorum neler oldugunu. Linki okumanda fayda var.

CAN in kullanildigi bir alanda otomobiller hatta otobusler.

Ozellikle mesaj bastirabilme ozelligi nedeniyle CAN otomobil sektorunde oldukca yaygin.

Mesela, motor sicakligi otobusun arkasindan soforun onundeki panele gonderilirken abs modulu bir yerlerle konusmak isterse o an hattaki mesaji bastirabiliyor.
Başlık: Ynt: Stm32 Can Bus Hakkında Bir Kaç Soru
Gönderen: foseydon - 08 Mayıs 2018, 17:39:23
@Tagli

ben ham kullanıyorum, ama CanOPEN hakkında da bilgim var. Aynı frame ile daha fazla veri göndermek için CanOPEN kullanılabilir.

genel not:

CAN protokolü OSI'nın fiziksel katmanını da kapsıyor ve oldukça sağlam bir protokol. Bu bakımdan CAN ile modbus kıyası olmaz, çünkü modbus OSI'nın sadece uygulama katmanını kapsıyor. Yani verinin fiziksel olarak nasıl aktarılacağına dair herhangi birşey modbus'ta yok. ama allah için güzel protokol, orası ayrı.

@izturk

Hocam, yukarıda anlatmışlar CAN master/slave gibi çalışmıyor. fakat öyle de kullanabilirsin. @Tagli nin dediği gibi, CAN bus data frame içerisinde ID bölümü var. bu bolüm 13 veya 29 bit olabiliyor (yanlış hatırlamıyorsam). node lar veriyi aldıkları zaman bu ID bölümüne bakıyorlar. Sen şayet bir filtre koyarsan bu ID o filtre ile karşılaştırılır ve filtreden geçerse node cevap verir.

misal filtre 1 ve ID 2


node cevap vermez, ama o noda verdiğin filtre 2 olsa idi o node cevap verecekti. burada işin espirisi şu, node lara verdiğin filtreler benzersiz olmak zorunda değil. Yani bir ID ye birden fazla node cevap verebilir. ama hepsine benzersiz filtre atarsan olay master/slave e döner.

Maske ise daha geniş bir filtredir, filtre ile kullandığın zaman cevap nodun cevap vereceği ID sayısını artırır. Örnenkle anlatırsam daha iyi anlarsın

misal bir node a kurdugun filtre 10 olsun, ayrica değeri F5 olan maske kurduğun zaman o node 10, 11, 12, 13, 14 numaralı ID lerin hepsine cevap verir.

genel mantık bu, senin kullandığın işlemcide özel uygulaması nasıl oluyor bilemiyorum. ama register'lardan filtre ve maske ayarlayabiliyor olman lazım. kullandığın işlemcinin referans dökümanlarını okursan eğer, orada uygulama yazıyordur muhtemelen.
Başlık: Ynt: Stm32 Can Bus Hakkında Bir Kaç Soru
Gönderen: zahi - 14 Mayıs 2018, 15:32:07
İzturk mcp2551 ile canbus haberleşmeyi ne yaptın senin yaşadığın sorunların aynısını bende yaşıyorum
haberleşmeyi yapabildin mi?
Bir paylaşımda da interrupt ile ilgili sıkıntı yaşadığını belirtmiştin ordaki can alıcı ve verici için mcp2515 mi kullandın ?
kullandığım mikrodenetleyici stm32f103c8t6
2 tane kullandım mcp2551 bir tanesinin tx rx ini kısa devre edip diğerine stm32f103c8t6 bağladım yukardaki kodları denediğimde logic anlyzer ile baktığımda error var veri gitmiyor
canbus normal modda loopback moda aldığımda da aynı durum canbus haberleşmeyi bir türlü yapamadım :(
Başlık: Ynt: Stm32 Can Bus Hakkında Bir Kaç Soru
Gönderen: izturk - 15 Mayıs 2018, 14:16:42
Ben 2515 kullanmadım. bir tarafta 32f103vct6 diğer tarafta 32f103c8t6 var. diğer konudaki kodlar direk çalışıyor.

https://www.picproje.org/index.php/topic,72781.msg557633.html#msg557633
Başlık: Ynt: Stm32 Can Bus Hakkında Bir Kaç Soru
Gönderen: zahi - 15 Mayıs 2018, 15:57:26
Cevabınız için teşekürler
mcp2551 diyecektim
mcp2551 ile canbus haberleşmeyi yapabilen yokmu
yukarıdada bahsedildiği gibi cubemix te yaptığım denemelerde logic
anlyzr. ile baktığımda hiçbir şey göremedim yukarda verilen kodu denediğimde veri alma kısmında alamadığından while döngüsünde takılı kalıyor gönderdiği kısma baktığımda  error biti var logic anlyzr.da .
video daki gibimi bağlantıyı yaptınız transceiver olmadan keilin dökümanında videodaki gibi bağlantı öneriyor
son çare olarak mcp2515 modülü ile spi haberleşme  ile gönderecem mcp2515 ile günlerdir uğraşıyorum veri dahi gönderemedim :(

Başlık: Ynt: Stm32 Can Bus Hakkında Bir Kaç Soru
Gönderen: baran123 - 15 Mayıs 2018, 16:09:04
MCP2551'in çok fazla sahte modeli var bunlara denk gelmiş olabilirsiniz.
Ben farklı yerlerden alınmış 4 adet MCP2551 denedim sadece bir tanesi çalışmıştı.
Daha sonra SN65HVD233 gibi farklı CAN Transceiver'ları denedim.
Transceiver seçerken 3.3 uyumlu olmasına dikkat edin.
Başlık: Ynt: Stm32 Can Bus Hakkında Bir Kaç Soru
Gönderen: izturk - 15 Mayıs 2018, 16:34:34
@zahi hocam ben de ilk defa çalıştırdım konuya hakim değilim ama istersen denediğin kodu ekle bi bakalım
Başlık: Ynt: Stm32 Can Bus Hakkında Bir Kaç Soru
Gönderen: zahi - 15 Mayıs 2018, 17:50:43
Cevaplarınız için tekrar teşekürler @baran123  mcp2551 ile uğraştığınızı diğer paylaşımlarınızdan biliyorum hocam alternatif pinler ve usb denk gelen pinler stm32f103c8 de 5v toleranslı sorun olmaz diye düşündüm mcp2551 leri değiştirip denerim yaptığım bağlantı resimdeki gibi reset pinini direk gnd ye bağladım
(https://thumb.ibb.co/dXpmad/can_nucleo_hello.png) (https://ibb.co/dXpmad)
@izturk hocam dediğim gibi en son sizin kodları kullandım kullandığım kodlar
/**
  ******************************************************************************
  * @file          : main.c
  * @brief          : Main program body
  ******************************************************************************
  ** This notice applies to any and all portions of this file
  * that are not between comment pairs USER CODE BEGIN and
  * USER CODE END. Other portions of this file, whether
  * inserted by the user or by software development tools
  * are owned by their respective copyright owners.
  *
  * COPYRIGHT(c) 2018 STMicroelectronics
  *
  * Redistribution and use in source and binary forms, with or without modification,
  * are permitted provided that the following conditions are met:
  *  1. Redistributions of source code must retain the above copyright notice,
  *      this list of conditions and the following disclaimer.
  *  2. Redistributions in binary form must reproduce the above copyright notice,
  *      this list of conditions and the following disclaimer in the documentation
  *      and/or other materials provided with the distribution.
  *  3. Neither the name of STMicroelectronics nor the names of its contributors
  *      may be used to endorse or promote products derived from this software
  *      without specific prior written permission.
  *
  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  *
  ******************************************************************************
  */
/* Includes ------------------------------------------------------------------*/
#include "main.h"
#include "stm32f1xx_hal.h"

/* USER CODE BEGIN Includes */

/* USER CODE END Includes */

/* Private variables ---------------------------------------------------------*/
CAN_HandleTypeDef hcan;

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

uint8_t say=0;
uint8_t rx_data;
/* USER CODE END PV */

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

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


/* USER CODE END PFP */

/* USER CODE BEGIN 0 */

void CAN1_Tx(uint8_t data)
{
CAN1->sTxMailBox[0].TDLR = data;
CAN1->sTxMailBox[0].TIR |= 1;
}

uint8_t CAN1_Rx(void)
{
while(!(CAN1->RF0R&3));
uint8_t RxD = (CAN1->sFIFOMailBox[0].RDLR)&0xFF;
CAN1->RF0R |= 1<<5;
return RxD;

}
/* USER CODE END 0 */

/**
  * @brief  The application entry point.
  *
  * @retval None
  */
int main(void)
{
  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

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

  /* 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_CAN_Init();
 
  /* USER CODE BEGIN 2 */
   





        CAN1->sTxMailBox[0].TIR = 0;
CAN1->sTxMailBox[0].TIR = 0x245<<21;
CAN1->sTxMailBox[0].TDHR = 0;
CAN1->sTxMailBox[0].TDTR = 1;

CAN1->FMR |= 1<<0;
CAN1->FMR |= 13<<8;
CAN1->FS1R |= 1<<13;
CAN1->sFilterRegister[13].FR1 = 0x245<<21;
CAN1->FM1R |= 1<<13;
CAN1->FA1R |= 1<<13;
        CAN1->FMR &= ~(1<<0);

  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
 
  while (1)
  {

  /* USER CODE END WHILE */

  /* USER CODE BEGIN 3 */
  say++;

if(say==100)say=0;
  CAN1_Tx(say);
    //  HAL_Delay(3000);
rx_data=CAN1_Rx();
  }
  /* USER CODE END 3 */

}

/**
  * @brief System Clock Configuration
  * @retval None
  */
void SystemClock_Config(void)
{

  RCC_OscInitTypeDef RCC_OscInitStruct;
  RCC_ClkInitTypeDef RCC_ClkInitStruct;

    /**Initializes the CPU, AHB and APB busses clocks
    */
  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
  RCC_OscInitStruct.HSEState = RCC_HSE_ON;
  RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;
  RCC_OscInitStruct.HSIState = RCC_HSI_ON;
  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
  RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9;
  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_DIV2;
  RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;

  if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != 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);
}

/* CAN init function */
static void MX_CAN_Init(void)
{

  hcan.Instance = CAN1;
  hcan.Init.Prescaler = 16;
  hcan.Init.Mode = CAN_MODE_NORMAL;
  hcan.Init.SJW = CAN_SJW_1TQ;
  hcan.Init.BS1 = CAN_BS1_3TQ;
  hcan.Init.BS2 = CAN_BS2_5TQ;
  hcan.Init.TTCM = DISABLE;
  hcan.Init.ABOM = DISABLE;
  hcan.Init.AWUM = DISABLE;
  hcan.Init.NART = DISABLE;
  hcan.Init.RFLM = DISABLE;
  hcan.Init.TXFP = DISABLE;
  if (HAL_CAN_Init(&hcan) != HAL_OK)
  {
    _Error_Handler(__FILE__, __LINE__);
  }
}

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

  GPIO_InitTypeDef GPIO_InitStruct;

  /* GPIO Ports Clock Enable */
  __HAL_RCC_GPIOC_CLK_ENABLE();
  __HAL_RCC_GPIOD_CLK_ENABLE();
  __HAL_RCC_GPIOA_CLK_ENABLE();
  __HAL_RCC_GPIOB_CLK_ENABLE();

  /*Configure GPIO pin Output Level */
  HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_RESET);

  /*Configure GPIO pin : PC13 */
  GPIO_InitStruct.Pin = GPIO_PIN_13;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);

}

/* USER CODE BEGIN 4 */

/* USER CODE END 4 */

/**
  * @brief  This function is executed in case of error occurrence.
  * @param  file: The file name as string.
  * @param  line: The line in file as a number.
  * @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,
    tex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
  /* USER CODE END 6 */
}
#endif /* USE_FULL_ASSERT */

/**
  * @}
  */

/**
  * @}
  */

/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/






(https://thumb.ibb.co/izczdy/Screenshot_1.jpg) (https://ibb.co/izczdy)
Başlık: Ynt: Stm32 Can Bus Hakkında Bir Kaç Soru
Gönderen: izturk - 16 Mayıs 2018, 11:34:41
Hocam Tx pinlerinden 5v a pull-up atman gerekir.
Başlık: Ynt: Stm32 Can Bus Hakkında Bir Kaç Soru
Gönderen: zahi - 16 Mayıs 2018, 14:02:09
elimdeki stm32f103 yandı yenisi gelince deneyecem :) uyardığınız için teşekürler dikkat etmemişim
Başlık: Ynt: Stm32 Can Bus Hakkında Bir Kaç Soru
Gönderen: zahi - 16 Mayıs 2018, 15:16:23
Bir tane stm32f103 ile denedim değisme yok karsıdaki mcp2551 tx rx kısmını birleştirdim tek stm ile bu şekilde veri almışmıydınız @baran123  hocam
tx kısmını 4.7k ile pull up a çektim değişme olmadı.