CAN通讯模板
#define MyCAN_SJW CAN_SJW_3tq
#define MyCAN_BS1 CAN_BS1_5tq
#define MyCAN_BS2 CAN_BS2_3tq
#define MyCAN_PRE 0x08 //1MHz
#define MyCAN_DebugMode 0x01
#define MyCAN_NormalMode 0x00
#define ID_MASK CAN_ID << 5
#define ID_FlashAddress 0x0801FBFF
CanRxMsg CAN_RecData;
CanTxMsg CAN_Message;
uchar CAN_RecFlag;
uchar CAN_ID;
uchar MailBox;
void MyCAN_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
CAN_InitTypeDef CAN_InitStructure;
CAN_FilterInitTypeDef CAN_FilterInitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
//----------DATA Init----------
CAN_ID = (uchar)(FLASH_Read(ID_FlashAddress)&0x00FF);
MailBox = 0x00;
CAN_Message.StdId = CAN_ID;
CAN_Message.IDE = 0x00;
CAN_Message.RTR = 0x00;
//----------GPIO Init----------
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(GPIOA, &GPIO_InitStructure);
//----------CAN Init----------
RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1, ENABLE);
CAN_InitStructure.CAN_TTCM = DISABLE;
CAN_InitStructure.CAN_ABOM = ENABLE;
CAN_InitStructure.CAN_AWUM = DISABLE;
CAN_InitStructure.CAN_NART = DISABLE;
CAN_InitStructure.CAN_RFLM = DISABLE;
CAN_InitStructure.CAN_TXFP = DISABLE;
CAN_InitStructure.CAN_Mode = MyCAN_NormalMode;
CAN_InitStructure.CAN_SJW = MyCAN_SJW;
CAN_InitStructure.CAN_BS1 = MyCAN_BS1;
CAN_InitStructure.CAN_BS2 = MyCAN_BS2;
CAN_InitStructure.CAN_Prescaler = MyCAN_PRE;
CAN_Init(CAN1, &CAN_InitStructure);
//----------FILTER Init----------
CAN_FilterInitStructure.CAN_FilterNumber = 6;
CAN_FilterInitStructure.CAN_FilterMode = CAN_FilterMode_IdMask;
CAN_FilterInitStructure.CAN_FilterScale = CAN_FilterScale_16bit;
CAN_FilterInitStructure.CAN_FilterIdHigh = ID_MASK;
CAN_FilterInitStructure.CAN_FilterIdLow = ID_MASK;
CAN_FilterInitStructure.CAN_FilterMaskIdHigh = 0xFFF8;
CAN_FilterInitStructure.CAN_FilterMaskIdLow = 0xFFF8;
CAN_FilterInitStructure.CAN_FilterFIFOAssignment = CAN_Filter_FIFO0;
CAN_FilterInitStructure.CAN_FilterActivation = ENABLE;
CAN_FilterInit(&CAN_FilterInitStructure);
//----------NVIC Init----------
NVIC_InitStructure.NVIC_IRQChannel = USB_LP_CAN1_RX0_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x02;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
//----------ENABLE----------
CAN_ITConfig(CAN1, CAN_IT_FMP0, ENABLE);
}
void CAN_SendData(uchar* Str, uchar Len)
{
CAN_Message.DLC = Len;
for(char i = 0; i < Len; i ++)
{
CAN_Message.Data[i] = Str[i];
}
MailBox = CAN_Transmit(CAN1, &CAN_Message);
while(CAN_TransmitStatus(CAN1, MailBox) == CAN_TxStatus_Failed);
}
void CAN_ChangeID(uchar ID)
{
ushort Temp[1] = {ID};
CAN_FilterInitTypeDef CAN_FilterInitStructure;
FLASH_WriteCheck(ID_FlashAddress, Temp, 1);
CAN_Message.StdId = CAN_ID = ID;
CAN_FilterInitStructure.CAN_FilterNumber = 6;
CAN_FilterInitStructure.CAN_FilterMode = CAN_FilterMode_IdMask;
CAN_FilterInitStructure.CAN_FilterScale = CAN_FilterScale_16bit;
CAN_FilterInitStructure.CAN_FilterIdHigh = ID_MASK;
CAN_FilterInitStructure.CAN_FilterIdLow = ID_MASK;
CAN_FilterInitStructure.CAN_FilterMaskIdHigh = 0xFFF8;
CAN_FilterInitStructure.CAN_FilterMaskIdLow = 0xFFF8;
CAN_FilterInitStructure.CAN_FilterFIFOAssignment = CAN_Filter_FIFO0;
CAN_FilterInitStructure.CAN_FilterActivation = ENABLE;
CAN_FilterInit(&CAN_FilterInitStructure);
}
void USB_LP_CAN1_RX0_IRQHandler(void)
{
if(CAN_RecFlag) return;
CAN_Receive(CAN1, 0, &CAN_RecData);
CAN_RecFlag = 1;
}
CAN通讯模板的更多相关文章
- TCP建立与断开连接、socket通讯模板
在传输层,有一个重点是TCP传输时建立连接的三次"握手"和四次"挥手",因为socket工作于应用层和传输层之间,故而涉及到建立连接和关闭连接的过程,以下笔记可 ...
- python网络编程:TCP通讯模板、粘包及解决方案、自定义报头
一.TCP通讯模板 二.远程CMD程序 三.解决粘包问题 四.解决粘包问题2 一.TCP通讯模板 TCP客户端 import socket c = socket.socket() # 连接服务器 c. ...
- python网络编程:socket半连接池、UDP通讯模板
一.TCP半连接池原理 二.UDP通讯 三.UDP聊天 四.UDP聊天2 五.UDP会粘包吗 六.UDP总结 七.UDP与TCP对比 一.TCP半连接池原理 客户端 import socket cli ...
- 你该学点HTML/CSS知识的9大理由
每个人都应该学写代码——这一观点简直就是铺天盖地地映入我们眼帘.或许你会莫名其妙,程序员学代码那是理所应当,但是作为一个作家.营销人员.财务工作者甚至是工人,为什么也需要学习代码呢? 好吧,下面我会告 ...
- thinkphp整合系列之短信验证码、订单通知
现在这个短信通知泛滥的年代:应用如果没有个短信注册:你都不敢说你是搞开发的: 这个验证码搞起来是不难的:但是如果刚接触也是有点不知从哪下手的迷茫: 先讲下概念: 要想发送验证码:需要至少三项:appi ...
- Vue最常用的组件通讯有三种:父->子组件通讯、子->父组件通讯,兄弟组件通讯.(template用的pug模板语法)
Vue组件通讯 Vue最常用的组件通讯有三种:父->子组件通讯.子->父组件通讯,兄弟组件通讯.(template用的pug模板语法) 1.父->子组件通讯 父->子组件通 ...
- 云联云通讯报错:应用与模板id不匹配,解决方法
<statusMsg>应用与模板id不匹配</statusMsg> 这种一般是后端服务器上配置的APP ID和模板ID所属的APP不一致造成的 找到发送模板短信的方法,修改ap ...
- 【原创分享·微信支付】C# MVC 微信支付之微信模板消息推送
微信支付之微信模板消息推送 今天我要跟大家分享的是“模板消息”的推送,这玩意呢,你说用途嘛,那还是真真的牛逼呐.原因在哪?就是因为它是依赖微信生存的呀,所以他能不 ...
- [连载]《C#通讯(串口和网络)框架的设计与实现》-3.设备驱动的设计
目 录 第三章 设备驱动的设计... 2 3.1 初始化设备... 4 3.2 运行设备接口设计... 4 3.3 ...
- ActiveMQ 即时通讯服务 浅析
一. 概述与介绍 ActiveMQ 是Apache出品,最流行的.功能强大的即时通讯和集成模式的开源服务器.ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Provi ...
随机推荐
- Oracle中表字段加中文注释,应该怎么写呢?
首发微信公众号:SQL数据库运维 原文链接:https://mp.weixin.qq.com/s?__biz=MzI1NTQyNzg3MQ==&mid=2247485212&idx=1 ...
- PostgreSQL 时间/日期函数和操作符
一.日期/时间操作符 下表演示了基本算术操作符的行为(+,*, 等): 二.日期/时间函数 二.区别 select now();select CURRENT_DATE;select CURRENT_T ...
- 三天吃透Redis面试八股文
本文已经收录到Github仓库,该仓库包含计算机基础.Java基础.多线程.JVM.数据库.Redis.Spring.Mybatis.SpringMVC.SpringBoot.分布式.微服务.设计模式 ...
- 大道至简的架构设计思想之:封装(C系架构设计法,sishuok)
一起来看看大道至简的一些基本设计思想,首先我们来看一下什么是封装. 封装:也叫做信息隐藏,或者数据访问保护.放到程序上来讲,就是隐藏类的属性,还有实现细节,仅对外公开一些接口.那么外部,就只能通过这个 ...
- Python中文官方文档
Python 2.7.18 的中文文档: https://docs.python.org/zh-cn/2.7/ Python 3.10.6 的官方文档:https://docs.python.org ...
- oracle 设置用户永不过期
一.查看用户的proifle是哪个,一般是default SELECT username,PROFILE FROM dba_users; 二.查看指定概要文件(如default)的密码有效期 SELE ...
- cuda+pytorch环境安装
本机cuda版本为v11.5 conda install cudatoolkit 使用 CUDA 11.3版本的配置 conda install pytorch==1.11.0 torchvision ...
- 20192326杨沥凯 实验一《Linux基础与Java开发环境》实验报告
20192326杨沥凯 2020-2021-1 <数据结构与面向对象程序设计>实验一报告 课程:<程序设计与数据结构> 班级: 1923 姓名: 杨沥凯 学号:20192326 ...
- DRF排序
排序 对于列表数据,REST framework提供了OrderingFilter过滤器来帮助我们快速指明数据按照指定字段进行排序. 使用方法: 在类视图中设置filter_backends, 使用 ...
- Linux磁盘与文件系统
Linux磁盘与文件系统 我们使用过windows,相信大家对磁盘的概念都有所了解,像c盘d盘e盘,对吧,磁盘的作用是什么呢,作为整个系统的载体,磁盘承担了对系统中所有数据和文件存储的任务,并且可以保 ...