STM32F10X Çalışmalarım

Başlatan Mucit23, 12 Mart 2012, 11:17:48

Mucit23

#315
Tamam hocam ilginiz teşekkür ederim

şuan programın ticari bir niteliği yok. Çalışmalarımı deney kiti uzerinde yapıyorum.
Can bus ile ilgili kodlarda çok karmaşık. Akşam  onları biraz duzenleyeyim 2-3 saate proje dosyasını yüklerim.

Mucit23

Hocam selamlar.

Hocam benim program çok karmaşık. Bu yüzden sıfırdan bir template proje oluşturdum ve kullandığım Grafik LCD kütüphanemi Donanım kütüphanelerimi ve yazdığım CAN kütüphanemi ekledim.

Aşağıdaki deney kitini kullanıyorum
http://www.ebay.com/itm/FireBull-STM32F103VET6-development-board-with-MP3-3-2-TFT-Touch-/111429533076?pt=Art_Prints&hash=item19f1b7bd94
Yazdığım Template programı hemen yukarıdaki kartta deneyebilirim. LCD felan çalışıyor zaten denedim. Ama CAN'daki durum aynı.

Devre Şemasınıda dosyalara ekledim.
https://www.dropbox.com/s/71g1qo2goh9qcnf/STM32F103_Can_Test.rar

Tekrardan teşekkür ederim. Bende biraz örnek programlara bakayım. Umarım farklı birşeyler görürüm.

Mucit23

#317
Arkadaşlar bu konu keil debuggeri ile çözülebilir diye tahmin ediyorum. Ben programı debug ile iyi takip edemiyorum.  Debug Konusunda bilgisi olan arkadaşların yardımına ihtiyacım var.

Ben birkaç test yaptım.

İlk önce programın nerde donduğunu söyleyeyim.
ErrorStatus CanSendMessage(uint32_t CanTxId, uint8_t CanTxBufSize, uint8_t* CanTxData)
{
  CanTxMsg TxMessage;
  uint8_t i=0,CanTxMailbox=0,TimeOut=0;
  /* transmit */
  TxMessage.StdId = CanTxId;   
  TxMessage.RTR = CAN_RTR_DATA;
  TxMessage.IDE = CAN_ID_STD;  
  TxMessage.DLC = CanTxBufSize;	
   
  for(i=0;i<CanTxBufSize;i++)
	{
     TxMessage.Data[i]=CanTxData[i];
  }
	
	CanTxMailbox=CAN_Transmit(CAN1,&TxMessage);  //Mesaj Gönderiliyor
	
  TimeOut = 0;
  while((CAN_TransmitStatus(CAN1,CanTxMailbox) != CANTXOK))  
  {
		GPIO_SetBits(GPIOD,LED1);
		TimeOut++;
		if(TimeOut==255)return ERROR;
  }

	
	return SUCCESS;
}

Mesaj Gönderme fonksiyonum budur. While Döngüsünün içerisindeki GPIO_SetBits fonksiyonu hiç çalışmıyor.
keilde aşağıdaki kodun yanına breakpoint koyuyorum
while((CAN_TransmitStatus(CAN1,CanTxMailbox) != CANTXOK)) 

Sonra Debug moduna girip "Run" Tuşuna basıyorum program hemen benim break point koyduğum noktaya geliyor. Ardında "Step Over" tuşuna basıyorum ve Debugdaki step,step_over ve step out gibi butonlar pasif oluyor. Sonrasında Stop tuşuna basıyorum ve işlenen kodu gösteren imleç aşağıdaki startup dosyasında kesme vektörlerinin tanıltıldığı yerde bir yere geliyor.

Aşağıdaki resimden bakabilirsiniz.

Acaba Kesme vektörleriyle ilgili bir sorun olabilirmi diye düşünmeden edemiyorum. Çünkü Debugda yanlış anlamadıysam eğer CAN_TransmitStatus fonksiyonunda CANTXOK cevabı geliyor. Program while döngüsündeki kodları hiç çalıştırmıyor. Bu sırada interrupt geliyor ve program bilinmeyen boşluklara dalıyor.

Benim Startup dosyamda sıkıntı olabilir.

Debug'dan anlayan arkadaşlar bu durumu nasıl yorumlayabiliriz. Gerçekten vektörel bir problem olabilirmi?

