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

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

3天内不再提示

STM32H743以太网驱动调试过程简析

冬至子 来源:xinyz4104 作者:xinyz4104 2023-08-14 16:44 次阅读

硬件环境:
基于STM32H743IIT6自研单板
(1)外部时钟:25MHz
(2)调试串口: PC12 ———> UART5_TX
PD2 ———> UART5_RX
(3)以太网
PC1 ———> ETH_MDC
PA1 ———> ETH_REF_CLK
PA2 ———> ETH_MDIO
PA7 ———> ETH_CRS_DV
PC4 ———> ETH_RXD0
PC5 ———> ETH_RXD1
PB11 ———> ETH_TX_EN
PB12 ———> ETH_TXD0
PB13 ———> ETH_TXD1

PE15 ------> RESET_PHY

软件开发环境
RT-Thread Studio
版本: 2.2.6
构建ID: 202211231640
OS: Windows 10, v.10.0, x86_64 / win32

创建RT-Thread项目

1.jpg

串口功能

1.jpg

修改时钟参数

时钟树配置如下:

1.jpg

修改drv_clk.c文件中的system_clock_config()函数

void system_clock_config(int target_freq_mhz)
{
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
/** Supply configuration update enable
/
HAL_PWREx_ConfigSupply(PWR_LDO_SUPPLY);
/
* Configure the main internal regulator output voltage
/
__HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
while(!__HAL_PWR_GET_FLAG(PWR_FLAG_VOSRDY)) {}
/
* Initializes the RCC Oscillators according to the specified parameters

  • in the RCC_OscInitTypeDef structure.
    /
    RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
    RCC_OscInitStruct.HSEState = RCC_HSE_ON;
    RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
    RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
    RCC_OscInitStruct.PLL.PLLM = 2;
    RCC_OscInitStruct.PLL.PLLN = 64;
    RCC_OscInitStruct.PLL.PLLP = 2;
    RCC_OscInitStruct.PLL.PLLQ = 2;
    RCC_OscInitStruct.PLL.PLLR = 2;
    RCC_OscInitStruct.PLL.PLLRGE = RCC_PLL1VCIRANGE_3;
    RCC_OscInitStruct.PLL.PLLVCOSEL = RCC_PLL1VCOWIDE;
    RCC_OscInitStruct.PLL.PLLFRACN = 0;
    if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
    {
    Error_Handler();
    }
    /
    * Initializes the CPU, AHB and APB buses clocks
    */
    RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
    |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2
    |RCC_CLOCKTYPE_D3PCLK1|RCC_CLOCKTYPE_D1PCLK1;
    RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
    RCC_ClkInitStruct.SYSCLKDivider = RCC_SYSCLK_DIV1;
    RCC_ClkInitStruct.AHBCLKDivider = RCC_HCLK_DIV2;
    RCC_ClkInitStruct.APB3CLKDivider = RCC_APB3_DIV2;
    RCC_ClkInitStruct.APB1CLKDivider = RCC_APB1_DIV2;
    RCC_ClkInitStruct.APB2CLKDivider = RCC_APB2_DIV2;
    RCC_ClkInitStruct.APB4CLKDivider = RCC_APB4_DIV2;
    if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK)
    {
    Error_Handler();
    }
    }
    修改board.h文件时钟参数

/ -------------------------- CLOCK CONFIG BEGIN -------------------------- /
#define BSP_CLOCK_SOURCE ("HSE")
#define BSP_CLOCK_SOURCE_FREQ_MHZ ((int32_t)0)
#define BSP_CLOCK_SYSTEM_FREQ_MHZ ((int32_t)400)
/ -------------------------- CLOCK CONFIG END -------------------------- /

修改内存参数

1.jpg

修改board.h文件RAM参数

/ -------------------------- ROM/RAM CONFIG BEGIN -------------------------- /
#define ROM_START ((uint32_t)0x08000000)
#define ROM_SIZE (1024 * 1024)
#define ROM_END ((uint32_t)(ROM_START + ROM_SIZE))
//#define RAM_START (0x20000000)
//#define RAM_SIZE (128 * 1024)
//#define RAM_END (RAM_START + RAM_SIZE)
#define RAM_START (0x24000000)
#define RAM_SIZE (512 * 1024)
#define RAM_END (RAM_START + RAM_SIZE)
/ -------------------------- ROM/RAM CONFIG END -------------------------- /

使能网络配置

1.jpg

1.jpg

