对STM32的CAN1模块的总结

发布者:MysticGlow最新更新时间:2018-09-20 来源: eefocus关键字:STM32  CAN1模块 手机看文章 扫描二维码
随时随地手机看文章

从12月中旬到现在一直都在调试板子,把F107上的CAN1(PD0,PD1)转移到F105上的CAN1(PB8,

PB9),本来以为会是很简单的进行重映射就行了,但是生活处处是

充满“惊喜”啊!

在进行了重映射后发现CAN进不了中断,很郁闷!仔细检查了两个端点CAN的连接口后发现是没错的,但还是进

不了中断。那只能进行单步调试了,最后发现是在CAN的初始化模式成功后要进入正常模式时失败了,CAN的处理工

程是:

初始化模式:设置CAN_MCR 寄存器的INRQ 位为’1’ ,请求bxCAN进入初始化模式,然后等待硬件对CAN_MSR

 寄存器的INAK 位置’1’ 来进行确认。当bxCAN处于初始化模式时,禁止报文的接收和发送,并且CANTX引脚输出隐

性位(高电平)。 初始化模式的进入,不会改变配置寄存器。

正常模式:在初始化完成后,软件应该让硬件进入正常模式,以便正常接收和发送报文。软件可以通

过对CAN_MCR 寄存器的INRQ 位清’0’ ,来请求从初始化模式进入正常模式,然后要等待硬件对CAN_MSR 寄存器的

INAK 位置’0’ 的确认。在跟CAN总线取得同步,即在CANRX引脚上监测到11个连续的隐性位(等效于总线空闲)后,

bxCAN才能正常接收和发送报文。

但就是在我的程序里,在INRQ清“0”了以后就在等待INAK的清零,直到超过定时退出返回CANINITFAILED,而

没有返回CANINITOK,所以也就是说我的CAN1模块初始化成功后根本就没有进入正常模式,又怎么会进入中断呢!

但是我在程序里分明按着例程来进行修改的,也进行了重映射了,检查多次后我把错误定位在硬件的接收电路,因为

在上面的模式解释处说到了关于CAN的Tx和Rx应该出现的高低电平,但是我用万用表测量我的Tx端是却是出现了低

电平,所以我又对CAN的收发设计电路进行了一番仔细的研究,电路应该是没错的。他妈究竟是哪错啊,要弄死人

啊!

在不经意间我把一个例程跑了,这个例程用到了两个CAN,我的硬件里有两路CAN的使用,而且硬件也是一模一

样的,但是我的CAN2电路还没有进行硬件的焊接,居然我的CAN2成功的进入了正常模式,因此我更肯定了是硬件的

问题,因为程序是一样的。但再次的硬件分析完了之后还是感觉硬件是没错的,那就只有先把焊了的电路先断了一

下,再进行调试,结果还是不行,看来还真不是错在硬件啊!

没办法了,只能是拿着万用表来查究竟是在哪一句在执行的时候把Tx脚的电平给拉低了,好不容易定位在

GPIO_INIT()程序里发现了电平变低的语句,但是在对比了CAN_BSRR和CAN_ODR两个寄存器后发现程序是对

的,搞毛啊!

最后突然想到在网上输入STM32、CAN、PB9进行查询,在百度文库的一篇文章里看到了人家对这个端口的重

映射的程序,偶然发现到了自己一个地方弄错了,一个很细小的地方,经修改,总算是解决了我的问题,怎么说吧,

希望后人不要犯我这种低级错误。

在这半个多月,我基本逛遍了所有的电子论坛,但是就没有人能帮忙解决,说没有也有一个帖子说了跟我同样的

问题,我也找到了他本人的QQ,想向他请教,有时候人是一直奇怪的动物,很欠抽的。我连续几天向他发消息,说

我的问题(这几天他一直没上线)语气很客气,一个字的回答没有,难得今天看见他上线了,再次发了我问题,还是

没有回答,我就火了,问候了一下他全家,果然来效果了,马上把我拉黑了!大家说这是安的什么心啊,不懂或者是

忘了的,是个正常人都会回一下,不要给人希望,浪费人家时间,欠抽的!

所以在此也希望大家有看到这的,希望大家以后在逛论坛的时候要是碰到有人提问,自己也懂的尽量的帮助一下

别人,你自己也可以有几分嘛!


以下一个链接是一个我的帖子,里面有我的程序和解决方法:

http://bbs.21ic.com/forum.php?mod=viewthread&tid=407287&page=1&extra=#pid2638733


关键字:STM32  CAN1模块 引用地址:对STM32的CAN1模块的总结

上一篇:STM32 USB IAP 步骤
下一篇:STM32 PWM 占空比可变函数

推荐阅读最新更新时间:2024-03-16 16:14

