打印
[APM32E1]

基于STM32 HAL库在APM32E103实现CAN和USB共用

[复制链接]
284|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
糊糊糊锅|  楼主 | 2024-12-25 11:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 糊糊糊锅 于 2024-12-25 16:29 编辑

#申请原创#@21小跑堂
一、背景
STM32F103系列芯片由于USB和CAN中断源和FIFO是共用的,所以导致USB和CAN无法同时使用,这也是STM32F103系列芯片一直以来的弊病,要使用的话要么只能实现分时复用,要么是使用105/107系列芯片,造成使用成本增加。查看APM32E103的用户手册,发现极海已经在ST的基础上升级解决了USB和CAN共用的问题,以下便基于STM32 HAL库的基础上配置共同使用USB和CAN。

二、硬件准备
1块APM32E103VCT6 demo板
PD1-->CAN_TX
PD0-->CAN_RX
PA11-->USB_DM
PA12-->USB_DP
三、实验目的
通过cubemx配置以上USB和CAN引脚,将USB配置为CDC虚拟串口,USB和CAN 1s周期输出数据,测试USB和CAN能否同时使用,输出数据是否符合预期。
四、理论解析
通过以上USBD与CAN同时使用的说明,仅需将CAN切换为CAN2或者USBD切换为USBD2模式即可,我们这里选择将USBD切换为USBD2的方式,那具体如何实现呢?
APM32E103在STM32F103的基础上增加USBD切换寄存器,只需把该寄存器位设置为1就可以切换为USBD2.

接下来便是明确代码修改需要做的以下几项工作:
·设置USBD切换寄存器位切换为USBD2模式
·增加USBD2中断向量表映射、中断向量号
·使能USBD2中断
·USBD2中断服务函数实现
五、代码实战(已上传附件)
①设置USBD切换寄存器位切换为USBD2模式

②增加USBD2中断向量表映射、中断向量号


③使能USBD2中断

④USBD2中断服务函数实现

六、实验效果
烧录程序后,查看USB CDC虚拟串口打印“hello”日志,CAN也能通过0x1314 ID输出“01 02 03 04 05 06 07 08”报文,实验结果符合预期。


103vet6_usb_can_share_test.rar

8.2 MB

使用特权

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

本版积分规则

9

主题

17

帖子

1

粉丝