Edit:

Kullandığım startup_stm32f10x_hd.s dosyasının içeriği
;******************** (C) COPYRIGHT 2011 STMicroelectronics ********************
;* File Name          : startup_stm32f10x_hd.s
;* Author             : MCD Application Team
;* Version            : V3.5.0
;* Date               : 11-March-2011
;* Description        : STM32F10x High Density Devices vector table for MDK-ARM 
;*                      toolchain. 
;*                      This module performs:
;*                      - Set the initial SP
;*                      - Set the initial PC == Reset_Handler
;*                      - Set the vector table entries with the exceptions ISR address
;*                      - Configure the clock system and also configure the external 
;*                        SRAM mounted on STM3210E-EVAL board to be used as data 
;*                        memory (optional, to be enabled by user)
;*                      - Branches to __main in the C library (which eventually
;*                        calls main()).
;*                      After Reset the CortexM3 processor is in Thread mode,
;*                      priority is Privileged, and the Stack is set to Main.
;* <<< Use Configuration Wizard in Context Menu >>>   
;*******************************************************************************
; THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
; WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
; AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
; INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
; CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
; INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
;*******************************************************************************

; Amount of memory (in bytes) allocated for Stack
; Tailor this value to your application needs
; <h> Stack Configuration
;   <o> Stack Size (in Bytes) <0x0-0xFFFFFFFF:8>
; </h>

Stack_Size      EQU     0x00000400

                AREA    STACK, NOINIT, READWRITE, ALIGN=3
Stack_Mem       SPACE   Stack_Size
__initial_sp
                                                  
; <h> Heap Configuration
;   <o>  Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>
; </h>

Heap_Size       EQU     0x00000200

                AREA    HEAP, NOINIT, READWRITE, ALIGN=3
__heap_base
Heap_Mem        SPACE   Heap_Size
__heap_limit

                PRESERVE8
                THUMB


; Vector Table Mapped to Address 0 at Reset
                AREA    RESET, DATA, READONLY
                EXPORT  __Vectors
                EXPORT  __Vectors_End
                EXPORT  __Vectors_Size