Flash download failed-Cortex-M3的原因及解决办法
首先,此类错误基本是被STM32芯片遇到,并且基本都是使用JLINK仿真器,其实我们以下的方法不一定可以帮你解决问题,问题真正的原因我们也没有在这个帖子公开、如果需要解决,请联系armjishu的JLINK仿真器工程师,他会帮助你解决的;生产的JLINK可以解决这个问题。 MDK中出现 Error: Flash download failed- Cortex-M3 的原因及解决办法: 1.Jtag模式下,主要是芯片大小选错 出现这处问题通常是MDK中的Flash的编程算法没有配置或没有配置正确, 神舟系列用的是STM32芯片。 在主菜单中打开Flash- Configure Falsh Tools配置窗口,切换到 U
[单片机]
Flash download failed-Cortex-M3的原因及解决办法
ARM学习《六》——从头文件开始自己动手设置STM32串口通讯
运用STM32的库函数时,有时候为了看懂一句语句需要翻遍整个头文件,找到头文件中预定义的名字到底代表的是什么意思,具体寄存器设置的数值是多少,相当麻烦。我花了一天的时间才明白串口设置的具体过程,只是库函数想的比较周全。下面是我调试好的串口设置程序,头文件是我自己定义的,舍去了库文件中繁琐的结构体定义 首先定义头文件: / RCC_CFGR &= (uint32_t)0xF8FF0000; RCC_CR &= (uint32_t)0xFEF6FFFF; // RCC_CR &= (uint32_t)0xFFFBFFFF; // RCC_CFGR &= (uint32_t)0
[单片机]
stm32 DAC+DMA 输出100K正弦波杠杠的!!!
之前想用stm32的DAC输出正弦波,才用的方案是在死循环里面用for循环输出36点的电压值模拟成一个完整的正弦波。发现最多只能输出个20KHz的波形,在示波器下面能够看到明显的梯度。后来用DMA+ADC的模式发现可以上100K(不过频率有点飘),下面吧代码贴出来 void DAC_DMA_Configuration(void) { DAC_InitTypeDef DAC_InitStructure; DMA_InitTypeDef DMA_InitStructure; TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; GPIO_InitTypeDef GPIO
[单片机]
STM32为什么要有SysTick
STM32为什么要有SysTick?STM32里面有很多tim定时器,为什么还要有SysTick呢? 系统时基定时器 这个定时器是专用于实时操作系统,也可当成一个标准的递减计数器。它具有下述特性: ● 24位的递减计数器 ● 自动重加载功能 ● 当计数器为0时能产生一个可屏蔽系统中断 ● 可编程时钟源 这个里面的定时器是24位的,普廷的TIM定时器最多也就是16位的,如果想做长时间的延时,这个是不二的选择
[单片机]
STM32GPIO外部中断的详细解析和总结
1 STM32中断分组 STM32 的每一个GPIO都能配置成一个外部中断触发源,这点也是 STM32 的强大之处。STM32 通过根据引脚的序号不同将众多中断触发源分成不同的组,比如:PA0,PB0,PC0,PD0,PE0,PF0,PG0为第一组,那么依此类推,我们能得出一共有16 组,STM32 规定,每一组中同时只能有一个中断触发源工作,那么,最多工作的也就是16个外部中断。STM32F103 的中断控制器支持 19 个外部中断/事件请求。每个中断设有状态位,每个中断/事件都有独立的触发和屏蔽设置。STM32F103 的19 个外部中断为: 线 0~15:对应外部 IO 口的输入中断。 线 16:连接到 PVD 输出。 线
[单片机]
STM32GPIO外部中断的详细解析和总结
STM32 AI实验课程—HAR在STM32L4上的实现
课程目的:旨在为AI深度学习解决方案提供关于ST生态系统的实践体验 实验步骤: 下载AI演示项目到ST开发板上 借助智能手机/平板电脑上的应用程序,将传感器数据和标签记录在ST开发板上 给定的Python脚本将处理数据集并训练NN模型 在STM32CubeMX.AI工具的帮助下,将神经网络训练好的模型导入到STM32项目中 相关软硬件简介 软硬件需求列表 IoT开发板—B-L475E-IOT01A FP-AI-SENSING1 AI特定功能:训练用的数据集、数据标注、STM32模型转换对应代码 其他功能:使用RTOS实现低功耗、手机应用软件“ST BLE Sensor” 实验1:STM32固件下载和演示测
[单片机]
<font color='red'>STM32</font> AI实验课程—HAR在STM32L4上的实现
STM32实例-LCD1602电路
1602 液晶,从它的名字我们就可以看出它的显示容量,就是可以显示 2 行,每行 16 个字符的液晶,电路图如下所示。 LCD1602它的任务电压是 4.5V~5.5V,关于这点我们设计电路的时分,直接依照 5V 零碎设计,然则包管我们的 5V 零碎最低不克不及低于 4.5V。在 5V 任务电压下丈量它的任务电流是 2mA,人人留意,这个 2mA 仅仅是指液晶,而它的黄绿背光多是用 LED 做的,所以功耗不会太小的,一二十毫安照样有的。1602 液晶一共 16 个引脚,每一个引脚的功用,我们都可以在它的数据手册上取得。而这些根本的信息,在我们设计电路和编写代码之前,必须先看明确,1602 液晶引脚功用如下表所示。 LCD
[单片机]
STM32如何收发float类型数据?
在之前文章里提到了共用体用来传输浮点数的用法,但那篇笔记中没有详细介绍,这篇笔记我们一起来看一看具体实例。 实际应用中,我们可能需要两个设备通过串口传输浮点数据: 本篇笔记为了方便演示,使用串口助手模拟其中一个设备,本篇笔记内容如下: 我们创建一个用于管理float类型数据的共用体: unionfloat_data { floatf_data; uint8_tbyte ; }; 数据的流向如: 本次使用串口助手模拟发送设备,省略了第一步,主要看第②、③步。 创建两个共用体变量,用于发送与接收: unionfloat_datarx_float_data,tx_float_data; 收发相关代码: 左
[单片机]
<font color='red'>STM32</font>如何收发float类型数据?
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved