資源簡介
實(shí)現(xiàn)軟件收發(fā),硬件中斷收發(fā)
代碼片段和文件信息
#include?“config.h“
#include?“CAN.h“
#include?“CAN_Hardware.h“
#if?CANHDEN>0
#define?LocalID? (uint32_t)0x00000000??//定義本機(jī)的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
/***********************波特率設(shè)置********************************
*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時(shí)鐘 ??????????????????? ?
??RCC_APB1PeriphClockCmd(RCC_CAN?ENABLE);//使能CAN1時(shí)鐘
/*?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; //復(fù)用推挽
??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; //復(fù)用推挽
??GPIO_Init(CAN_STB_Port?&GPIO_InitStructure);//初始化IO
?????
CANController_NormalModel_Set();//can控制器?正常模式
?
? //CAN單元設(shè)置
? CAN_InitStructure.CAN_TTCM=DISABLE; ? //非時(shí)間觸發(fā)通信模式??//
? CAN_InitStructure.CAN_ABOM=DISABLE; ? //軟件自動(dòng)離線管理 ?//
??CAN_InitStructure.CAN_AWUM=DISABLE; ? //睡眠模式通過軟件喚醒(清除CAN->MCR的SLEEP位)//
??CAN_InitStructure.CAN_NART=ENABLE; ? //禁止報(bào)文自動(dòng)傳送?//
??CAN_InitStructure.CAN_RFLM=DISABLE; ?//報(bào)文不鎖定新的覆蓋舊的?//?
??CAN_InitStructure.CAN_TXFP=DISABLE; ? //優(yōu)先級(jí)由報(bào)文標(biāo)識(shí)符決定?//
??CAN_InitStructure.CAN_Mode=?mode; ????????? //模式設(shè)置:?mode:0普通模式;1回環(huán)模式;?//
??//設(shè)置波特率
CAN_InitStructure.CAN_SJW=baud->CAN_SJW; //重新同步跳躍寬度(Tsjw)為tsjw+1個(gè)時(shí)間單位??CAN_SJW_1tq ?CAN_SJW_2tq?CAN_SJW_3tq?CAN_SJW_4tq
??CAN_InitStructure.CAN_BS1=baud->CAN_BS1;? //Tbs1=tbs1+1個(gè)時(shí)間單位CAN_BS1_1tq?~CAN_BS1_16tq
??CAN_InitStructure.CAN_BS2=baud->CAN_BS2; //Tbs2=tbs2+1個(gè)時(shí)間單位CAN_BS2_1tq?~ CAN_BS2_8tq
??CAN_InitStructure.CAN_Prescaler=baud->CAN_Prescaler;????????????//分頻系數(shù)(Fdiv)為brp+1 //
??CAN_Init(CAN1?&CAN_InitStructure);????????????//?初始化CAN1?
???
//過濾器初
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件??????16188??2017-07-05?16:06??CAN_HD(中斷接收?中斷發(fā)送?軟件接收?軟件發(fā)送)\CAN.c
?????文件???????2222??2017-07-05?16:06??CAN_HD(中斷接收?中斷發(fā)送?軟件接收?軟件發(fā)送)\CAN.h
?????文件???????1119??2017-07-05?16:07??CAN_HD(中斷接收?中斷發(fā)送?軟件接收?軟件發(fā)送)\CAN_Hardware.h
?????文件???????3706??2017-07-05?16:07??CAN_HD(中斷接收?中斷發(fā)送?軟件接收?軟件發(fā)送)\CAN_Interrupt.c
?????目錄??????????0??2017-07-05?16:04??CAN_HD(中斷接收?中斷發(fā)送?軟件接收?軟件發(fā)送)
-----------?---------??----------?-----??----
????????????????23235????????????????????5
評(píng)論
共有 條評(píng)論