STM32之CAN总线例程
#include "stm32f10x.h"/* RCC时钟配置 */
void RCC_config(void)
{ ErrorStatus HSEStartUpStatus;/* RCC寄存器设置为默认配置 */RCC_DeInit();/* 打开外部高速时钟 */RCC_HSEConfig(RCC_HSE_ON);/* 等待外部高速时钟稳定 */HSEStartUpStatus = RCC_WaitForHSEStartUp();if(HSEStartUpStatus == SUCCESS) { /* 设置HCLK = SYSCLK */RCC_HCLKConfig(RCC_SYSCLK_Div1);/* 设置PCLK2 = HCLK */RCC_PCLK2Config(RCC_HCLK_Div1);/* 设置PCLK1 = HCLK / 2 */RCC_PCLK1Config(RCC_HCLK_Div2);/* 设置FLASH代码延时 */FLASH_SetLatency(FLASH_Latency_2);/* 使能预取址缓存 */FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);/* 设置PLL时钟源为HSE倍频9 72MHz */RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);/* 使能PLL */RCC_PLLCmd(ENABLE);/* 等待PLL稳定 */while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);/* 设置PLL为系统时钟源 */RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);/* 等待系统时钟源切换到PLL */while(RCC_GetSYSCLKSource() != 0x08);}
}/* GPIO配置 */
void GPIO_config(void)
{GPIO_InitTypeDef GPIO_InitStructure;/* 时钟配置 */RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE);/* RX */GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;GPIO_Init(GPIOA, &GPIO_InitStructure);/* TX */GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_Init(GPIOA, &GPIO_InitStructure);
}/* 中断嵌套控制器配置 */
void NVIC_config(void)
{NVIC_InitTypeDef NVIC_InitStructure;/* 选择中断分组2 */NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);/* 设置CAN接收中断 */NVIC_InitStructure.NVIC_IRQChannel = USB_LP_CAN1_RX0_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStructure);
}/* CAN总线配置 */
void CAN_config(void)
{CAN_InitTypeDef CAN_InitStructure;CAN_FilterInitTypeDef CAN_FilterInitStructure;RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1, ENABLE);/* CAN1默认参数 */CAN_DeInit(CAN1);/* 将结构体填入默认参数 */CAN_StructInit(&CAN_InitStructure);/* 关闭时间触发模式 */CAN_InitStructure.CAN_TTCM = DISABLE;/* 关闭自动离线管理 */CAN_InitStructure.CAN_ABOM = ENABLE;/* 关闭自动唤醒 */CAN_InitStructure.CAN_AWUM = ENABLE;/* 自动重传 */CAN_InitStructure.CAN_NART = DISABLE;/* 禁止FIFO溢出时覆盖原报文 */CAN_InitStructure.CAN_RFLM = DISABLE;/* 关闭优先级取决于ID */CAN_InitStructure.CAN_TXFP = DISABLE;/* 正常模式 */CAN_InitStructure.CAN_Mode = CAN_Mode_Normal;/* 设置波特率 */CAN_InitStructure.CAN_SJW = CAN_SJW_2tq;CAN_InitStructure.CAN_BS1 = CAN_BS1_6tq;CAN_InitStructure.CAN_BS2 = CAN_BS2_3tq;CAN_InitStructure.CAN_Prescaler = 4;/* 初始化CAN总线 */CAN_Init(CAN1, &CAN_InitStructure);/* 过滤器配置 */CAN_FilterInitStructure.CAN_FilterNumber = 0;CAN_FilterInitStructure.CAN_FilterMode = CAN_FilterMode_IdMask;CAN_FilterInitStructure.CAN_FilterScale = CAN_FilterScale_32bit;CAN_FilterInitStructure.CAN_FilterIdHigh = 0x0020;CAN_FilterInitStructure.CAN_FilterIdLow = 0x0007;CAN_FilterInitStructure.CAN_FilterMaskIdHigh = 0x0020;CAN_FilterInitStructure.CAN_FilterMaskIdLow = 0x0000;CAN_FilterInitStructure.CAN_FilterFIFOAssignment = CAN_Filter_FIFO0;CAN_FilterInitStructure.CAN_FilterActivation = ENABLE;CAN_FilterInit(&CAN_FilterInitStructure);/* 接收挂起中断 */CAN_ITConfig(CAN1, CAN_IT_FMP0, ENABLE);
}/* 毫秒延时函数 */
void delay_ms(uint16_t time)
{ uint16_t i = 0; while(time--){i = 12000;while(i--); }
}CanTxMsg TxMessage;/* 主函数 */
int main(void)
{uint8_t TransmitMailbox = 0;/* RCC时钟配置 */RCC_config();/* GPIO配置 */GPIO_config(); /* CAN总线配置 */CAN_config();/* 中断嵌套控制器配置 */NVIC_config();while(1){TxMessage.StdId = 1;TxMessage.ExtId = 0;TxMessage.IDE = CAN_ID_STD;TxMessage.RTR = CAN_RTR_DATA;TxMessage.DLC = 8;TxMessage.Data[0] = 0x11;TxMessage.Data[1] = 0x22;TxMessage.Data[2] = 0x33;TxMessage.Data[3] = 0x44;TxMessage.Data[4] = 0x55;TxMessage.Data[5] = 0x66;TxMessage.Data[6] = 0x77;TxMessage.Data[7] = 0x88;TransmitMailbox = CAN_Transmit(CAN1, &TxMessage);while((CAN_TransmitStatus(CAN1, TransmitMailbox) != CANTXOK));delay_ms(1000);}
}void USB_LP_CAN1_RX0_IRQHandler(void)
{CanRxMsg RxMessage;volatile CanRxMsg Message;CAN_Receive(CAN1, CAN_FIFO0, &RxMessage);Message.StdId = RxMessage.StdId;Message.ExtId = RxMessage.ExtId;Message.IDE = RxMessage.IDE;Message.RTR = RxMessage.RTR;Message.DLC = RxMessage.DLC;Message.Data[0] = RxMessage.Data[0];Message.Data[1] = RxMessage.Data[1];Message.Data[2] = RxMessage.Data[2];Message.Data[3] = RxMessage.Data[3];Message.Data[4] = RxMessage.Data[4];Message.Data[5] = RxMessage.Data[5];Message.Data[6] = RxMessage.Data[6];Message.Data[7] = RxMessage.Data[7];
}
STM32之CAN总线例程相关推荐
- 基于STM32的CAN总线通信学习笔记
转自:https://blog.csdn.net/ludaoyi88/article/details/53350077 基于STM32的CAN总线通信学习笔记 本文主要简单介绍CAN总线的相关概念,以 ...
- 初学24CXX系列EEPROM使用详解STM32库函数I2C总线
24CXX系列芯片属于EEPROM(Electrically Erasable Programmable read only memory)即电可擦可编程只读存储器,是一种掉电后数据不丢失(不挥发)存 ...
- stm32 USART接收总线空闲中断--USART_IT_IDLE
stm32 USART接收总线空闲中断--USART_IT_IDLE 版权声明:转载请注明作者和链接 https://blog.csdn.net/Hola_ya/article/details/815 ...
- 基于stm32的can总线彻底研究
1.CAN总线的初始化 void can_init(void) { CAN_InitTypeDef CAN_InitStructure; CAN_FilterIn ...
- 2个相同的 stm32 can通讯不成功_一文读懂,基于 STM32 和 CAN 总线的温度监控系统的设计方法...
1 系统总体方案概述 系统总体框图如图 1 所示,本系统采用主站+从站的结构,CAN 主站主要实现温度数据的存储以及 CAN 总线协议和串口协议之间的桥接,CAN 从站主要实现温度的采集.CAN 从站 ...
- STM32三条总线(AHB、APB1、APB2)的外设映射情况
STM32三条总线(AHB.APB1.APB2)的外设映射情况 1.AHB (1)Flash储存器 (2)DMA (3)复位和时钟控制 (4)CRC (5)以太网 (6)SDIO 2.APB1总线(支 ...
- STM32 4x4矩阵薄膜键盘例程
STM32 4x4矩阵薄膜键盘例程 STM32 4x4矩阵薄膜键盘例程 TM32 4x4矩阵薄膜键盘例程,实现有按键输入才会打印,薄膜键盘接口处表明了1-8接口,对应PC0-7接口. 下载地址:htt ...
- STM32的CAN总线调试经验分享
相关文章 CAN总线简易入门教程 CAN总线显性电平和隐性电平详解 STM32的CAN总线调试经验分享 文章目录 相关文章 背景 CAN总线 CAN控制器 CAN收发器 调试过程 硬件排查 CAN分析 ...
- stm32的can总线理解及应用——程序对应stm32f103系列
CAN 是Controller Area Network 的缩写(以下称为CAN),是ISO国际标准化的串行通信协议. 它的通信速度较快,通信距离远,最高1Mbps(距离小于40米),最远可达10千 ...
最新文章
- UI5 Source code map机制的细节介绍
- Python操作Redis中的hash
- 投资学习网课笔记(part5)--基金第五课
- hp服务器370G5硬盘列阵,hp DL380 g5创建raid阵列安装系统准备工作
- C#移除HTML标记
- php double 类型 浮点数相减
- js 正则表达式详细基础教程
- 使用js实现鼠标放置时显示下拉列表
- java 当前时间 long_java 获取当前的日期、时间, 日期、字符串、long之间的相互转换...
- Origin2021学习版申请与安装
- xgene:WGS,突变与癌,RNA-seq,WES
- 智库说 | 杨宁:从城市管理走向城市治理 大数据将发挥更大作用
- 片段音乐歌词生成工具
- 航海新说|掌舵绝招 -- 弹性 · 敏捷 · 开放
- uniApp H5项目中的压缩图片
- 推荐google浏览器插件(为专注工作使用)
- android bp文件_Android.bp学习笔记
- 知识分享:常用的游戏音效以及应用场景
- laravel rbac权限管理系统
- android studio 开发实用插件
热门文章
- zabbix php 安装,zabbix_Linux安装php5.6.31
- mysql 分组查出来横向展示_MySQL汇总分析(group by)
- QGroupBox详解
- shell中注释一段代码的方法
- ajax不能访问本地php文件,php – 使用htaccess拒绝ajax文件访问
- python 相关性检验怎么计算p值_不会Python进行时间序列预测?不要紧,大神来教你...
- (计算机组成原理)第二章数据的表示和运算-第二节3:定点数的移位运算(算数移位、逻辑移位和循环移位)
- 字符串经典题之大数相加
- 利用Nmap对MS-SQLSERVER进行渗透
- python requests 提示警告 InsecureRequestWarning