Need to help me about stm32 CAN BUS code in Keil

Status
Not open for further replies.
when you install the keil
you find the example code in the following directory

C:\Keil\ARM\Boards\Keil\MCBSTM32

---------- Post added at 13:46 ---------- Previous post was at 13:45 ----------

or check this
**broken link removed**
 

I did it and it's work but that code is deep in register I think that code is so difficul for me. I just want to config it like this below code


Code C - [expand]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
void CAN_setup()
 {
  CAN_InitTypeDef        CAN_InitStructure;
  CAN_FilterInitTypeDef  CAN_FilterInitStructure;
  u8 TransmitMailbox = 0; // Keep number of mail box status
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN, ENABLE);
  /* CAN register init */
  CAN_DeInit();
  CAN_StructInit(&CAN_InitStructure);
 
  /* CAN cell init */
    CAN_InitStructure.CAN_TTCM=DISABLE;
    CAN_InitStructure.CAN_ABOM=DISABLE;
    CAN_InitStructure.CAN_AWUM=DISABLE;
    CAN_InitStructure.CAN_NART=DISABLE;
    CAN_InitStructure.CAN_RFLM=DISABLE;
    CAN_InitStructure.CAN_TXFP=DISABLE;
    CAN_InitStructure.CAN_Mode=CAN_Mode_LoopBack;
    //CAN_InitStructure.CAN_Mode=CAN_Mode_Normal;
    /*
    CAN_InitStructure.CAN_SJW=CAN_SJW_1tq;
    CAN_InitStructure.CAN_BS1=CAN_BS1_8tq;
    CAN_InitStructure.CAN_BS2=CAN_BS2_7tq;
    CAN_InitStructure.CAN_Prescaler=1;
    */
    //CAN_InitStructure.CAN_SJW=CAN_SJW_1tq;
    //CAN_InitStructure.CAN_BS1=CAN_BS1_8tq;
    //CAN_InitStructure.CAN_BS2=CAN_BS2_7tq;
    //CAN_InitStructure.CAN_Prescaler=5;        //72MHz/2=36MHz=PCLK1 / 5 => 7200KHz / (1+8+7) => 450KHz
  
    CAN_InitStructure.CAN_SJW=CAN_SJW_1tq;
    CAN_InitStructure.CAN_BS1=CAN_BS1_10tq;
    CAN_InitStructure.CAN_BS2=CAN_BS2_7tq;
    CAN_InitStructure.CAN_Prescaler=4;          //72MHz/2=36MHz=PCLK1 / 4 => 9000KHz / (1+10+7) => 500KHz
  
    //CAN_InitStructure.CAN_SJW=CAN_SJW_1tq;
    //CAN_InitStructure.CAN_BS1=CAN_BS1_10tq;
    //CAN_InitStructure.CAN_BS2=CAN_BS2_7tq;
    //CAN_InitStructure.CAN_Prescaler=2;        //72MHz/2=36MHz=PCLK1 / 2 => 18000KHz / (1+10+7) => 1000KHz
 
    CAN_Init(&CAN_InitStructure);
    // CAN filter setup 
    CAN_FilterInitStructure.CAN_FilterNumber=1;
    CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdMask;
    CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_32bit;
    CAN_FilterInitStructure.CAN_FilterIdHigh=0x0000;
    CAN_FilterInitStructure.CAN_FilterIdLow=0x0000;
    CAN_FilterInitStructure.CAN_FilterMaskIdHigh=0x0000;
    CAN_FilterInitStructure.CAN_FilterMaskIdLow=0x0000;
    CAN_FilterInitStructure.CAN_FilterFIFOAssignment=0;
    CAN_FilterInitStructure.CAN_FilterActivation=ENABLE;
    CAN_FilterInit(&CAN_FilterInitStructure);
}

 
Last edited by a moderator:

I change from
CAN_InitStructure.CAN_SJW=CAN_SJW_1tq;
CAN_InitStructure.CAN_BS1=CAN_BS1_8tq;
CAN_InitStructure.CAN_BS2=CAN_BS2_7tq;
CAN_InitStructure.CAN_Prescaler=5; //72MHz/2=36MHz=PCLK1 / 5 => 7200KHz / (1+8+7) => 450KHz

to be

CAN_InitStructure.CAN_SJW=CAN_SJW_1tq;
CAN_InitStructure.CAN_BS1=CAN_BS1_10tq;
CAN_InitStructure.CAN_BS2=CAN_BS2_7tq;
CAN_InitStructure.CAN_Prescaler=2; //72MHz/2=36MHz=PCLK1 / 2 => 18000KHz / (1+10+7) => 1000KHz

but it same I don't know why that make me very confuse
 

Hello. Help to write the program for STM32F103C8T6 which will send in message CAN an example 410 7 00 00 00 0C to DE 00 00 148mc.
Thanks.
 

Status
Not open for further replies.

Similar threads

Cookies are required to use this site. You must accept them to continue using the site. Learn more…