本帖最后由 Fanexs168 于 2022-11-7 16:53 编辑
#申请原创# #技术资源# 产品介绍
APM32F103xC系列(如F103RC/VC)、以及APM32E103xE(E103RE/VE/ZE)系列产品,相较于市面常见的F103系列产品,新增了CAN2资源。对于一些汽车前装、后装的应用来说,可以用来移植替换原有方案上的Sxx32F105(如果只是用到了双CAN资源,并不需要F105的USB OTG功能)。
测试条件
1、基于Keil MDK 5.29 + Segger Jlink(ST-Link也可以)
2、调试终端客户提供的测试代码(基于STM32F105标准库,移植PM32后CAN2异常)
移植流程:
1、修改工程宏定义(从STM32F10X_CL改成STM32F10X_HD)。
因极海F103、E103系列也是只是对标竞品的F103系列资源,只是在103的基础上增设了CAN2的外设功能。
2、使用startup_stm32f10x_hd.s启动文件(作下述对应修改)、并在stm32f10x.h中做相应CAN2中断向量号的修改。(具体差异,可参考《APM32F103xC_CAN2使用说明》)
3、CAN_FilterInit()、CAN_ConfigFilter()函数优化——
原STM32F105的CAN1&CAN2 内部有0~27 总共28个filter使用,但极海103系列的双CAN“只有0~13” 14个filter。(注意:可以理解为极海的CAN1/CAN2各有其专属14个filter)
重点:原ST标准库中,CAN_FilterInit()“只做了CAN1的filter配置”(为什么ST平台可以这样?为什么这里打了双引号?后续**会专门说明),在APM32平台上配置,需要单独对CAN1和CAN2要用到的filter做配置。所以,需要把标准库里的CAN_FilterInit()函数进行封装修改,进行传参CANx指定需要配置的是CAN1,还是CAN2。(当然,你们也可以按照自己喜好的方式进行代码修改~)
头文件中的函数声明也要对应修改~
二次调用、封装CAN_FilterInit()的函数接口,也要做对应修改。
4、注意,对应的接收中断处理函数,也需要跟启动文件.s中的对应。否则会导致中断响应出错、CAN2接收中断无法进入等异常。
结语
修改前后的测试代码,以及文中提及的参考文档,都放到下述附件中,以供各位参考。
大伙也可以在极海官网www.geehy.com下载官方的SDK,参考极海官方对CAN2的配置。
|