stm32f103rbt6使用can
can的初始化我是把之前用的103zet6的程序拿过来的。
就是用的引脚不同,引脚的初始化不同,rbt6使用的是PA11,PA12,是默认功能,不需要复用。PB8,PB9是复用(CANRX,CANTX在Remap栏)
所以初始化的时候用了
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO,ENABLE);
/GPIO_PinRemapConfig(GPIO_Remap1_CAN1,ENABLE);
//CAN初始化
//tsjw:重新同步跳跃时间单元.范围:CAN_SJW_1tq~ CAN_SJW_4tq
//tbs2:时间段2的时间单元. 范围:CAN_BS2_1tq~CAN_BS2_8tq;
//tbs1:时间段1的时间单元. 范围:CAN_BS1_1tq ~CAN_BS1_16tq
//brp :波特率分频器.范围:1~1024; tq=(brp)*tpclk1
//波特率=Fpclk1/((tbs1+1+tbs2+1+1)*brp);
//mode:CAN_Mode_Normal,普通模式;CAN_Mode_LoopBack,回环模式;
//Fpclk1的时钟在初始化的时候设置为36M,如果设置CAN_Mode_Init(CAN_SJW_1tq,CAN_BS2_8tq,CAN_BS1_9tq,4,CAN_Mode_LoopBack);
//则波特率为:36M/((8+9+1)*4)=500Kbps
//返回值:0,初始化OK;
//其他,初始化失败;
/*CAN_RX--PA11
CAN_TX--PA12
与主控器不同之处:主控器板子用的PB8,PB9,是复用引脚,PA11 PA12的默认功能里有can,不用复用
*/
u8 CAN_Mode_Init(u8 tsjw,u8 tbs2,u8 tbs1,u16 brp,u8 mode)
{ GPIO_InitTypeDef GPIO_InitStructure; CAN_InitTypeDef CAN_InitStructure;CAN_FilterInitTypeDef CAN_FilterInitStructure;#if CAN_RX0_INT_ENABLE NVIC_InitTypeDef NVIC_InitStructure;#endif/* CAN Periph clock enable */RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA ,ENABLE); //| RCC_APB2Periph_AFIORCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1, ENABLE);// GPIO_PinRemapConfig(GPIO_Remap1_CAN1,ENABLE); /* Configure CAN pin: RX */GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;GPIO_Init(GPIOA, &GPIO_InitStructure); /* Configure CAN pin: TX */GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_Init(GPIOA, &GPIO_InitStructure); //CAN单元设置CAN_InitStructure.CAN_TTCM=DISABLE; //非时间触发通信模式 CAN_InitStructure.CAN_ABOM=ENABLE; //软件自动离线管理 ENABLE:离线自动恢复 CAN_InitStructure.CAN_AWUM=DISABLE; //睡眠模式通过软件唤醒(清除CAN->MCR的SLEEP位)CAN_InitStructure.CAN_NART=DISABLE; //允许报文自动传送 ENABLE:禁止CAN_InitStructure.CAN_RFLM=DISABLE; //报文不锁定,新的覆盖旧的 CAN_InitStructure.CAN_TXFP=ENABLE; //优先级由报文标识符决定 ENABLE:优先级由发送的请求顺序来决定 CAN_InitStructure.CAN_Mode= mode; //模式设置: mode:0,普通模式;1,回环模式; //设置波特率 CAN_InitStructure.CAN_SJW=tsjw; //重新同步跳跃宽度(Tsjw)为tsjw+1个时间单位 CAN_SJW_1tq CAN_SJW_2tq CAN_SJW_3tq CAN_SJW_4tqCAN_InitStructure.CAN_BS1=tbs1; //Tbs1=tbs1+1个时间单位CAN_BS1_1tq ~CAN_BS1_16tqCAN_InitStructure.CAN_BS2=tbs2; //Tbs2=tbs2+1个时间单位CAN_BS2_1tq ~ CAN_BS2_8tqCAN_InitStructure.CAN_Prescaler=brp; //分频系数(Fdiv)为brp+1 CAN_Init(CAN1, &CAN_InitStructure); //初始化CAN1 CAN时钟是36M// CAN_FilterInitStructure.CAN_FilterNumber=0; //过滤器0
// CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdMask; //屏蔽位模式
// CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_32bit; //32位宽
// CAN_FilterInitStructure.CAN_FilterIdHigh=0x01 <<5; //32位ID
// CAN_FilterInitStructure.CAN_FilterIdLow=0x0000;
// CAN_FilterInitStructure.CAN_FilterMaskIdHigh=0x1f <<5; //32位MASK
// CAN_FilterInitStructure.CAN_FilterMaskIdLow=0x0000;
// CAN_FilterInitStructure.CAN_FilterFIFOAssignment=CAN_Filter_FIFO0; //过滤器0关联到FIFO0
// CAN_FilterInitStructure.CAN_FilterActivation=ENABLE; //激活过滤器0CAN_FilterInitStructure.CAN_FilterMode = CAN_FilterMode_IdMask; //设定过滤器组为列表模式CAN_FilterInitStructure.CAN_FilterScale = CAN_FilterScale_32bit; //过滤器位宽为16位过滤器一个CAN_FilterInitStructure.CAN_FilterIdHigh = 0; //设定过滤器标识符高位(32为高位段,16位为第一个)CAN_FilterInitStructure.CAN_FilterIdLow = 0x01 << 3 | CAN_ID_EXT; // 扩展帧CAN_FilterInitStructure.CAN_FilterMaskIdHigh= 0; //只管低5位,其他都是0CAN_FilterInitStructure.CAN_FilterMaskIdLow= 0x1f << 3; //CAN_FilterInitStructure.CAN_FilterFIFOAssignment = CAN_Filter_FIFO0;//过滤器FIFO0指向过滤器0CAN_FilterInitStructure.CAN_FilterNumber = 1; //指定待初始化的过滤器,范围1~13CAN_FilterInitStructure.CAN_FilterActivation = ENABLE; //使能过滤器CAN_FilterInit(&CAN_FilterInitStructure); //滤波器初始化 #if CAN_RX0_INT_ENABLE CAN_ITConfig(CAN1,CAN_IT_FMP0,ENABLE); //FIFO0消息挂号中断允许. NVIC_InitStructure.NVIC_IRQChannel = USB_LP_CAN1_RX0_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; // 主优先级为2NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; // 次优先级为0NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStructure);#endifreturn 0;
}
stm32f103rbt6使用can相关推荐
- [开源]STM32F103RBT6最小系统,LEDx2,KEYx4
STM32F103RBT6最小系统,调试通过,可以SWD模式下载程序,支持串口,一键下载. stm32f103rbt6最小系统链接:http://pan.baidu.com/s/1qYCHeHY 密码 ...
- STM32F103RBT6 mcu芯片
主流性能系列,ARM Cortex-M3 MCU,带128千字节闪存.72 MHz CPU.电机控制.USB和CAN STM32F103xx中密度性能系列集成了工作频率为72 MHz的高性能ARM C ...
- STM32F103RBT6 串口1正常接收,发送过程也很正常,但TXD引脚没有波形
STM32F103RBT6 串口1正常接收,发送过程也很正常,但TXD引脚没有波形,这个程序前几天还是正常工作,百思不得其解.后来找来开发板串口通讯例程对比发现GPIO初始化缺少一句,GPIO_Ini ...
- STM32F103RBT6 定时器 Timer2 源程序
STM32F103RBT6定时器Timer2的使用. 复制代码 这里说下定时器定时时间: (1)STM32时钟为:72MHz,则每次振荡时间为:T=1/f=1/72MHz,振荡72M个周期才为:1S ...
- stm32f103rbt6开发板学习
一 介绍 ARM: A R M STM32 CORTEX-A53 M: 应用于嵌入式工控领域,以单片机的价格实现32bit的性能 A:应用在高大上的领域, 性能强悍.音视频的处理,AI ...
- STM32F103RBT6型号说明及特征;
STM32F103RBT6型号说明: STM32系列专为要求高性能.低成本.低功耗的嵌入式应用设计的ARMCortex?-M0,M0+,M3,M4和M7内核,主流产品(STM32F0.STM32F1. ...
- STM32CubeMX开发stm32f103rbt6 CAN例程(二)
1.STM32CubeMX配置 2.生成代码查看 3.编写代码 程序下载:http://download.csdn.net/download/white_loong/10137468 4.使用CAN分 ...
- 蓝桥杯旧嵌入式板STM32F103RBT6驱动练习笔记
LED 注意GPIO口的初始化 C口对应8--15Pin 锁存器:GPIOD_Pin_2 初始化函数后应使用LED_Control(0xff,0)配置led LCD和LED冲突解决方案 void LC ...
- STM32F103RBT6+TFT彩屏资料下载|程序
前两星期刚学了1.44寸TFT彩屏,总结一下,不好勿喷,欢迎交流. 先附上效果图 中文测试 ...
最新文章
- Android 逐帧动画(Frame)
- jquery.form 和MVC4做无刷新上传DEMO
- 回老家还是继续北上广?
- html5新增的js,HTML5新增属性data-*和js/jquery之间的交互及注意事项
- ios13全选手势_iOS13系统5个简单实用的技巧 快速选择/三指操作/批量删除短信/文字转表情...
- ActiveMQ学习-Network connectors(1)
- docker部署ubuntu并连接ssh远程调试代码
- js ul 清缓存_JavaScript使用ul中li标签实现删除效果
- 无法访问hadoop yarn8088端口的解决方法
- 1、登录模块测试用例
- Idea Debug 时 JAVA对象转Json字符串 的操作
- python掷骰子实验_Python基础(十二) 模拟掷骰子demo
- 给高特键轴开盖的操作技巧
- 高考计算机会考等级划分标准,高中学业水平考试等级是怎么划分的
- mysql在触发器中调用存储过程_mysql 触发器中调用存储过程
- HDU 5055	Bob and math problem(构造)
- 还在用网易云音乐客户端?out了~
- ES6 (十三)Set 和 Map 数据结构、WeakSet 和 WeakMap、WeakRef、FinalizationRegistry
- MPU6050开发 -- 数据分析
- RPT-4-D-2T高清录播一体机