资源简介
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
相关资源
- 基于STM32F4x9的LCD显示
- VS1053B编解码器的VDR分布式声音采集卡
- stm32的DAC播放音乐文件
- 周立功PCI CAN卡LINUX驱动ubuntu16.04内核
- STM32+TMC5160代码电路图.rar
- 基于STM32的深海钻机甲板控制系统
- stm32f103.SchDoc
- 基于S32K144的CANbootloader
- STM32F103 USART+DMA
- DMA+stm32 407.zip
- 4_USART串口通信(空闲中断+DMA.zip
- stm32f105-usart-DMA收发demo
- STM32F042F6P6 Uart12DMA;发送中断接收
- 基于ARM7处理器的CAN总线网络设计
- 基于STM32的嵌入式双目图像采集系统设
- 基于STM32F103C8单片机的晶联讯电子JL
- Can EC-MPS reduce gastrointestinal side effect
- 基于STM32的温湿度检测系统实现
- stm32F4+w5300
- 14284969_《STM32单片机应用与全案例实践
-
ST-li
nk-V2的SWD仿真使用方法.docx - 安富莱STM32开发板资料
- 佳能时尚扫描仪CanoScan LiDE 500F
- CanoScan佳能4200f扫描仪驱动 v8.6.1.1a 官
- 佳能CanoScan 9000F扫描仪驱动 官方版
- 佳能canon lbp3000激光打印机驱动 for w
- STM32F103实现OV7670摄像头显示
- STM32F207学习板例程
- STM32F103VCT6TR - High-density performance lin
- 基于MC68HC908GZ32的CAN-LIN网关设计
评论
共有 条评论