资源简介

实现软件收发,硬件中断收发

资源截图

代码片段和文件信息


#include “config.h“
#include “CAN.h“
#include “CAN_Hardware.h“
#if CANHDEN>0
#define LocalID  (uint32_t)0x00000000  //定义本机的ID 0x0012FFFF
#define IDMaskBits (uint32_t)0x00000000  //过滤器ID屏蔽位0xFFFFFFFF

#if CAN1_TX_IRQHandler_EN //如果使能了邮箱空中断
#define  buffer_length    512
uint8_t CAN_Send_Buffer[buffer_length];
CAN_Interrupt_Send_t   CAN_Interrupt_Send;
#endif //CAN1_TX_IRQHandler_EN

/***********************波特率设置********************************
*baudrate = 36M(Fpclk1)/[(CAN_SJW+CAN_BS1+CAN_BS2)*CAN_Prescaler]*
*400K : CAN_SJW = 1  CAN_BS1 = 9  CAN_BS2 = 8  CAN_Prescaler = 5 *
******************************************************************/
CAN_BaudRate baudrate_Set =       
{
.CAN_SJW   = CAN_SJW_1tq
.CAN_BS1   = CAN_BS1_9tq
  .CAN_BS2   = CAN_BS2_8tq
  .CAN_Prescaler = 5 
};


u8 CAN_Mode_Init(CAN_BaudRate *baudu8 mode)
{
GPIO_InitTypeDef GPIO_InitStructure; 
CAN_InitTypeDef        CAN_InitStructure;
  CAN_FilterInitTypeDef  CAN_FilterInitStructure;
#if CAN1_RX0_IRQHandler_EN |  CAN1_TX_IRQHandler_EN |CAN1_RX1_IRQHandler_EN
   NVIC_InitTypeDef  NVIC_InitStructure;
#endif
RCC_APB2PeriphClockCmd(RCC_Port ENABLE);//使能PORTA时钟                      
  RCC_APB1PeriphClockCmd(RCC_CAN ENABLE);//使能CAN1时钟

/* CAN register init */
  CAN_DeInit(CAN1);
  CAN_StructInit(&CAN_InitStructure);


  GPIO_InitStructure.GPIO_Pin = CAN_TX_Pin;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽
  GPIO_Init(CAN_TX_Port &GPIO_InitStructure); //初始化IO
   
  GPIO_InitStructure.GPIO_Pin = CAN_RX_Pin;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;//上拉输入
  GPIO_Init(CAN_RX_Port &GPIO_InitStructure);//初始化IO


GPIO_InitStructure.GPIO_Pin = CAN_STB_Pin;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //复用推挽
  GPIO_Init(CAN_STB_Port &GPIO_InitStructure);//初始化IO
     
CANController_NormalModel_Set();//can控制器 正常模式
 
  //CAN单元设置
  CAN_InitStructure.CAN_TTCM=DISABLE;   //非时间触发通信模式  //
  CAN_InitStructure.CAN_ABOM=DISABLE;   //软件自动离线管理  //
  CAN_InitStructure.CAN_AWUM=DISABLE;   //睡眠模式通过软件唤醒(清除CAN->MCR的SLEEP位)//
  CAN_InitStructure.CAN_NART=ENABLE;   //禁止报文自动传送 //
  CAN_InitStructure.CAN_RFLM=DISABLE;  //报文不锁定新的覆盖旧的 // 
  CAN_InitStructure.CAN_TXFP=DISABLE;   //优先级由报文标识符决定 //
  CAN_InitStructure.CAN_Mode= mode;           //模式设置: mode:0普通模式;1回环模式; //
  //设置波特率
CAN_InitStructure.CAN_SJW=baud->CAN_SJW; //重新同步跳跃宽度(Tsjw)为tsjw+1个时间单位  CAN_SJW_1tq  CAN_SJW_2tq CAN_SJW_3tq CAN_SJW_4tq
  CAN_InitStructure.CAN_BS1=baud->CAN_BS1;  //Tbs1=tbs1+1个时间单位CAN_BS1_1tq ~CAN_BS1_16tq
  CAN_InitStructure.CAN_BS2=baud->CAN_BS2; //Tbs2=tbs2+1个时间单位CAN_BS2_1tq ~ CAN_BS2_8tq
  CAN_InitStructure.CAN_Prescaler=baud->CAN_Prescaler;            //分频系数(Fdiv)为brp+1 //
  CAN_Init(CAN1 &CAN_InitStructure);            // 初始化CAN1 
   
//过滤器初

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件      16188  2017-07-05 16:06  CAN_HD(中断接收 中断发送 软件接收 软件发送)\CAN.c

     文件       2222  2017-07-05 16:06  CAN_HD(中断接收 中断发送 软件接收 软件发送)\CAN.h

     文件       1119  2017-07-05 16:07  CAN_HD(中断接收 中断发送 软件接收 软件发送)\CAN_Hardware.h

     文件       3706  2017-07-05 16:07  CAN_HD(中断接收 中断发送 软件接收 软件发送)\CAN_Interrupt.c

     目录          0  2017-07-05 16:04  CAN_HD(中断接收 中断发送 软件接收 软件发送)

----------- ---------  ---------- -----  ----

                23235                    5


评论

共有 条评论