#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总线例程相关推荐

  1. 基于STM32的CAN总线通信学习笔记

    转自:https://blog.csdn.net/ludaoyi88/article/details/53350077 基于STM32的CAN总线通信学习笔记 本文主要简单介绍CAN总线的相关概念,以 ...

  2. 初学24CXX系列EEPROM使用详解STM32库函数I2C总线

    24CXX系列芯片属于EEPROM(Electrically Erasable Programmable read only memory)即电可擦可编程只读存储器,是一种掉电后数据不丢失(不挥发)存 ...

  3. stm32 USART接收总线空闲中断--USART_IT_IDLE

    stm32 USART接收总线空闲中断--USART_IT_IDLE 版权声明:转载请注明作者和链接 https://blog.csdn.net/Hola_ya/article/details/815 ...

  4. 基于stm32的can总线彻底研究

    1.CAN总线的初始化 void can_init(void) {       CAN_InitTypeDef        CAN_InitStructure;       CAN_FilterIn ...

  5. 2个相同的 stm32 can通讯不成功_一文读懂,基于 STM32 和 CAN 总线的温度监控系统的设计方法...

    1 系统总体方案概述 系统总体框图如图 1 所示,本系统采用主站+从站的结构,CAN 主站主要实现温度数据的存储以及 CAN 总线协议和串口协议之间的桥接,CAN 从站主要实现温度的采集.CAN 从站 ...

  6. STM32三条总线(AHB、APB1、APB2)的外设映射情况

    STM32三条总线(AHB.APB1.APB2)的外设映射情况 1.AHB (1)Flash储存器 (2)DMA (3)复位和时钟控制 (4)CRC (5)以太网 (6)SDIO 2.APB1总线(支 ...

  7. STM32 4x4矩阵薄膜键盘例程

    STM32 4x4矩阵薄膜键盘例程 STM32 4x4矩阵薄膜键盘例程 TM32 4x4矩阵薄膜键盘例程,实现有按键输入才会打印,薄膜键盘接口处表明了1-8接口,对应PC0-7接口. 下载地址:htt ...

  8. STM32的CAN总线调试经验分享

    相关文章 CAN总线简易入门教程 CAN总线显性电平和隐性电平详解 STM32的CAN总线调试经验分享 文章目录 相关文章 背景 CAN总线 CAN控制器 CAN收发器 调试过程 硬件排查 CAN分析 ...

  9. stm32的can总线理解及应用——程序对应stm32f103系列

    CAN 是Controller Area Network 的缩写(以下称为CAN),是ISO国际标准化的串行通信协议.  它的通信速度较快,通信距离远,最高1Mbps(距离小于40米),最远可达10千 ...

最新文章

  1. UI5 Source code map机制的细节介绍
  2. Python操作Redis中的hash
  3. 投资学习网课笔记(part5)--基金第五课
  4. hp服务器370G5硬盘列阵,hp DL380 g5创建raid阵列安装系统准备工作
  5. C#移除HTML标记
  6. php double 类型 浮点数相减
  7. js 正则表达式详细基础教程
  8. 使用js实现鼠标放置时显示下拉列表
  9. java 当前时间 long_java 获取当前的日期、时间, 日期、字符串、long之间的相互转换...
  10. Origin2021学习版申请与安装
  11. xgene:WGS,突变与癌,RNA-seq,WES
  12. 智库说 | 杨宁:从城市管理走向城市治理 大数据将发挥更大作用
  13. 片段音乐歌词生成工具
  14. 航海新说|掌舵绝招 -- 弹性 · 敏捷 · 开放
  15. uniApp H5项目中的压缩图片
  16. 推荐google浏览器插件(为专注工作使用)
  17. android bp文件_Android.bp学习笔记
  18. 知识分享:常用的游戏音效以及应用场景
  19. laravel rbac权限管理系统
  20. android studio 开发实用插件

热门文章

  1. zabbix php 安装,zabbix_Linux安装php5.6.31
  2. mysql 分组查出来横向展示_MySQL汇总分析(group by)
  3. QGroupBox详解
  4. shell中注释一段代码的方法
  5. ajax不能访问本地php文件,php – 使用htaccess拒绝ajax文件访问
  6. python 相关性检验怎么计算p值_不会Python进行时间序列预测?不要紧,大神来教你...
  7. (计算机组成原理)第二章数据的表示和运算-第二节3:定点数的移位运算(算数移位、逻辑移位和循环移位)
  8. 字符串经典题之大数相加
  9. 利用Nmap对MS-SQLSERVER进行渗透
  10. python requests 提示警告 InsecureRequestWarning