__Vectors       DCD     __initial_sp               ; Top of Stack
                DCD     Reset_Handler              ; Reset Handler
                DCD     NMI_Handler                ; NMI Handler
                DCD     HardFault_Handler          ; Hard Fault Handler
                DCD     MemManage_Handler          ; MPU Fault Handler
                DCD     BusFault_Handler           ; Bus Fault Handler
                DCD     UsageFault_Handler         ; Usage Fault Handler
                DCD     0                          ; Reserved
                DCD     0                          ; Reserved
                DCD     0                          ; Reserved
                DCD     0                          ; Reserved
                DCD     SVC_Handler                ; SVCall Handler
                DCD     DebugMon_Handler           ; Debug Monitor Handler
                DCD     0                          ; Reserved
                DCD     PendSV_Handler             ; PendSV Handler
                DCD     SysTick_Handler            ; SysTick Handler

                ; External Interrupts
                DCD     WWDG_IRQHandler            ; Window Watchdog
                DCD     PVD_IRQHandler             ; PVD through EXTI Line detect
                DCD     TAMPER_IRQHandler          ; Tamper
                DCD     RTC_IRQHandler             ; RTC
                DCD     FLASH_IRQHandler           ; Flash
                DCD     RCC_IRQHandler             ; RCC
                DCD     EXTI0_IRQHandler           ; EXTI Line 0
                DCD     EXTI1_IRQHandler           ; EXTI Line 1
                DCD     EXTI2_IRQHandler           ; EXTI Line 2
                DCD     EXTI3_IRQHandler           ; EXTI Line 3
                DCD     EXTI4_IRQHandler           ; EXTI Line 4
                DCD     DMA1_Channel1_IRQHandler   ; DMA1 Channel 1
                DCD     DMA1_Channel2_IRQHandler   ; DMA1 Channel 2
                DCD     DMA1_Channel3_IRQHandler   ; DMA1 Channel 3
                DCD     DMA1_Channel4_IRQHandler   ; DMA1 Channel 4
                DCD     DMA1_Channel5_IRQHandler   ; DMA1 Channel 5
                DCD     DMA1_Channel6_IRQHandler   ; DMA1 Channel 6
                DCD     DMA1_Channel7_IRQHandler   ; DMA1 Channel 7
                DCD     ADC1_2_IRQHandler          ; ADC1 & ADC2
                DCD     USB_HP_CAN1_TX_IRQHandler  ; USB High Priority or CAN1 TX
                DCD     USB_LP_CAN1_RX0_IRQHandler ; USB Low  Priority or CAN1 RX0
                DCD     CAN1_RX1_IRQHandler        ; CAN1 RX1
                DCD     CAN1_SCE_IRQHandler        ; CAN1 SCE
                DCD     EXTI9_5_IRQHandler         ; EXTI Line 9..5
                DCD     TIM1_BRK_IRQHandler        ; TIM1 Break
                DCD     TIM1_UP_IRQHandler         ; TIM1 Update
                DCD     TIM1_TRG_COM_IRQHandler    ; TIM1 Trigger and Commutation
                DCD     TIM1_CC_IRQHandler         ; TIM1 Capture Compare
                DCD     TIM2_IRQHandler            ; TIM2
                DCD     TIM3_IRQHandler            ; TIM3
                DCD     TIM4_IRQHandler            ; TIM4
                DCD     I2C1_EV_IRQHandler         ; I2C1 Event
                DCD     I2C1_ER_IRQHandler         ; I2C1 Error
                DCD     I2C2_EV_IRQHandler         ; I2C2 Event
                DCD     I2C2_ER_IRQHandler         ; I2C2 Error
                DCD     SPI1_IRQHandler            ; SPI1
                DCD     SPI2_IRQHandler            ; SPI2
                DCD     USART1_IRQHandler          ; USART1
                DCD     USART2_IRQHandler          ; USART2
                DCD     USART3_IRQHandler          ; USART3
                DCD     EXTI15_10_IRQHandler       ; EXTI Line 15..10
                DCD     RTCAlarm_IRQHandler        ; RTC Alarm through EXTI Line
                DCD     USBWakeUp_IRQHandler       ; USB Wakeup from suspend
                DCD     TIM8_BRK_IRQHandler        ; TIM8 Break
                DCD     TIM8_UP_IRQHandler         ; TIM8 Update
                DCD     TIM8_TRG_COM_IRQHandler    ; TIM8 Trigger and Commutation
                DCD     TIM8_CC_IRQHandler         ; TIM8 Capture Compare
                DCD     ADC3_IRQHandler            ; ADC3
                DCD     FSMC_IRQHandler            ; FSMC
                DCD     SDIO_IRQHandler            ; SDIO
                DCD     TIM5_IRQHandler            ; TIM5
                DCD     SPI3_IRQHandler            ; SPI3
                DCD     UART4_IRQHandler           ; UART4
                DCD     UART5_IRQHandler           ; UART5
                DCD     TIM6_IRQHandler            ; TIM6
                DCD     TIM7_IRQHandler            ; TIM7
                DCD     DMA2_Channel1_IRQHandler   ; DMA2 Channel1
                DCD     DMA2_Channel2_IRQHandler   ; DMA2 Channel2
                DCD     DMA2_Channel3_IRQHandler   ; DMA2 Channel3
                DCD     DMA2_Channel4_5_IRQHandler ; DMA2 Channel4 & Channel5
__Vectors_End

__Vectors_Size  EQU  __Vectors_End - __Vectors

                AREA    |.text|, CODE, READONLY
                
; Reset handler
Reset_Handler   PROC
                EXPORT  Reset_Handler             [WEAK]
                IMPORT  __main
                IMPORT  SystemInit
                LDR     R0, =SystemInit
                BLX     R0               
                LDR     R0, =__main
                BX      R0
                ENDP
                
; Dummy Exception Handlers (infinite loops which can be modified)

NMI_Handler     PROC
                EXPORT  NMI_Handler                [WEAK]
                B       .
                ENDP
HardFault_Handler\
                PROC
                EXPORT  HardFault_Handler          [WEAK]
                B       .
                ENDP
MemManage_Handler\
                PROC
                EXPORT  MemManage_Handler          [WEAK]
                B       .
                ENDP
BusFault_Handler\
                PROC
                EXPORT  BusFault_Handler           [WEAK]
                B       .
                ENDP