PS:采用静态IP地址,默认IP地址(192.168.1.30)见rtconfig.h文件

1.jpg

网络参数配置
参考board.h中的ETH CONFIG部分,按步骤配置

/ -------------------------- ETH CONFIG BEGIN -------------------------- /
/** if you want to use eth you can use the following instructions.
*

  • STEP 1, define macro related to the eth
  • such as    BSP_USING_ETH
    
  • STEP 2, copy your eth init function from stm32xxxx_hal_msp.c generated by stm32cubemx to the end if board.c file
  • such as     void HAL_ETH_MspInit(ETH_HandleTypeDef* heth)
    
  • STEP 3, modify your stm32xxxx_hal_config.h file to support eth peripherals. define macro related to the peripherals
  • such as     #define HAL_ETH_MODULE_ENABLED
    
  • STEP 4, config your phy type
  • such as     #define PHY_USING_LAN8720A
    
  • #define PHY_USING_DM9161CEP
    
  • #define PHY_USING_DP83848C
    
  • STEP 5, implement your phy reset function in the end of board.c file
  • void phy_reset(void)
    
  • STEP 6, config your lwip or other network stack

/
#define BSP_USING_ETH
#ifdef BSP_USING_ETH
#define PHY_USING_LAN8720A
/
#define PHY_USING_DM9161CEP*/
/ #define PHY_USING_DP83848C /
#endif
/ -------------------------- ETH CONFIG END -------------------------- /

1.jpg

在board.c中添加HAL_ETH_MspInit函数

void HAL_ETH_MspInit(ETH_HandleTypeDef* ethHandle)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
if(ethHandle->Instance==ETH)
{
/* USER CODE BEGIN ETH_MspInit 0 /
/
USER CODE END ETH_MspInit 0 /
/
Enable Peripheral clock */
__HAL_RCC_ETH1MAC_CLK_ENABLE();
__HAL_RCC_ETH1TX_CLK_ENABLE();
__HAL_RCC_ETH1RX_CLK_ENABLE();
__HAL_RCC_GPIOC_CLK_ENABLE();
__HAL_RCC_GPIOA_CLK_ENABLE();
__HAL_RCC_GPIOB_CLK_ENABLE();
/**ETH GPIO Configuration
PC1 ------> ETH_MDC
PA1 ------> ETH_REF_CLK
PA2 ------> ETH_MDIO
PA7 ------> ETH_CRS_DV
PC4 ------> ETH_RXD0
PC5 ------> ETH_RXD1
PB11 ------> ETH_TX_EN
PB12 ------> ETH_TXD0
PB13 ------> ETH_TXD1
/
GPIO_InitStruct.Pin = GPIO_PIN_1|GPIO_PIN_4|GPIO_PIN_5;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
GPIO_InitStruct.Alternate = GPIO_AF11_ETH;
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
GPIO_InitStruct.Pin = GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_7;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
GPIO_InitStruct.Alternate = GPIO_AF11_ETH;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
GPIO_InitStruct.Pin = GPIO_PIN_11|GPIO_PIN_12|GPIO_PIN_13;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
GPIO_InitStruct.Alternate = GPIO_AF11_ETH;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
/
Peripheral interrupt init /
HAL_NVIC_SetPriority(ETH_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(ETH_IRQn);
/
USER CODE BEGIN ETH_MspInit 1 /
/
USER CODE END ETH_MspInit 1 */
}
}

替换drv_eth.c、drv_eth.h文件

注释phy.h文件中的PHY_FULL_DUPLEX宏定义
//#define PHY_FULL_DUPLEX 1U / PHY full duplex. /

在board.h文件中添加复位管教配置

#define BSP_USING_ETH
#ifdef BSP_USING_ETH
#define PHY_USING_LAN8720A
#define ETH_RESET_PIN "PE.15"

成果展示

至此,网络已经可以ping通了,参考网友的资料

1.jpg

网络内存配置

1.jpg

修改link.lds文件

