STM32F407的CAN通信实验
软件:keil5、EmbededDebug v2.0
目的:按下按键芯片能发送给电脑。当电脑发送时,触发中断,而后芯片把收到的数据返回给电脑
以下必须有,放入主函数:
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2
delay_init(168); //初始化延时函数
LED_Init(); //初始化LED
KEY_Init(); //按键初始化
CAN1_Mode_Init(CAN_SJW_1tq,CAN_BS2_6tq,CAN_BS1_7tq,6,CAN_Mode_Normal);//500K
while(1)
{
key=KEY_Scan(0);//按键扫描
if(key==KEY0_PRES)//KEY0按下,发送一次数据
{
for(i=0;i<8;i++)
{
canbuf[i]=i;//填充发送缓冲区
}
CAN1_KeySend_Msg(canbuf,8);
}
}
使用扩展帧,不用标准帧:
u8 CAN1_KeySend_Msg(u8* msg,u8 len)
{
u8 mbox;
u16 i=0;
CanTxMsg TxMessage;
//TxMessage.StdId=0x18; // This parameter can be a value between 0 to 0x7FF. 标准的不用了
TxMessage.ExtId=0x181056f4; // This parameter can be a value between 0 to 0x1FFFFFFF 使用扩展
//TxMessage.IDE=0;
TxMessage.IDE=1; //使用扩展置1
TxMessage.RTR=0;// 消息类型为数据帧
TxMessage.DLC=len;
for(i=0;i
TxMessage.Data[i]=msg[i];
mbox= CAN_Transmit(CAN1, &TxMessage);
i=0;
while((CAN_TransmitStatus(CAN1, mbox)==CAN_TxStatus_Failed)&&(i<0XFFF))i++;//等待发送结束
if(i>=0XFFF)return 1;
return 0;
}
最重要的就是:CAN_Transmit()
在stm32f4xx_can.c文件中
如果用例程,使用扩展帧的时候一直都失败
所以需要修改的地方如下:
assert_param(IS_CAN_EXTID(TxMessage->ExtId));
CANx->sTxMailBox[transmit_mailbox].TIR |= ((TxMessage->ExtId << 3) | \
TxMessage->IDE<<2 | \
TxMessage->RTR<<1);
现在自己写一个结构体用来存放自己想发送的数据
typedef struct CAN_Tx{
u16 DA; //指定发送的数据
u16 DB;
u16 DC;
u16 DD;
u16 Ide;
u16 Rtr;
u16 Len; //指定字节数
u32 RevMBXnID ; //指定发送的ID号,
}TCAN_Msg;
TCAN_Msg CANTxMsg[]={{0,0,0,0, 0,0,0,0x00}};
再搞一个指针TCAN_Msg *PtrCanTx = &CANTxMsg[0];//指向结构体地址
就可以这样了:PtrCanTx-> Len = 8;
再写一个和上面u8 CAN1_KeySend_Msg(u8* msg,u8 len)差不多的函数
就叫:u8 CAN1_Send_Msg(TCAN_Msg *CANTx)
对于中断服务函数:
在初始化的时候(用例程就行)已开启中断,所以电脑发送数据就会触发中断(FIFO0消息挂号中断允许.)
void CAN1_RX0_IRQHandler(void)
在中断中可以写一些,接收到某消息后的某动作啥的
================================================================
按键按下发送:0x01 0x02 0x03 0x04 0x05 0x06 0x07
在程序里写想发送的数据:0x01 0x00 0x00 0x00 0x00 0x00
STM32F407的CAN通信实验相关推荐
- USART串口通信实验
整理自:正点原子PPT 文章目录 串口简介 串口通信基本原理 常用串口相关寄存器 串口操作相关函数 硬件连接 串口配置一般步骤 例程参考 升级版 串口简介 详情见STM32F4开发指南 串口通信基本原 ...
- 利用三层交换机实现VLAN的通信实验报告
利用三层交换机实现VLAN的通信实验报告<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office ...
- 树莓派4bpython串口通信解读数据_树莓派基础实验36:通用串口通信实验
一.介绍 对于树莓派 3B+来说,他的UART功能有三种: 1.内部蓝牙使用: 2.控制终端使用: 3.与其他设备进行串口通信. 在树莓派基础实验35:USB TO TTL模块实验中学习了通过串口对树 ...
- windows通信端口初始化失败_STM32实例——USART串口通信实验(二)
USART 串口通信配置步骤 在上面的介绍中,可能有的朋友很不理解,不过没有关系,下面我们讲解如何使用库函数对 USART 进行配置.这个也是在编写程序中必须要了解的.具体步骤如下:(USART 相关 ...
- SPI通信实验---verilog(FPGA作为从机,使用可读可写)
文章原地址: http://www.cnblogs.com/fhyfhy/p/4429302.html SPI通信实验---verilog(FPGA作为从机,使用可读可写) 本实验讲究实用性,故设计思 ...
- 【正点原子Linux连载】第七十一章 Linux 4G通信实验 -摘自【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.0
1)实验平台:正点原子阿尔法Linux开发板 2)平台购买地址:https://item.taobao.com/item.htm?id=603672744434 2)全套实验源码+手册+视频下载地址: ...
- 基于FPGA的UART串口通信实验(VHDL语言实现)
一.前言: 最近在做UART串口通信的相关实验时,在网上查了很多资料,发现网上的大部分文章只注重理论,不注重代码,很多代码有错误不说,而且难以理解.故在完成此实验后,起了写一篇博客的心思,以供有想做相 ...
- 【正点原子FPGA连载】 第十七章 RS485串口通信实验 -摘自【正点原子】领航者ZYNQ之FPGA开发指南_V2.0
1)实验平台:正点原子领航者ZYNQ开发板 2)平台购买地址:https://item.taobao.com/item.htm?&id=606160108761 3)全套实验源码+手册+视频下 ...
- 【BLE】nrf connect配置为服务端进行蓝牙主从通信实验
需求背景 在进行BLE模块调试时,我们通常配置nrf connect APP作为蓝牙客户端,扫描蓝牙开发板的广播,进行连接. 然而当进行蓝牙主从通信实验时,为了调试主机端程序,如果手上只有一块开发板, ...
最新文章
- JVM笔记6-垃圾回收器
- Could not calculate build plan: Plugin org.apache.maven.plugins:maven-war-plugin:2.4
- 构造代码块会想你所想
- 信息学奥赛一本通 1056:点和正方形的关系 | OpenJudge NOI 1.4 18
- 「干货」不逼自己一下不知道自己多牛逼[python篇]
- vue3 编译很慢_Vue 项目编译时间过长问题
- 【Elasticsearch】如何在 Elasticsearch 中轻松编写脚本
- ASP.NET的页面生存周期 [转]
- 对象流的序列化和反序列化
- [深度学习][转载]人脸识别相似度计算方法
- TIA博途中如何将CPU导出为GSD文件与其他PLC进行PROFINET通信?
- 面向对象的英文全称叫做Object Oriented
- 计算机公式算乘法,excel表格乘法计算公式的用法
- Gym 100818F	Irrational Roots
- 使用互传APP实现Android手机投屏到windows电脑
- 苹果Mac系统历年名称和版本号
- 新编日语第四册(修订版)第03课 应用文
- Activity生命周期和启动模式
- 如何查看别人通过百度云盘分享的文件
- Linux ❉ top命令详解