UsageFault_Handler\
                PROC
                EXPORT  UsageFault_Handler         [WEAK]
                B       .
                ENDP
SVC_Handler     PROC
                EXPORT  SVC_Handler                [WEAK]
                B       .
                ENDP
DebugMon_Handler\
                PROC
                EXPORT  DebugMon_Handler           [WEAK]
                B       .
                ENDP
PendSV_Handler  PROC
                EXPORT  PendSV_Handler             [WEAK]
                B       .
                ENDP
SysTick_Handler PROC
                EXPORT  SysTick_Handler            [WEAK]
                B       .
                ENDP

Default_Handler PROC

                EXPORT  WWDG_IRQHandler            [WEAK]
                EXPORT  PVD_IRQHandler             [WEAK]
                EXPORT  TAMPER_IRQHandler          [WEAK]
                EXPORT  RTC_IRQHandler             [WEAK]
                EXPORT  FLASH_IRQHandler           [WEAK]
                EXPORT  RCC_IRQHandler             [WEAK]
                EXPORT  EXTI0_IRQHandler           [WEAK]
                EXPORT  EXTI1_IRQHandler           [WEAK]
                EXPORT  EXTI2_IRQHandler           [WEAK]
                EXPORT  EXTI3_IRQHandler           [WEAK]
                EXPORT  EXTI4_IRQHandler           [WEAK]
                EXPORT  DMA1_Channel1_IRQHandler   [WEAK]
                EXPORT  DMA1_Channel2_IRQHandler   [WEAK]
                EXPORT  DMA1_Channel3_IRQHandler   [WEAK]
                EXPORT  DMA1_Channel4_IRQHandler   [WEAK]
                EXPORT  DMA1_Channel5_IRQHandler   [WEAK]
                EXPORT  DMA1_Channel6_IRQHandler   [WEAK]
                EXPORT  DMA1_Channel7_IRQHandler   [WEAK]
                EXPORT  ADC1_2_IRQHandler          [WEAK]
                EXPORT  USB_HP_CAN1_TX_IRQHandler  [WEAK]
                EXPORT  USB_LP_CAN1_RX0_IRQHandler [WEAK]
                EXPORT  CAN1_RX1_IRQHandler        [WEAK]
                EXPORT  CAN1_SCE_IRQHandler        [WEAK]
                EXPORT  EXTI9_5_IRQHandler         [WEAK]
                EXPORT  TIM1_BRK_IRQHandler        [WEAK]
                EXPORT  TIM1_UP_IRQHandler         [WEAK]
                EXPORT  TIM1_TRG_COM_IRQHandler    [WEAK]
                EXPORT  TIM1_CC_IRQHandler         [WEAK]
                EXPORT  TIM2_IRQHandler            [WEAK]
                EXPORT  TIM3_IRQHandler            [WEAK]
                EXPORT  TIM4_IRQHandler            [WEAK]
                EXPORT  I2C1_EV_IRQHandler         [WEAK]
                EXPORT  I2C1_ER_IRQHandler         [WEAK]
                EXPORT  I2C2_EV_IRQHandler         [WEAK]
                EXPORT  I2C2_ER_IRQHandler         [WEAK]
                EXPORT  SPI1_IRQHandler            [WEAK]
                EXPORT  SPI2_IRQHandler            [WEAK]
                EXPORT  USART1_IRQHandler          [WEAK]
                EXPORT  USART2_IRQHandler          [WEAK]
                EXPORT  USART3_IRQHandler          [WEAK]
                EXPORT  EXTI15_10_IRQHandler       [WEAK]
                EXPORT  RTCAlarm_IRQHandler        [WEAK]
                EXPORT  USBWakeUp_IRQHandler       [WEAK]
                EXPORT  TIM8_BRK_IRQHandler        [WEAK]
                EXPORT  TIM8_UP_IRQHandler         [WEAK]
                EXPORT  TIM8_TRG_COM_IRQHandler    [WEAK]
                EXPORT  TIM8_CC_IRQHandler         [WEAK]
                EXPORT  ADC3_IRQHandler            [WEAK]
                EXPORT  FSMC_IRQHandler            [WEAK]
                EXPORT  SDIO_IRQHandler            [WEAK]
                EXPORT  TIM5_IRQHandler            [WEAK]
                EXPORT  SPI3_IRQHandler            [WEAK]
                EXPORT  UART4_IRQHandler           [WEAK]
                EXPORT  UART5_IRQHandler           [WEAK]
                EXPORT  TIM6_IRQHandler            [WEAK]
                EXPORT  TIM7_IRQHandler            [WEAK]
                EXPORT  DMA2_Channel1_IRQHandler   [WEAK]
                EXPORT  DMA2_Channel2_IRQHandler   [WEAK]
                EXPORT  DMA2_Channel3_IRQHandler   [WEAK]
                EXPORT  DMA2_Channel4_5_IRQHandler [WEAK]

