0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

STM32F429的USB工程CAN通讯不正常经验分享

汽车玩家 来源:嵌入式大杂烩 作者:嵌入式大杂烩 2020-04-04 17:32 次阅读

最近某项目需要用到USBCAN

STM32F429的USB工程CAN通讯不正常经验分享

拿到这样的需求,我们当然是先得保证通讯正常。于是我找了一个USB例程与一个CAN例程,分别调试验证。

经过几番折腾已经保证了USB与上位机能正常通讯了,也能保证了CAN的正常收发(拿了两块开发板做验证)。

两头都没有问题了,再加上一些数据处理就差不多完成了。USB与CAN我都是第一次用,没想到那么顺利,美滋滋,正准备放松的时候,问题就来了。这是一个整体的东西,最终都要把这两部分集合起来吧。

我把CAN工程里关于CAN的部分移到USB工程里,这时候CAN竟然用不了了。这时候我就开始在怀疑自己是不是手贱误删了哪里了,于是重新来一遍,发现还是不行。

查了代码很久也没找出什么错误了,于是决定先不找错误了,进度要紧,这时候觉得应该是工程哪里有问题了,先想其它办法避过这个问题。

于是乎我就换着来,我把USB的工程里关于USB的部分移到CAN工程里。大家猜一猜发生了什么?USB竟然打都打不开!要炸了。。但是这时候已经很明确肯定不是移植问题了。CAN部分首先想到了波特率是不是对不上了,USB部分首先想到USB的时钟是从哪来的,之前没用过也没仔细看。带着这两个问题去查看了参考手册与代码,果然,STM32F429的USB的时钟还真有点特殊(不知道其它芯片是不是也是这样),其来自于PLL输出,而不是我们熟知的APB1、APB2:

STM32F429的USB工程CAN通讯不正常经验分享

从时钟树中我们可以看出:(1)的输出是系统时钟,(2)的输出是USB时钟。相关公式:

STM32F429的USB工程CAN通讯不正常经验分享

当然(2)的输出不仅仅是给USB提供时钟,还给RNG与SDIO提供时钟:

STM32F429的USB工程CAN通讯不正常经验分享

这一部分对应的代码在system_stm32f4xx.c中。下面看看USB工程、CAN工程中该文件的差别:

STM32F429的USB工程CAN通讯不正常经验分享

STM32F429的USB工程CAN通讯不正常经验分享

可见,问题找出来了。在USB工程中,CAN通讯不正常是因为系统时钟降为168MHz,导致APB1时钟变为42MHz,而代码中是用APB1=45MHz来计算CAN的波特率的,所以导致波特率对应不上导致CAN通讯错误。

在CAN工程中,系统时钟为180MHz,USB OTG FS时钟变为51MHz,超过了正常的48MHz,导致USB不能正常工作。

所以,每当用到USB,都得单独配置PLLCLK = 168MHz了,这样的话其他外设可能得改变原有的配置,比如这里的CAN就得用APB1=42MHz来计算波特率了,否则就会出错。这很不方便。。

正如野火火哥说的,这是ST的一个奇葩设计。

STM32F429的USB工程CAN通讯不正常经验分享

所以,大家以后再使用USB的时候当心这个陷阱!

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • usb
    usb
    +关注

    关注

    59

    文章

    7432

    浏览量

    258109
  • CAN
    CAN
    +关注

    关注

    56

    文章

    2467

    浏览量

    459226
  • STM32
    +关注

    关注

    2239

    文章

    10671

    浏览量

    348735
收藏 人收藏

    评论

    相关推荐

    请问STM32F429硬件IIC需要外围上拉电阻吗?

    如题,STM32F429使用IIC通信的时候,是否需要外加上拉电阻? 看过很多资料,都说是需要上拉电阻,让人郁闷的是,这次设计硬件的时候,偏偏忘记了加,于是乎我进行了测试, //使能IO引脚
    发表于 04-24 06:35

    STM32F429做的PIL仿真速度非常慢的原因?

    各位大神好, 本人用MATLAB/SIMULINK搭建了小型直流电力系统。系统包含三个直流转换器。相关三个控制器被载入STM32F429中,从而与SIMULINK构成PIL仿真。仿真运行一切正常
    发表于 04-11 07:28

    stm32f429 can1通讯使用hal发送数据不稳定怎么解决?

    stm32f429 can1通讯,使用hal库配置工程,发送数据不稳定,发送几十个包才有一俩正常发送,但是使用标准库就可以
    发表于 04-02 06:04

    STM32F103C8T6 CAN发送数据波形不正常的原因?

    大家好,STM32F103C8T6关于CAN发送数据波形不正常的问题。
    发表于 03-27 08:27

    STM32F429工程标准库移植到HAL库后中断向量表异常的原因?

    STM32F429工程标准库移植到HAL库后中断向量表异常
    发表于 03-20 06:02

    STM32F373使用flat类型不正常,为什么?

    STM32F373使用flat类型不正常
    发表于 03-18 07:20

    stm32f429 fatfs分了4个区,usb_hs挂载后4个都显示出来了,如何用代码控制显示其中的几个?

    如题 板子是stm32f429。开发环境stm32cubemx+keil,用的HAL库,裸机no_os fatfs分了4个区,读写正常usb_hs挂载后4个都显示出来了,读写也
    发表于 03-08 07:24

    请问stm32f429如何改内部rc时钟工作?

    stm32f429标准库如何改内部rc时钟工作?
    发表于 01-17 06:25

    请问STM32F429或者STM32F407带的MAC地址是固定唯一的吗?

    请问STM32F429或者STM32F407带的MAC地址是固定唯一的吗?如果不是唯一的,是不是需要自己写入? 自己写入,怎么确保这个MAC地址是唯一的?
    发表于 11-10 06:08

    如何将lvgl粗略的移植到stm32f429上?

    上周将lvgl粗略的移植到stm32f429上,界面刷新问题没有好好处理,看着非常非常卡顿,今天初步处理了这个问题,效果还算可以了,后边应该是可以更进一步优化。
    的头像 发表于 10-23 16:40 1204次阅读
    如何将lvgl粗略的移植到<b class='flag-5'>stm32f429</b>上?

    stm32f429怎么获取usb uvc摄像头数据?

    免驱摄像头驱动怎么接入stm32f429获取图像数据
    发表于 09-26 07:37

    stm32f429播放mjpg视频用什么库?

    stm32f429播放mjpg视频用什么库
    发表于 09-21 08:05

    stm32f429怎么移植linux系统?

    stm32f429怎么移植linux系统,不用a系列芯片
    发表于 09-21 06:25

    stm32f429可以用dma驱动spiflash吗?

    stm32f429可以用dma驱动spiflash吗,要怎么配置
    发表于 09-21 06:10

    自举电路不正常工作

    自举电路不正常工作  自举电路是一种常见的电路,其主要作用是用于启动电子设备,例如计算机、无线电、通信设备等。但是,有时候我们可能会遇到自举电路不正常工作的问题,这给我们带来了很多麻烦和困扰。 自举
    的头像 发表于 09-17 09:44 561次阅读