打印
[国产单片机]

双CAN例子-标准外设库

[复制链接]
14|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Dick Hou|  楼主 | 2025-2-13 17:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
今天有客户反应,我们没有提供双CAN的标准外设库例子,我以为大家都在用HAL库了
于是,拿了ST的CAN例子,稍微花了点时间,把它移值到了我们的FCM32F092上面,增加了第二个CAN的收发。
移值很简单,就以下步骤:

本例子演示了如何在stm32f091上增加第二个CAN,即移值到fcm32f092xx。

本例子移值自STM32F0xx_StdPeriph_Examples/CAN/CAN_Networking

1 拷贝工程STM32F0xx_StdPeriph_Templates,并在Keil中将工程目标(Project Targets)从STM32F091重命名为FCM32F092。
(此修改无实际用处,只是为了和STM32F091进行区分)

2 工程设定中将RAM大小修改为0x6000(24KB)

3 将STM32F0xx_StdPeriph_Examples/CAN/CAN_Networking目录下的h和c拷贝过来并覆盖原来的

4 添加Utilities\STM32_EVAL\STM32072B_EVAL\stm32072b_eval.c

5 工程选项中,添加包含路径:
..\..\..\Libraries\CMSIS\Include
..\..\..\Utilities\STM32_EVAL\STM32072B_EVAL
..\..\..\Utilities\STM32_EVAL\Common

6 编译工程,保证无错误。
*** 以上修改,为建立CAN_Networking工程的必要操作,并未涉及移植到FCM32F092相关内容 ***

7 修改can相关驱动及定义,增加CAN2
(某些文件为只读,请去掉只读属性)
7.1 stm32f0xx_can.h
#define IS_CAN_ALL_PERIPH(PERIPH) (((PERIPH) == CAN) || ((PERIPH) == CAN2))
7.2 stm32f0xx_can.c
void CAN_DeInit(CAN_TypeDef* CANx)
{
// 增加CANx的判断,以及对应CAN2的去初始化
}
7.3 stm32f0xx_rcc.c
增加CAN2相关的位定义,可搜索CAN2。相关内容从fcm32f096xc.h拷贝。

7.4 stm32f0xx.h
增加CAN2相关的定义,可搜索CAN2。
增加filter相关位的定义,原单个CAN为14个,增加到28个。

8 main.c
增加CAN2初始化:时钟、GPIO、过滤器、中断相关
增加CAN2发送

9 stm32f0xx_it.c
CAN中断函数中,增加对CAN中断标志的判断,再进行相关CAN的处理。即:如果是CAN1的中断标志,则操作对象为CAN1;如果是CAN2的中断标志,则操作对象为CAN2。
本例中,只开启了一个中断位,因此只判断了一个标志位。



工程为Projects\FCM32F0xx_StdPeriph_2x_bxCAN,CAN1 & CAN2都可收发。可根据需要修改CAN引脚。
STM32F0xx_StdPeriph_Lib_V1.6.0_bxCANx2.zip (2.76 MB)
FCM32F092xBxC-C_datasheet_CH_0.11.pdf (3.36 MB)

使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

18

主题

230

帖子

4

粉丝