WWDG_IRQHandler
PVD_IRQHandler
TAMPER_IRQHandler
RTC_IRQHandler
FLASH_IRQHandler
RCC_IRQHandler
EXTI0_IRQHandler
EXTI1_IRQHandler
EXTI2_IRQHandler
EXTI3_IRQHandler
EXTI4_IRQHandler
DMA1_Channel1_IRQHandler
DMA1_Channel2_IRQHandler
DMA1_Channel3_IRQHandler
DMA1_Channel4_IRQHandler
DMA1_Channel5_IRQHandler
DMA1_Channel6_IRQHandler
DMA1_Channel7_IRQHandler
ADC1_2_IRQHandler
USB_HP_CAN1_TX_IRQHandler
USB_LP_CAN1_RX0_IRQHandler
CAN1_RX1_IRQHandler
CAN1_SCE_IRQHandler
EXTI9_5_IRQHandler
TIM1_BRK_IRQHandler
TIM1_UP_IRQHandler
TIM1_TRG_COM_IRQHandler
TIM1_CC_IRQHandler
TIM2_IRQHandler
TIM3_IRQHandler
TIM4_IRQHandler
I2C1_EV_IRQHandler
I2C1_ER_IRQHandler
I2C2_EV_IRQHandler
I2C2_ER_IRQHandler
SPI1_IRQHandler
SPI2_IRQHandler
USART1_IRQHandler
USART2_IRQHandler
USART3_IRQHandler
EXTI15_10_IRQHandler
RTCAlarm_IRQHandler
USBWakeUp_IRQHandler
TIM8_BRK_IRQHandler
TIM8_UP_IRQHandler
TIM8_TRG_COM_IRQHandler
TIM8_CC_IRQHandler
ADC3_IRQHandler
FSMC_IRQHandler
SDIO_IRQHandler
TIM5_IRQHandler
SPI3_IRQHandler
UART4_IRQHandler
UART5_IRQHandler
TIM6_IRQHandler
TIM7_IRQHandler
DMA2_Channel1_IRQHandler
DMA2_Channel2_IRQHandler
DMA2_Channel3_IRQHandler
DMA2_Channel4_5_IRQHandler
                B       .

                ENDP

                ALIGN

;*******************************************************************************
; User Stack and Heap initialization
;*******************************************************************************
                 IF      :DEF:__MICROLIB
                
                 EXPORT  __initial_sp
                 EXPORT  __heap_base
                 EXPORT  __heap_limit
                
                 ELSE
                
                 IMPORT  __use_two_region_memory
                 EXPORT  __user_initial_stackheap
                 
__user_initial_stackheap

                 LDR     R0, =  Heap_Mem
                 LDR     R1, =(Stack_Mem + Stack_Size)
                 LDR     R2, = (Heap_Mem +  Heap_Size)
                 LDR     R3, = Stack_Mem
                 BX      LR

                 ALIGN

                 ENDIF

                 END

;******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE*****

CLR

Merhaba

Az önce programını indirdim, debug yaparken baktım ki interrupta gitmek istiyor ama interrupt vector adresini bulamıyor ve sonsuz döngüye giriyor.

Keilin startup dosyasını ekleyince çalıştı. ST'nin startup dosyasını kullanma.
Knowledge and Experience are Power

CLR

@Mucit23

Neoldu hala çalıştıramadın mı? Bir cevap gelmedi senden?
Knowledge and Experience are Power

Mucit23

