STM32下调试CAN通信
来源:互联网 发布:直通车定向推广优化 编辑:程序博客网 时间:2024/05/29 17:51
基本流程:
1、初始化CAN模块:
启用CAN时钟
配置CAN功能寄存器(包括位定时,分频等等)
配置CAN过滤器
打开中断
2、初始化I/O口
启用GPIO时钟
打开CAN对应的GPIO引脚
配置重映射(根据实际情况)
3、定义CAN发送结构体,接收结构体
4、开始发送并准备接收总线上信号
5、检查接收邮箱收的数据是否正确
void CAN_Config(){ CAN_InitTypeDef CAN_InitStructure; CAN_FilterInitTypeDef CAN_FilterInitStructure; GPIO_InitTypeDef GPIO_InitStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1,ENABLE); /**Configure the PA11 PA12 to CAN1*/ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11 | GPIO_Pin_12; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA,&GPIO_InitStructure); GPIO_PinAFConfig(GPIOA,GPIO_PinSource11,GPIO_AF_CAN1); GPIO_PinAFConfig(GPIOA,GPIO_PinSource12,GPIO_AF_CAN1); CAN_DeInit(CAN1); CAN_InitStructure.CAN_ABOM = DISABLE; //自动离线 CAN_InitStructure.CAN_AWUM = DISABLE; //自动唤醒 CAN_InitStructure.CAN_TTCM = DISABLE; //触发通讯模式 CAN_InitStructure.CAN_NART = ENABLE; //禁止报文自动重传 CAN_InitStructure.CAN_RFLM = DISABLE; //报文自动覆盖¨ CAN_InitStructure.CAN_TXFP = DISABLE; //优先级判定 CAN_InitStructure.CAN_Mode = CAN_Mode_Normal; //工作模式 /**configure baudrate 1M */ CAN_InitStructure.CAN_SJW = CAN_SJW_1tq; CAN_InitStructure.CAN_BS1 = CAN_BS1_6tq; CAN_InitStructure.CAN_BS2 = CAN_BS2_8tq; CAN_InitStructure.CAN_Prescaler =20; CAN_Init(CAN1, &CAN_InitStructure); CAN_FilterInitStructure.CAN_FilterActivation = ENABLE; //启用过滤 CAN_FilterInitStructure.CAN_FilterFIFOAssignment = CAN_FilterFIFO0; //过滤邮箱0 CAN_FilterInitStructure.CAN_FilterIdHigh= 0x0000; //过滤ID CAN_FilterInitStructure.CAN_FilterIdLow = 0x0000; CAN_FilterInitStructure.CAN_FilterMaskIdHigh = 0x0000; //过滤ID掩码 CAN_FilterInitStructure.CAN_FilterMaskIdLow = 0x0000; CAN_FilterInitStructure.CAN_FilterMode =CAN_FilterMode_IdMask; CAN_FilterInitStructure.CAN_FilterNumber = 0; CAN_FilterInitStructure.CAN_FilterScale = CAN_FilterScale_32bit; CAN_FilterInit(&CAN_FilterInitStructure); CAN_ITConfig(CAN1,CAN_IT_FMP0,ENABLE);}
定义CAN结构体:CanTxMsg msg;CanRxMsg RxMsg; msg.StdId = 0x09; msg.IDE = CAN_Id_Standard;msg.Data[0]=0x01; msg.DLC=1;发送:`这里写代码片` CanTx = CAN_Transmit(CAN1,&msg);中断接收:void CAN1_RX0_IRQHandler(void){ if(CAN_MessagePending(CAN1,CAN_FIFO0) != RESET) { CAN_ClearITPendingBit(CAN1,CAN_IT_FMP0); CAN_Receive(CAN1,CAN_FIFO0,&RxMsg); msg.Data[0] = RxMsg.Data[2]+1; msg.DLC =1; msg.StdId = 0x02; msg.IDE = CAN_Id_Standard; if(RxMsg.Data[0] ==0x01) { GPIO_ToggleBits(GPIOD,GPIO_Pin_14); } CAN_Transmit(CAN1,&msg); }}
阅读全文
0 0
- STM32下调试CAN通信
- STM32 CAN通信问题
- stm32的CAN通信
- STM32 CAN通信
- stm32 CAN通信 TJA1040
- stm32 can中断通信
- STM32的CAN总线调试
- stm32串口通信调试总结
- STM32 CAN通信 滤波器配置总结
- STM32 CAN通信 滤波器配置总结
- STM32 CAN 通信 滤波设置问题
- STM32——CAN总线通信
- STM32调试CAN总线RxMessage.Id异常
- STM32 CAN总线应用程序,调试通过仅供参考
- 基于STM32的CAN总线通信学习笔记
- STM32——CAN通信升级版本(队列方式)
- stm32常见通信方式(TTL、RS232、RS485、CAN)总结
- STM32 CAN
- 三次握手
- 织梦模板建站必须学会的基本代码
- Trident State译文
- thinkphp+APP 消息推送
- iOS CAEmitterLayer 粒子发射器的使用详解
- STM32下调试CAN通信
- Mybatis之批量更新操作
- emacs win7部分中文乱码 设置下字体吧
- Tween动画实现过程
- 两种高性能I/O设计模式(Reactor/Proactor)的比较
- lintcode(437)书籍复印
- javaWeb学习笔记-Spring+SpringMVC注解
- Date类
- 优酷视频播放接口解析