完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
中断处理函数 在STM32CubeMX使能FDCAN1中断0,生成keil工程。 在工程里的stm32h7xx_it.c会出现这样一个函数,这个函数其实是FDCAN1的所有类型中断都会进入的,然后在HAL_FDCAN_IRQHandler(&hfdcan)这个函数进行判断,从而进入对应的回调函数。 我们进入这个函数,看看它是怎么实现的。这个函数位于stm32h7xx_hal_fdcan.c文件,也就是FDCAN的HAL驱动库文件。由于此次使用的是出现新消息出现中断,我们重点关注这一部分。这个函数非常大,包含很多内容,英语注释为官方注释,中文注释为自己添加的注释。 这一部分对应的就是Rx FIFO 0 interrupts management,也就是RX FIFO 0的重点管理。接收数据有3个区域,RX 缓冲区、RX FIFO0和RXFIFO1,这个是可以选择的。具体有何区别这里不作介绍。 我们可以看到从主函数进来之后,第一步先失能FIFO 0所有中断,这句隐藏在背后的话把我折磨了好久,因为之前发现读取中断进一次去失效了,现在才明白它处理的时候把所有中断都关了,怪不得失效了。所以每次处理完都要重新开一次中断。第二步,清除标志位。第三步就是调用回调函数,具体回调函数是什么也可以百度一下。这里我们只要明白,中断最后都会进入到这个回调函数,需要中断后实现什么功能,把代码写进回调函数就可以了。 我自己在main.c文件定义了回调函数,这个是没有的,需要自己编程。中断处理先讲到这里,先看看中断的初始化。 中断配置函数 因为之前我们在CubeMX设置的就是FDCAN1的中断0,所以这里前两句设置优先级和使能中断都是自动生成的。 配置过滤器 图片中注释已经很清楚了,滤波器模式主要是掩码模式,ID1是想要收到的ID,ID2是掩码,0X7FF代表需要全部满足。 在前面中断初始化函数已经开启了中断,这里又激活了一次中断,两次有什么区别呢?笔者认为前者开了中断0,但是中断0内还是存在很多中断,所以需要再次开子中断。在stm32h7xx_hal_fdcan.h文件,我们可以看到以下内容。上面部分是FIFO 0中断类型,下面部分是FIFO 1中断类型。两者类型是一致的,包括信息丢失中断、满溢中断、水印中断、写入新消息中断。 其他三个中断都好了解,那水印中断是什么意思。水印中断可以理解为,当FIFO内消息到达x条时,触发中断。那怎么去设置这个具体的x,在配置函数里两行被注释掉的代码,用的是HAL_FDCAN_ConfigFifoWatermark函数。如果设置为2层,意味着收到两条消息就发起中断。 这次实例使用的主要是写入新消息中断,所以前面激活的是FDCAN_IT_RX_FIFO0_NEW_MESSAGE。 主函数实现 当收到新消息,进入回调函数,首先判断是哪种类型中断,前面讲过有4钟类型中断。假如是新消息中断,标志位置1。然后主函数的部分就会运行,利用HAL库自带GetRxMessage从FIFO0取出数据。然后重置标志位,重新激活中断。 演示 用ZCANPRO软件+USB-CAN转换器可以实现PC发送消息给MCU,发送标准帧,ID为111。MCU会把收到的信息通过串口打印出来。 实验成功! |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1618 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1545 浏览 1 评论
979 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
683 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1597 浏览 2 评论
1864浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
645浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
516浏览 3评论
532浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
505浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 18:30 , Processed in 0.706371 second(s), Total 78, Slave 62 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号