Hocam kusura bakmayın. Dün akşam keilin startup dosyasiyla bir deneme yaptım ama yine çalışmadı.  Debugda durum aynı.  Fakat ayrıntılı test yapamadım.  Şuanda zaten şehir dışına çıktım hafta sonuna kadar dönmeyeceğim. Artık ozaman bakmayı düşünüyorum.
İlginiz için çok teşekkür ederim.

CLR

Aynı development boarddan bende de var, ilk testte senin start-up'ta kitlendi, debug yapınca interrupt adresini bulamıyordu ve start-up içinde interrupt adreslerinin sonunda kitlenip kalıyordu. 
Sonra keilin startup dosyasını aldım kopyaladım çalıştı, can interface çalışınca ekrana success yazdı. 5dk kadar test yaptım her defasında başarılı oldu. 

Neyse kolay gelsin,
Knowledge and Experience are Power

Mucit23

Hocam ben memlekete dönünce tekrardan ayrıntılı bir şekilde bakacağım.  Büyük ihtimal çözerim artık. Teşekkür ederim.

Mucit23

#323
Hocam memlekete tekrardan döndüm. Şimdi yine Canbus üzerinde çalışmalara başladım. Kaldığım yerden devam ediyorum. En son startup dosyasında problem vardı. Ben keil içerisindeki Startup dosyasını kullandım ama değişen birşey olmadı. Sorun aynı şekilde devam ediyor.

Mümkünse eğer kendi kullandığınız startup dosyasını verebilirmisiniz, veya vakit kaybetmemek adına template projeyi gönderebilirmisiniz.



mesaj birleştirme:: 25 Ağustos 2014, 14:10:50

CLR Hocam teşekkürler.

Çözdüm problemi. Şuanda LoopBack Modunda veri gönderip alabildim. Kesme oluştu.

Sorun şuradaymış. Çok ufak bir hata, Startup dosyasını incelerken Vektör tanımlamaları USB_LP_CAN1_RX0_IRQHandler şeklinde verilmiş.
Benim İnterrupt fonksiyonlarım ise USB_LP_CAN_RX0_IRQHandler şeklinde tanımlanmıştı. Bunları düzelttim LoopBack modunda data gönderip aldım.

Artık STM32'nin çalıştığını söyleyebilirim. Şimdi hızımı almışken Baudrateleri ayarlayıp MCP ile haberleşmeye çalışayım.

Mucit23

Hocam STM32'yi normal moda aldım. MCP2515'den 100ms aralıklarla mesaj gönderiyorum. Amacım STM32'de mesaj geldi interrupt'u oluşturmak. STM32 sadece gelen mesajları dinliyor.

Baudrateleri Microchip'in Can Bit Timing Calculator denen bir programıyla ayarlıyorum. Linki aşağıdadır.
http://www.intrepidcs.com/support/mbtime.htm
Mümkünse eğer programı sizde bir inceleyin. Eğer doğru değerler veriyorsa eğer çok işlevsel olduğunu söyleyebilirim.

Bu program MCP2515'için doğrudan register değerlerini veriyor. STM32 için OSC frekansını 36Mhz Yapıp verdiği değerlerden Propagation Delay ile Phase Segment1 değerlerini toplayıp BS1'e,  Phase Segment2 değerini BS2'ye, Syncro Jump With değerini ise SJW ye yazıyorum. Prescalleri Programın verdiği değer ile değiştiriyorum. Şimdilik ayarları bu şekilde yapıyorum. Örneğin 125KBit için STM32 de aşağıdaki değerleri kullandım.

  CAN_InitStructure.CAN_SJW=CAN_SJW_1tq;
  CAN_InitStructure.CAN_BS1=CAN_BS1_15tq;
  CAN_InitStructure.CAN_BS2=CAN_BS2_8tq;
  CAN_InitStructure.CAN_Prescaler=5;

Dediğim gibi LoopBack'de sıkıntı yok. Fakat MCP2515'den gönderdiğim mesajları almıyor. STM32'nin Can RX pininde çok yoğun bir data akışı oluyor(Skop ile bakıyorum)

Hocam elimde lojik analyser ile osiloskop var. Baudrate uyumsuzluğunu nasıl anlarım? Yada başka bir sorunmu var acaba? Artık STM32'dense MCP2515 tarafı beni daha çok endişendiriyor. Fikriniz nedir acaba

Kerim42

