你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32H743 以太网问题 DP83848

[复制链接]
switcc 提问时间:2018-2-27 14:08 /
小弟公司正在开发基于H743的应用,以前用的都是F4系列,网络一直没有问题。新上的H743 cube库只有Lan8742的例子。
而且H7的和F4,F7相比,有较大变动。难道需要自己写DP83848的驱动吗?
收藏 评论16 发布时间:2018-2-27 14:08

举报

16个回答
nyszx 回答时间:2018-3-1 21:00:47
Switcc 发表于 2018-3-1 09:36
能指导一下吗,是把以前F4使用的库移植过来还是使用H7的库,在H7的库上修改成对应的网卡 ...

使用相同的库的话,上层应用应该变化也不大吧,比如STM32F746ZG-Nucleo lwip例程,只需要修改stm32f7xx_hal_conf.h中一下跟PHY相关就可以了:
  1. /* Section 2: PHY configuration section */
  2. /* LAN8742A PHY Address*/ 改为DP83848实际地址
  3. #define LAN8742A_PHY_ADDRESS            0x00U
  4. /* PHY Reset delay these values are based on a 1 ms Systick interrupt*/
  5. #define PHY_RESET_DELAY                 ((uint32_t)0x00000FFFU)
  6. /* PHY Configuration delay */
  7. #define PHY_CONFIG_DELAY                ((uint32_t)0x00000FFFU)

  8. #define PHY_READ_TO                     ((uint32_t)0x0000FFFFU)
  9. #define PHY_WRITE_TO                    ((uint32_t)0x0000FFFFU)

  10. /* Section 3: Common PHY Registers */这些标准寄存器是通用的,核对数据手册检查对应的功能和地址是否有变化,应该没啥差别,有的话修改就好

  11. #define PHY_BCR                         ((uint16_t)0x00U)    /*!< Transceiver Basic Control Register   */
  12. #define PHY_BSR                         ((uint16_t)0x01U)    /*!< Transceiver Basic Status Register    */

  13. #define PHY_RESET                       ((uint16_t)0x8000U)  /*!< PHY Reset */
  14. #define PHY_LOOPBACK                    ((uint16_t)0x4000U)  /*!< Select loop-back mode */
  15. #define PHY_FULLDUPLEX_100M             ((uint16_t)0x2100U)  /*!< Set the full-duplex mode at 100 Mb/s */
  16. #define PHY_HALFDUPLEX_100M             ((uint16_t)0x2000U)  /*!< Set the half-duplex mode at 100 Mb/s */
  17. #define PHY_FULLDUPLEX_10M              ((uint16_t)0x0100U)  /*!< Set the full-duplex mode at 10 Mb/s  */
  18. #define PHY_HALFDUPLEX_10M              ((uint16_t)0x0000U)  /*!< Set the half-duplex mode at 10 Mb/s  */
  19. #define PHY_AUTONEGOTIATION             ((uint16_t)0x1000U)  /*!< Enable auto-negotiation function     */
  20. #define PHY_RESTART_AUTONEGOTIATION     ((uint16_t)0x0200U)  /*!< Restart auto-negotiation function    */
  21. #define PHY_POWERDOWN                   ((uint16_t)0x0800U)  /*!< Select the power down mode           */
  22. #define PHY_ISOLATE                     ((uint16_t)0x0400U)  /*!< Isolate PHY from MII                 */

  23. #define PHY_AUTONEGO_COMPLETE           ((uint16_t)0x0020U)  /*!< Auto-Negotiation process completed   */
  24. #define PHY_LINKED_STATUS               ((uint16_t)0x0004U)  /*!< Valid link established               */
  25. #define PHY_JABBER_DETECTION            ((uint16_t)0x0002U)  /*!< Jabber condition detected            */
  26.   
  27. /* Section 4: Extended PHY Registers */

  28. #define PHY_SR                          ((uint16_t)0x1FU)    /*!< PHY special control/ status register Offset     */

  29. #define PHY_SPEED_STATUS                ((uint16_t)0x0004U)  /*!< PHY Speed mask                                  */
  30. #define PHY_DUPLEX_STATUS               ((uint16_t)0x0010U)  /*!< PHY Duplex mask                                 */


  31. #define PHY_ISFR                        ((uint16_t)0x1DU)    /*!< PHY Interrupt Source Flag register Offset       */
  32. #define PHY_ISFR_INT4                   ((uint16_t)0x0010U)  /*!< PHY Link down inturrupt                         */  