/*

  • linker script for STM32H743IITx with GNU ld
    /
    /
    Program Entry, set to mark it as "used" and avoid gc /
    MEMORY
    {
    ROM (rx) : ORIGIN =0x08000000,LENGTH =1024k
    RAM (rw) : ORIGIN =0x24000000,LENGTH =512k
    RxDecripSection (rw) : ORIGIN =0x30040000,LENGTH =32k
    TxDecripSection (rw) : ORIGIN =0x30040060,LENGTH =32k
    RxArraySection (rw) : ORIGIN =0x30040200,LENGTH =32k
    }
    ENTRY(Reset_Handler)
    _system_stack_size = 0x400;
    SECTIONS
    {
    .text :
    {
    . = ALIGN(4);
    _stext = .;
    KEEP(
    (.isr_vector)) /* Startup code /
    . = ALIGN(4);
    (.text) / remaining code /
    (.text. ) /
    remaining code /
    (.rodata) / read-only data (constants) /
    (.rodata )
    (.glue_7)
    (.glue_7t)
    (.gnu.linkonce.t )
    /
    section information for finsh shell /
    . = ALIGN(4);
    __fsymtab_start = .;
    KEEP(
    (FSymTab))
    __fsymtab_end = .;
    . = ALIGN(4);
    __vsymtab_start = .;
    KEEP(
    (VSymTab))
    __vsymtab_end = .;
    /
    section information for utest /
    . = ALIGN(4);
    __rt_utest_tc_tab_start = .;
    KEEP(
    (UtestTcTab))
    __rt_utest_tc_tab_end = .;
    /
    section information for at server /
    . = ALIGN(4);
    __rtatcmdtab_start = .;
    KEEP(
    (RtAtCmdTab))
    __rtatcmdtab_end = .;
    . = ALIGN(4);
    /
    section information for initial. /
    . = ALIGN(4);
    __rt_init_start = .;
    KEEP(
    (SORT(.rti_fn*)))
    __rt_init_end = .;
    . = ALIGN(4);
    PROVIDE(ctors_start = .);
    KEEP ( (SORT(.init_array. )))
    KEEP ((.init_array))
    PROVIDE(ctors_end = .);
    . = ALIGN(4);
    _etext = .;
    } > ROM = 0
    /
    .ARM.exidx is sorted, so has to go in its own output section. /
    __exidx_start = .;
    .ARM.exidx :
    {
    (.ARM.exidx .gnu.linkonce.armexidx.
    )
    /* This is used by the startup in order to initialize the .data secion /
    _sidata = .;
    } > ROM
    __exidx_end = .;
    /
    .data section which is used for initialized data /
    .data : AT (_sidata)
    {
    . = ALIGN(4);
    /
    This is used by the startup in order to initialize the .data secion /
    _sdata = . ;
    (.data)
    (.data. )
    (.gnu.linkonce.d )
    PROVIDE(dtors_start = .);
    KEEP(
    (SORT(.dtors.
    )))
    KEEP((.dtors))
    PROVIDE(dtors_end = .);
    . = ALIGN(4);
    /
    This is used by the startup in order to initialize the .data secion /
    _edata = . ;
    } >RAM
    .stack :
    {
    . = ALIGN(4);
    _sstack = .;
    . = . + _system_stack_size;
    . = ALIGN(4);
    _estack = .;
    } >RAM
    __bss_start = .;
    .bss :
    {
    . = ALIGN(4);
    /
    This is used by the startup in order to initialize the .bss secion */
    _sbss = .;
    *(.bss)
    (.bss. )
    (COMMON)
    . = ALIGN(4);
    /
    This is used by the startup in order to initialize the .bss secion */
    _ebss = . ;
    *(.bss.init)
    } > RAM
    __bss_end = .;
    .RxDecripSection (NOLOAD) : ALIGN(4)
    {
    . = ALIGN(4);
    *(.RxDecripSection)
    (.RxDecripSection. )
    . = ALIGN(4);
    RxDecripSection_free = .;
    } > RxDecripSection
    .TxDecripSection (NOLOAD) : ALIGN(4)
    {
    . = ALIGN(4);
    *(.TxDecripSection)
    (.TxDecripSection. )
    . = ALIGN(4);
    TxDecripSection_free = .;
    } > TxDecripSection
    .RxArraySection (NOLOAD) : ALIGN(4)
    {
    . = ALIGN(4);
    (.RxArraySection)
    (.RxArraySection. )
    . = ALIGN(4);
    RxArraySection_free = .;
    } > RxArraySection
    _end = .;
    /
    Stabs debugging sections. */
    .stab 0 : { *(.stab) }
    .stabstr 0 : { *(.stabstr) }
    .stab.excl 0 : { *(.stab.excl) }
    .stab.exclstr 0 : { *(.stab.exclstr) }
    .stab.index 0 : { *(.stab.index) }
    .stab.indexstr 0 : { *(.stab.indexstr) }
    .comment 0 : { (.comment) }
    /
    DWARF debug sections.
    • Symbols in the DWARF debugging sections are relative to the beginning
    • of the section so we begin them at 0. /
      /
      DWARF 1 */
      .debug 0 : { *(.debug) }
      .line 0 : { (.line) }
      /
      GNU DWARF 1 extensions */
      .debug_srcinfo 0 : { *(.debug_srcinfo) }
      .debug_sfnames 0 : { (.debug_sfnames) }
      /
      DWARF 1.1 and DWARF 2 */
      .debug_aranges 0 : { *(.debug_aranges) }
      .debug_pubnames 0 : { (.debug_pubnames) }
      /
      DWARF 2 */
      .debug_info 0 : { (.debug_info .gnu.linkonce.wi. ) }
      .debug_abbrev 0 : { *(.debug_abbrev) }
      .debug_line 0 : { *(.debug_line) }
      .debug_frame 0 : { *(.debug_frame) }
      .debug_str 0 : { *(.debug_str) }
      .debug_loc 0 : { *(.debug_loc) }
      .debug_macinfo 0 : { (.debug_macinfo) }
      /
      SGI/MIPS DWARF 2 extensions */
      .debug_weaknames 0 : { *(.debug_weaknames) }
      .debug_funcnames 0 : { *(.debug_funcnames) }
      .debug_typenames 0 : { *(.debug_typenames) }
      .debug_varnames 0 : { *(.debug_varnames) }
      }
      MPU配置
      在board.c文件中添加MPU_Config函数,两个方案的区别在于是否使能catch
      (1)方案一

