资源简介
实现软件收发,硬件中断收发
代码片段和文件信息
#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
相关资源
- STM32三菱PLC源码原理图
- 基于STM32智能家居的无线网关设计与实
- 基于stm32的交通信号灯代码
- DHT11驱动程序基于STM32
- 基于STEM32的倒车记录仪智能报警系统
- STM32_GY25Z计步器
- C语言实现的红外发送STM32F10x单片机应
- stm32L系列F系列 加密库Cryptographic lib
- 心率传感器算法-stm32-实测可用
- 工程使用的STM32版FX2N源码和原理图
- 基于stm32f1的频率计
- stm32F103zet6开串口通信2 C语言
- ADC电压采集程序
- STM32 电子密码锁设计,LCD12864显示C语
- 利用OV7725照相机与STM32F1识别车牌
- 基于STM32的小车红外黑线寻迹代码
- stm32图像采集+QT上位机源码
- STM32,5110液晶显示声纳探鱼器200KHz,
- stm32iap+bootloader+app+mfc上位机
- BMP180气压计STM32例程+51例程+数据手册
- STM32实现俄罗斯方块游戏C语言
- keil基于stm32的模拟交通灯项目源码+文
- STM32F4超声波测距
- HDC1080驱动 温湿度 STM32 IIC I2C
- 语音识别STM_C语言代码
- STC15单片机ESP8266开发试验程序含原理
- 步进电机控制程序175063
- STM32F030无刷电机驱动程序
- STM32 RTC+LCD12864 实时时钟和闹钟实验
- STM32仿造FX3U-14MT-2AD2DA1CAN.rar
评论
共有 条评论