#325
    Merhaba yazınızı okumuştum ama STM hakkında çok bilğim olmadığı için yalnış yönlendirme yapar ve sizi daha çok uğraştırırım diye yazmamıştım.
      Hocam böyle durumlarda ben canbus analyzer kullanıyorum. Hiç bilmediğim bir nodu bağlıyorum hızını gönderdiği dataları okuyup algoritma olusturuyordum. Böylece gönderdiğini yada hızının umdugum degerler olup olmadığını görüyorum. 
      Denetleyici tarafında Microchip Canbus24 ve Canbus18 kullandım. Can hatıında iki node oluşturdum. ikisini birbirine bağladım çalışmadı. Can analayzer ile baktım ikiside ayrı ayrı çalışıyor. Ama hızları farklı olmuş. Halbuki Can Bit Timing Calculator  programı ile hesaplayıp değerleri girmiştim. Sonuçta Şunu gördüm. Canbus24 de Can Bit Timing Calculator  programındaki değerleri girince 2 ile çarpıyordu. Yani biri diğerinin ikikat hızlı idi. Analayzer olmasa idi kütüphane dosyalarının içinde kaybolacaktım.
Piyasa da bir çok analyzer var. Ben bunu kullanıyorum. http://www.microchip.com/Developmenttools/ProductDetails.aspx?PartNO=APGDT002   Kaynak kodlarını da veriyorlar. Kullanımı kolay iki yıla yakın kullanıyorum bir sorun çıkmadı. Burda da tanıtımı Microchip CAN BUS Analyzer Demonstration
    Saygılarımla.
Alemi padişah olmak bir kuru kavga imiş. Bir veliye bende olmak cümleden ala imiş. (Yavuz Sultan Selim)

CLR

@Mucit23
logic analyzer varsa bitin yükselen ve düşen kenar arasındaki veya tersi süreyi  ölç mesela 10us ise 1/10us ile bitrate'ini bulursun bu kadar basit. Ayrıca logic analyzer üzerinde can logger var direk bitrate'i tespit ediyormuydu hiç bakmadım, yoksa bulduğun bitrate ayarla  gönderdiğin veriyi logic analyzer üzerinde alıyorsan bu işi doğru yapmışsındır. Bu işi scop ilede yapabilirsin.

@Kerim42
Microchipin 16bit serisinde instruction clock, fosc/2'dir pic 18'de ise fosc/4 aradaki fark buradan kaynaklanıyor.
Knowledge and Experience are Power

Mucit23

Hocam sorunu çözdüm sayılır.

Dediğiniz gibi lojik analyser ile bakınca hemen baudratelerin farklı olduğunu anladım. Ben microchip'in hesaplama programıyla aldığım değerleri STM32'ye girmiştim. 125Kbit için ayarladığımı sanıyordum ama aslında STM32 300Kbit ile haberleşiyormuş. Fakat MCP2515 tam ayarladığım gibi 125Kbit ile haberleşiyordu. İletişim problemi bu hız farklılığından kaynaklanıyormuş.

Saleae nin logic analyseri bu farkı görmemde çok işime yaradı.

Şimdi haberleşme hızını 250Kbit'e ayarladım. STM32 tarafında bir sıkıntı yok görünüyor. İnterrupt felan oluşuyor. Gelen dataları alabiliyorum.

Lojik analyser'in Can Yorumlayıcısını açıyorum gelen giden bütün dataları gösteriyor. Gerçekten iyiymiş.


Anlamadığım birkaç şey kaldı
Lojik analyserda dikkat ederseniz Benim STM32'den gönderdiğim data Hem CANTX de hemde CANRX de görünüyor. Bunun sebebi nedir? Can Controlleri normal modda çalıştırıyorum. Halbuki MCP den gelen datalar sadece CANRX de görünüyor.

Tek bir sorun kaldı, oda benim stm32 ile gönderdiğim datalar STM 32 tarafında karşıya başarılı bir şekilde iletilmiş olarak görünsede mcp tarafında herhangi bir hareketlenme olmuyor. MCP2515 için can_kbhit fonksiyonu var. Bu fonksiyon 1 ile dönerse mesaj gelmiş diyoruz ama bir türlü mesaj geldiğini göremedim. Bunuda halledersem problem kalmayacak.