void MPU_Config(void)
{
MPU_Region_InitTypeDef MPU_InitStruct;
/* Disable the MPU /
HAL_MPU_Disable();
/
Configure the MPU attributes as WT for AXI SRAM /
MPU_InitStruct.Enable = MPU_REGION_ENABLE;
MPU_InitStruct.BaseAddress = 0x24000000;
MPU_InitStruct.Size = MPU_REGION_SIZE_512KB;
MPU_InitStruct.AccessPermission = MPU_REGION_FULL_ACCESS;
MPU_InitStruct.IsBufferable = MPU_ACCESS_NOT_BUFFERABLE;
MPU_InitStruct.IsCacheable = MPU_ACCESS_CACHEABLE;
MPU_InitStruct.IsShareable = MPU_ACCESS_NOT_SHAREABLE;
MPU_InitStruct.Number = MPU_REGION_NUMBER0;
MPU_InitStruct.TypeExtField = MPU_TEX_LEVEL0;
MPU_InitStruct.SubRegionDisable = 0X00;
MPU_InitStruct.DisableExec = MPU_INSTRUCTION_ACCESS_ENABLE;
HAL_MPU_ConfigRegion(&MPU_InitStruct);
#ifdef BSP_USING_SDRAM
/
Configure the MPU attributes as WT for SDRAM /
MPU_InitStruct.Enable = MPU_REGION_ENABLE;
MPU_InitStruct.BaseAddress = 0xC0000000;
MPU_InitStruct.Size = MPU_REGION_SIZE_32MB;
MPU_InitStruct.AccessPermission = MPU_REGION_FULL_ACCESS;
MPU_InitStruct.IsBufferable = MPU_ACCESS_NOT_BUFFERABLE;
MPU_InitStruct.IsCacheable = MPU_ACCESS_CACHEABLE;
MPU_InitStruct.IsShareable = MPU_ACCESS_NOT_SHAREABLE;
MPU_InitStruct.Number = MPU_REGION_NUMBER1;
MPU_InitStruct.TypeExtField = MPU_TEX_LEVEL0;
MPU_InitStruct.SubRegionDisable = 0x00;
MPU_InitStruct.DisableExec = MPU_INSTRUCTION_ACCESS_ENABLE;
HAL_MPU_ConfigRegion(&MPU_InitStruct);
#endif
#ifdef BSP_USING_ETH
/
Configure the MPU attributes as Device not cacheable
for ETH DMA descriptors and RX Buffers*/
MPU_InitStruct.Enable = MPU_REGION_ENABLE;
MPU_InitStruct.BaseAddress = 0x30040000;
MPU_InitStruct.Size = MPU_REGION_SIZE_32KB;
MPU_InitStruct.AccessPermission = MPU_REGION_FULL_ACCESS;
MPU_InitStruct.IsBufferable = MPU_ACCESS_NOT_BUFFERABLE;
MPU_InitStruct.IsCacheable = MPU_ACCESS_NOT_CACHEABLE;
MPU_InitStruct.IsShareable = MPU_ACCESS_SHAREABLE;
MPU_InitStruct.Number = MPU_REGION_NUMBER2;
MPU_InitStruct.TypeExtField = MPU_TEX_LEVEL1;
MPU_InitStruct.SubRegionDisable = 0x00;
MPU_InitStruct.DisableExec = MPU_INSTRUCTION_ACCESS_ENABLE;
HAL_MPU_ConfigRegion(&MPU_InitStruct);
#endif
/* Configure the MPU attributes as WT for QSPI /
// MPU_InitStruct.Enable = MPU_REGION_ENABLE;
// MPU_InitStruct.BaseAddress = 0x90000000;
// MPU_InitStruct.Size = MPU_REGION_SIZE_8MB;
// MPU_InitStruct.AccessPermission = MPU_REGION_FULL_ACCESS;
// MPU_InitStruct.IsBufferable = MPU_ACCESS_NOT_BUFFERABLE;
// MPU_InitStruct.IsCacheable = MPU_ACCESS_CACHEABLE;
// MPU_InitStruct.IsShareable = MPU_ACCESS_NOT_SHAREABLE;
// MPU_InitStruct.Number = MPU_REGION_NUMBER3;
// MPU_InitStruct.TypeExtField = MPU_TEX_LEVEL0;
// MPU_InitStruct.SubRegionDisable = 0X00;
// MPU_InitStruct.DisableExec = MPU_INSTRUCTION_ACCESS_ENABLE;
//
// HAL_MPU_ConfigRegion(&MPU_InitStruct);
/
Enable the MPU /
HAL_MPU_Enable(MPU_PRIVILEGED_DEFAULT);
/
Enable CACHE */
SCB_EnableICache();
SCB_EnableDCache();
return RT_EOK;
}
(2)方案二

