• 大小: 7KB
    文件类型: .zip
    金币: 2
    下载: 2 次
    发布日期: 2021-06-25
  • 语言: 其他
  • 标签: STM32  MCP2515  CAN  SPI2  

资源简介

STM32下的MCP2515物理层驱动代码,仅用于研究和学习,代码是从相关项目工程里扣出来的,仅测试扩展帧。如有编译不过的问题或侵权问题,请联系我。波特率默认50K,CS-PB12, MISO-PB14,SCK-PB13 and MOSI-PB15,使用SPI2 + DMA,未使用MCP2515的中断引脚。

资源截图

代码片段和文件信息

#include “Physical_Mcp2515.h“
#define SPI1_DR_Address    0x4001300C
#define SPI2_DR_Address    0x4000380C
#define BUFFERSIZE         20
#define CRCPOLYNOMIAL      7

unsigned char PhyMcp2515_BufferRx[BUFFERSIZE];
unsigned char PhyMcp2515_BufferTx[BUFFERSIZE];
MCP2515MSG st_phyMcp_canMsg0;
MCP2515MSG st_phyMcp_canMsg1;

unsigned short us_phyMcp2515_dmaErrFlag;
unsigned short us_phyMcp2515_errStep;
unsigned char uc_phyMcp2515_commFlag;//通讯正常1
unsigned char uc_PhyMcp2515_canIntf;
unsigned char uc_phyCan_resetFlag;

//调用此函数初始化即可。波特率50K,CS-PB12 MISO-PB14,SCK-PB13 and MOSI-PB15。使用SPI2,未使用MCP2515的中断引脚。
void PhyMcp2515_PeriphInit(void)
{
PhyMcp2515_GpioConfig();
PhyMcp2515_PeriphRegisterConfig();
//PhyMcp2515_McpConfig(100);
PhyMcp2515_McpConfig(50);
}

void PhyMcp2515_PeriphRegisterConfig(void)
{
PhyMcp2515_Spi2RegisterConfig();
PhyMcp2515_DmaRegisterConfig();
//PhyMcp2515_ExtiLine12Config(); 采用查询方式接收
SPI_SSOutputCmd(SPI2 DISABLE);
/* Enable SPI2 DMA Tx request */
SPI_I2S_DMACmd(SPI2 SPI_I2S_DMAReq_Tx ENABLE);
/* Enable SPI2 DMA Rx request */
SPI_I2S_DMACmd(SPI2 SPI_I2S_DMAReq_Rx ENABLE);
/* Enable SPI2 */
SPI_Cmd(SPI2 ENABLE);
}

void PhyMcp2515_GpioConfig(void)
{
GPIO_InitTypeDef GPIO_InitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOD | RCC_APB2Periph_AFIO ENABLE);

        //for CS pin
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB &GPIO_InitStructure);
/* Configure SPI2 pins: SCK and MOSI */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_15;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOB &GPIO_InitStructure);

/* Configure SPI1 pins: MISO */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOB &GPIO_InitStructure);

//for interrupt pin pc12
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
//GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOC &GPIO_InitStructure);
}

void PhyMcp2515_Spi2RegisterConfig(void)
{
SPI_InitTypeDef    SPI_InitStructure;
    
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2 ENABLE);
/* SPI2 configuration */
SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;
SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;
SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
    SPI_InitStructure.SPI_CRCPolynomial = CRCPOLYNOMIAL;
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_4;//设置波特率72/2/4
    //SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_32;
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     文件        6060  2018-11-13 20:18  Physical_Mcp2515.h
     文件       21465  2018-11-13 20:13  Physical_Mcp2515.c

评论

共有 条评论