复制代码

再检查一下ethernetif.c中底层初始化相关的,如果有外部中断的话,再检查中断配置是否一致。
aiherong 回答时间:2020-3-28 05:59:25
硬件描述层是欲速而不达的妥协产物,犹如将互不相识的男女按柴米油盐搓合婚姻,最终诸位将发现省下看数据手册的时间够不上游走在各种库的移植中所浪费的时间,还有将来查问题原因和升级,库函数绝不是所想像那么简单!而万变不离其宗的寄存器却全摆在桌面上,执行速度又快!但愿伯乐们能意识到这一点,以"快捷工具"换不来高效,反而使孩子们陷入看似速成的各式神器而不能自拔HAL是PC操作系统为系统稳定以防大众用户误操作和恶意病毒而封装的。单片机则不同,用之非专业不可,更无恶意之说!尽管STM32高级复杂,但你能省得掉吗?
switcc 回答时间:2018-3-1 09:36:38
nyszx 发表于 2018-2-27 21:10
你现在只是换了PHY,不管是DP83848,还是Lan8742,他们都是有标准的通的MII/RMII接口,以及标准的基础参数寄 ...

能指导一下吗,是把以前F4使用的库移植过来还是使用H7的库,在H7的库上修改成对应的网卡
wudianjun2001 回答时间:2018-2-27 15:22:46
把以前的驱动移植过来

评分

参与人数 1蝴蝶豆 +1 收起 理由
zero99 + 1

查看全部评分

switcc 回答时间:2018-2-27 16:58:42
wudianjun2001 发表于 2018-2-27 15:22
把以前的驱动移植过来

你的意思是把F7网络库移过来吗,二者网络库有很大差别
nyszx 回答时间:2018-2-27 21:10:06
你现在只是换了PHY,不管是DP83848,还是Lan8742,他们都是有标准的通的MII/RMII接口,以及标准的基础参数寄存器,虽然换了内核,变化较大,但外设还是基本相同的,配置与使用差别不多,所以驱动移植一下应该不困难。

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

switcc 回答时间:2018-3-8 19:01:11
nyszx 发表于 2018-3-1 21:00
使用相同的库的话,上层应用应该变化也不大吧,比如STM32F746ZG-Nucleo lwip例程,只需要修改stm32f7xx_h ...

直接在H7 的例程上改的,网卡寄存器都能读,但是网络还没通
shenxiaolin_mai 回答时间:2018-8-17 17:36:17
你可以按照原来的DP83848的程序模式来写,变得只是STM32这段的寄存器操作以及库函数操作之间存在的差异,驱动着一块的东西都是套路,按照套路来就可以了

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

hpdell 回答时间:2018-10-3 15:49:28
Switcc 发表于 2018-3-8 19:01
直接在H7 的例程上改的,网卡寄存器都能读,但是网络还没通

字节对齐 或者 mpu 配置,貌似关键是 mpu 配置

正常来说,不管是 f4, f7 的dp83848,随便哪个都是可以移植到 h7上的,如果是库就更方面了
qianshishangdi 回答时间:2018-11-14 15:19:25
大佬,能分享一下代码吗,快被这个搞晕死了,我在原子的例程上搞的移植,还是不行
mmuuss586 回答时间:2018-12-5 15:29:55
自己移植啊
lxl8511 回答时间:2019-1-10 16:30:54
谢谢分享谢谢分享谢谢分享谢谢分享谢谢分享谢谢分享
无名氏666 回答时间:2019-1-21 10:20:00
楼主解决了吗
zhdx 回答时间:2019-2-15 13:49:28
啊? 上一年的帖子

现在KEIL上直接有 DP83848C 的PHY , CMSIS Driver

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2

查看全部评分

sasikawyh 回答时间:2019-4-10 11:31:31
寄存器配置,小地方容易出问题
12下一页
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版