{
MPU_Region_InitTypeDef MPU_InitStruct = {0};
/* Disables the MPU /
HAL_MPU_Disable();
/
* Initializes and configures the Region and the memory to be protected
/
MPU_InitStruct.Enable = MPU_REGION_ENABLE;
MPU_InitStruct.Number = MPU_REGION_NUMBER0;
MPU_InitStruct.BaseAddress = 0x30040000;
MPU_InitStruct.Size = MPU_REGION_SIZE_256B;
MPU_InitStruct.SubRegionDisable = 0x00;
MPU_InitStruct.TypeExtField = MPU_TEX_LEVEL0;
MPU_InitStruct.AccessPermission = MPU_REGION_FULL_ACCESS;
MPU_InitStruct.DisableExec = MPU_INSTRUCTION_ACCESS_ENABLE;
MPU_InitStruct.IsShareable = MPU_ACCESS_NOT_SHAREABLE;
MPU_InitStruct.IsCacheable = MPU_ACCESS_NOT_CACHEABLE;
MPU_InitStruct.IsBufferable = MPU_ACCESS_BUFFERABLE;
HAL_MPU_ConfigRegion(&MPU_InitStruct);
/
* Initializes and configures the Region and the memory to be protected
/
MPU_InitStruct.Number = MPU_REGION_NUMBER1;
MPU_InitStruct.BaseAddress = 0x30044000;
MPU_InitStruct.Size = MPU_REGION_SIZE_16KB;
MPU_InitStruct.IsCacheable = MPU_ACCESS_CACHEABLE;
MPU_InitStruct.IsBufferable = MPU_ACCESS_NOT_BUFFERABLE;
HAL_MPU_ConfigRegion(&MPU_InitStruct);
/
Enables the MPU */
HAL_MPU_Enable(MPU_PRIVILEGED_DEFAULT);
}
调用MPU配置函数
修改drv_common.c文件的hw_board_init函数

