资源简介
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
相关资源
- CANopen使用手册_埃斯顿
- CanuMobiSim
- 直流无刷电机方波驱动 stm32 例程代码
- STM32中文资料
- STM32蓝牙和串口程序
- STM32f103超声波模块例程
- stm32f103c8t6 4 oled.rar
- stm32f030 IAP Demo(原创)
- 28335CAN调试程序
- STM32基于rt_thread操作系统的SDHC卡文件
- NRF24L01实现51与STM32双向通讯
- STM32F103 串口程序(完整版)
- stm32 ds18b20 温度传感器 测试通过
- stm32官方例程
- STM32F103定时器中断程序
- [免费]基于stm32f103ze 的OLED驱动代码
- STM32F103RBT6驱动UC1698控制芯片的160160黑
- STM32F103 DS18B20 V3.5.0固件库驱动程序工
- STM32定时器使用入门。看了这个程序会
- UART转CAN或LIN的工具(Uart2any)和文档
- SIM908 SDIO FSMC STM32 FIFO
- 28335写的用spi读取传感器数据并用CA
- STM32F103 CC2500完整驱动(模拟SPI)
- wwwscan-很强大的后台扫描工具
- AD7606采集程序
- stm32 用SPI 方式读写 SDHC
- stm32通过DMA方式采集ADC数据
- 意法半导体STM全系列微控制器STM32ST
- CAN Linux驱动代码
- 基于STM32芯片的SX1278 驱动 LORA.rar
评论
共有 条评论