Skip to main content
colinconstant
Associate II
September 9, 2020
Solved

CAN setup on STM32F303

  • September 9, 2020
  • 2 replies
  • 980 views

I've been working with CAN on the STM32F1 for some time , but I'm having a terrible time trying to get it to work on the F303. I'm hoping someone can tell me what I'm doing wrong. Thanks very much for looking at it.

void can_gpio_config(void)
{
 GPIO_InitTypeDef GPIO_InitStructure;
 RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
 
 //Configure CAN RX 
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
 GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
 GPIO_Init(GPIOA, &GPIO_InitStructure);
 
 //Configure CAN TX 
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
 GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
 GPIO_Init(GPIOA, &GPIO_InitStructure);
 
 //Connect pins 
 GPIO_PinAFConfig(GPIOA, GPIO_PinSource11, GPIO_AF_7);
 GPIO_PinAFConfig(GPIOA, GPIO_PinSource12, GPIO_AF_7); 
}
 
void can303_config(void)
{
 CAN_InitTypeDef CAN_InitStructure;
 CAN_FilterInitTypeDef CAN_FilterInitStructure;
 
 can_gpio_config();
 RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1, ENABLE);
 
// CAN register init 
 CAN_DeInit(CAN1);
 CAN_StructInit(&CAN_InitStructure);
 
 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_Normal; //CAN_Mode_LoopBack; //CAN_Mode_Normal;
 
 // Set the CAN Baudrate = 500K 
 //36,000,000 / (4 * (1 + 9 + 8)) =500,000
 CAN_InitStructure.CAN_SJW = CAN_SJW_1tq; 
 CAN_InitStructure.CAN_BS1 = CAN_BS1_9tq;
 CAN_InitStructure.CAN_BS2 = CAN_BS2_8tq;
 CAN_InitStructure.CAN_Prescaler = 4; 
 CAN_Init(CAN1, &CAN_InitStructure);
 
// CAN filter init 
 CAN_FilterInitStructure.CAN_FilterNumber = 0;
 CAN_FilterInitStructure.CAN_FilterMode = CAN_FilterMode_IdMask;
 CAN_FilterInitStructure.CAN_FilterScale = CAN_FilterScale_16bit;
 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);
 
 }

Thanks again. I really appreciate it.

  

This topic has been closed for replies.
Best answer by Tesla DeLorean
void can_gpio_config(void)
{
 GPIO_InitTypeDef GPIO_InitStructure = {0};
 RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
 
 //Configure CAN RX / TX 
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11 | GPIO_Pin_12;
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
 GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
 GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
 GPIO_Init(GPIOA, &GPIO_InitStructure);
 
 //Connect pins 
 GPIO_PinAFConfig(GPIOA, GPIO_PinSource11, GPIO_AF_9);
 GPIO_PinAFConfig(GPIOA, GPIO_PinSource12, GPIO_AF_9); 
}

2 replies

Tesla DeLorean
Tesla DeLoreanBest answer
Guru
September 9, 2020
void can_gpio_config(void)
{
 GPIO_InitTypeDef GPIO_InitStructure = {0};
 RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
 
 //Configure CAN RX / TX 
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11 | GPIO_Pin_12;
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
 GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
 GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
 GPIO_Init(GPIOA, &GPIO_InitStructure);
 
 //Connect pins 
 GPIO_PinAFConfig(GPIOA, GPIO_PinSource11, GPIO_AF_9);
 GPIO_PinAFConfig(GPIOA, GPIO_PinSource12, GPIO_AF_9); 
}

Tips, Buy me a coffee, or three.. PayPal Venmo (See Profile) Up vote any posts that you find helpful, it shows what's working..
colinconstant
Associate II
September 9, 2020

That did it. Thank you so much!