void hw_board_init(char clock_src, int32_t clock_src_freq, int32_t clock_target_freq)
{
extern void rt_hw_systick_init(void);
extern void clk_init(char clk_source, int source_freq, int target_freq);
#ifdef SCB_EnableICache
/
Enable I-Cache---------------------------------------------------------
/
SCB_EnableICache();
#endif
#ifdef SCB_EnableDCache
/* Enable D-Cache---------------------------------------------------------/
SCB_EnableDCache();
#endif
extern void MPU_Config(void);
MPU_Config();
/
HAL_Init() function is called at the beginning of the program /
HAL_Init();
/
enable interrupt /
__set_PRIMASK(0);
/
System clock initialization /
clk_init(clock_src, clock_src_freq, clock_target_freq);
/
disbale interrupt /
__set_PRIMASK(1);
rt_hw_systick_init();
/
Pin driver initialization is open by default /
#ifdef RT_USING_PIN
extern int rt_hw_pin_init(void);
rt_hw_pin_init();
#endif
/
USART driver initialization is open by default */
#ifdef RT_USING_SERIAL
extern int rt_hw_usart_init(void);
rt_hw_usart_init();
#endif
}

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

    关注

    40

    文章

    5358

    浏览量

    170897
  • RCC
    RCC
    +关注

    关注

    0

    文章

    93

    浏览量

    26880
  • UART接口
    +关注

    关注

    0

    文章

    124

    浏览量

    15259
  • RT-Thread
    +关注

    关注

    31

    文章

    1266

    浏览量

    39868
  • STM32H743
    +关注

    关注

    0

    文章

    24

    浏览量

    1657
收藏 人收藏

    评论

    相关推荐

    使用STM32H743以太网,如何检测以太网是否掉线?

    目前使用STM32H743以太网,目前我这里检测以太网掉线(物理线缆脱掉)的方式为读取PHY自动协商的状态,但是这个部分放在主循环中感觉很不好,之前使用的TI芯片,会有一个寄存器的Bit显示当前
    发表于 03-26 07:42

    STM32H743以太网与高速USB同时工作遇到的疑问求解

    STM32H743以太网与高速USB同时工作不可靠 各位大侠,我在一个项目中使用STM32H743的100M以太网和高速USB,高速USB是外置的PHY USB3300。使用的Cub
    发表于 04-09 07:53

    记录一次STM32H743 CANFD调试过程中的一次BUG

    记录一次STM32H743 CANFD调试过程中的一次BUG
    发表于 08-13 06:30

    STM32H743 Flash用来存什么

    STM32H743 Flash用来存什么?STM32H743 Flash的硬件特性和基本操作是什么?
    发表于 09-24 09:41

    NUCLEO STM32H743怎么使用?

    NUCLEO STM32H743怎么使用?
    发表于 11-08 06:25

    求一种基于STM32H743的录音机调试方案

    怎样去设计一种基于STM32H743的录音机硬件部分?怎样对基于STM32H743的录音机软件部分进行调试
    发表于 11-19 07:04

    STM32H743多路串口调试经验分享

    STM32H743多路串口调试经验分享
    发表于 12-08 06:35

    如何调试STM32H743的两串口?

    如何调试STM32H743的两串口?
    发表于 02-28 08:51

    STM32H743以太网驱动什么时候更新呢

    STM32H系列外设驱动已经支持了,什么时候更新呢?现在的版本调用以太网还是报错呢
    发表于 09-30 10:15

    STM32H7是否支持usb gadget以太网

    有人知道 STM32H7 (STM32H743) 支持 usb gadget 以太网吗?我在某处读到 STM32F7,但不确定 STM32H
    发表于 12-05 06:37

    STM32H7以太网不工作怎么解决?

    STM32H753x 板上试过,所有这些都具有相同的行为。我还尝试在以太网low_level_output()函数中添加 SCB_CleanInvalidateDCache()。我已禁用所有防火墙并验证我可以
    发表于 01-12 08:49

    STM32H743芯片上实现CAN通信的步骤

    本篇笔记主要介绍,在STM32H743芯片上实现CAN通信,封装为BSP驱动,为之后实现CAN的高层通信打下基础。
    的头像 发表于 09-14 14:33 1.6w次阅读
    在<b class='flag-5'>STM32H743</b>芯片上实现CAN通信的步骤

    stm32h743外部RAM非字节对齐访问,引起的hard fault

    stm32h743外部RAM非字节对齐访问,引起的hard fault
    发表于 12-09 09:21 5次下载
    <b class='flag-5'>stm32h743</b>外部RAM非字节对齐访问,引起的hard fault

    STM32cube实现STM32H743的USB驱动

    STM32cube实现STM32H743的USB驱动基于STM32cube实现STM32H743的USB
    发表于 12-28 19:53 39次下载
    用<b class='flag-5'>STM32</b>cube实现<b class='flag-5'>STM32H743</b>的USB<b class='flag-5'>驱动</b>

    stm32h743软件模拟i2c驱动

    stm32h743 实现gpio模拟i2c资料分享
    发表于 12-01 11:12 7次下载