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

JLinkRTTViewerExe向STM32MP257D_M33发数据后要求马上回复相同内容有高达5秒以上延迟,如何解决

[复制链接]
找个港湾 提问时间:2026-3-18 20:00 / 未解决
我提供的具体内容如下

这是main函数

```
int main(void)
{

// csvir cancel
// #ifdef DEBUG
//   volatile uint32_t debug = 1;
//   while(debug);
// #endif

  if(IS_DEVELOPER_BOOT_MODE())
  {
    SystemClock_Config();
  }
  else
  {
    SystemCoreClockUpdate();
  }

  // __HAL_RCC_DBGMCU_CLK_ENABLE();   // 使能调试时钟
  // DBGMCU->CR |= DBGMCU_CR_DBG_SLEEP | DBGMCU_CR_DBG_STOP | DBGMCU_CR_DBG_STANDBY;
  // or
  // HAL_DBGMCU_EnableDBGSleepMode();
  // HAL_DBGMCU_EnableDBGStopMode();
  // HAL_DBGMCU_EnableDBGStandbyMode();


  bool hal_init_ret = 0;
  hal_init_ret = HAL_Init();

  SCB->SCR &= ~SCB_SCR_SLEEPDEEP_Msk;   // 禁止深睡眠,仅允许浅睡眠

  #if(0)
  for (volatile int i = 0; i < 1000000; i++);
  // 1. 释放调试复位 (DBGRST = 0),并启用调试时钟
  RCC->DBGCFGR &= ~RCC_DBGCFGR_DBGRST;          // 清除复位位
  RCC->DBGCFGR |= RCC_DBGCFGR_DBGEN;            // 使能调试时钟
  // 如果需要跟踪接口(SWO),可一并使能 TRACEEN
  // RCC->DBGCFGR |= RCC_DBGCFGR_TRACEEN;

  // 2. 允许低功耗模式下调试连接(使用非安全地址)
  DBGMCU_NS->CR |= DBGMCU_CR_DBG_SLEEP | DBGMCU_CR_DBG_STOP | DBGMCU_CR_DBG_STANDBY;

  // 3. 添加长延时,便于手动连接 J-Link
  for (volatile int i = 0; i < 1000000; i++);
#endif
  // uint32_t dbgcfgr_val = RCC->DBGCFGR;

  /* Initialize led */
  // BSP_LED_Init(LED3); // csvir cancel

  /* Initialize Display destination */
  if(ResMgr_Request(RESMGR_RESOURCE_RIFSC, RESMGR_RIFSC_UART5_ID) == RESMGR_STATUS_ACCESS_OK) {
          COM_Init.BaudRate                = 115200;
          COM_Init.WordLength              = UART_WORDLENGTH_8B;
          COM_Init.StopBits                = UART_STOPBITS_1;
          COM_Init.Parity                  = UART_PARITY_NONE;
          COM_Init.HwFlowCtl               = UART_HWCONTROL_NONE;
          /* Initialize and select COM1 which is the COM port associated with current Core */
          BSP_COM_Init(COM_VCP_CM33, &COM_Init);
          BSP_COM_SelectLogPort(COM_VCP_CM33);
  }
  /* Add your non-secure example code here
     */

  disable_dcache();
  disable_icache();


printf("hal_init_ret=%x<\r\n", hal_init_ret);

  printf("csvir [NS] [INF] Non-Secure system starting...\r\n");

  printf("\033[1;34m[NS] [INF] STM32Cube FW version: v%ld.%ld.%ld-rc%ld \033[0m\r\n",
         ((HAL_GetHalVersion() >> 24) & 0x000000FF),  // Main version
         ((HAL_GetHalVersion() >> 16) & 0x000000FF),  // Sub1 version
         ((HAL_GetHalVersion() >> 8) & 0x000000FF),   // Sub2 version
         (HAL_GetHalVersion() & 0x000000FF));         // RC version


  // SEGGER_RTT_Init(); // 这里写不写,影响作用不大
  uintptr_t rtt_addr = (uintptr_t)(&_SEGGER_RTT);
  char rtt_buf[64] = {0};
  (void)snprintf(rtt_buf, sizeof(rtt_buf), "connect rtt viewer, need addr: 0x%x\r\n", (uint32_t)rtt_addr);
  printf(rtt_buf);
  SEGGER_RTT_printf(0, rtt_buf);
  /*
    这个地址也可以通过查看.map文件来找到,搜索 _SEGGER_RTT
    /home/csvir/OpenSTLinux_distribution/build-openstlinuxweston-stm32mp2-m33td/workspace/sources/m33tdprojects-starter-stm32mp2/Projects/STM32MP257F-EV1/Demonstrations/StarterApp_M33TD/build-m33td_emmc-stm32mp257f-ev1-cm33tdcid-ostl/StarterApp_M33TD_CM33_NonSecure.map
  */

  if (SCB->CCR & SCB_CCR_DC_Msk) {
      SEGGER_RTT_printf(0, "D-Cache is ENABLED\r\n");
  } else {
      SEGGER_RTT_printf(0, "D-Cache is DISABLED\r\n");
  }
  if (SCB->CCR & SCB_CCR_IC_Msk) {
      SEGGER_RTT_printf(0, "I-Cache is ENABLED\r\n");
  } else {
      SEGGER_RTT_printf(0, "I-Cache is DISABLED\r\n");
  }
  // 这会引起非法访问 iac exceptions: [191:160]=0x020000 Discarded IAC ID: 177
  // uint32_t denr_val = BSEC->DENR;
  // SEGGER_RTT_printf(0, "BSEC->DENR=%x<", denr_val);  

  // 无法读取,安全限制
  // uint32_t val_DBGMCU_IDC = *((uint32_t *)0x5a010000);
  // uint32_t val_DBGMCU_CR = *((uint32_t *)0x5a010004);
  // uint32_t val_RCC_DBGCFGR = *((uint32_t *)0x54200520);
  // SEGGER_RTT_printf(0, "DBGMCU_IDC=%x<", val_DBGMCU_IDC);
  // SEGGER_RTT_printf(0, "DBGMCU_CR=%x<", val_DBGMCU_CR);
  // SEGGER_RTT_printf(0, "RCC_DBGCFGR=%x<", val_RCC_DBGCFGR);

  // printf("dbgcfgr_val=0x%x<", dbgcfgr_val);

  // 这里没有什么内容,应该也不需要改
  osKernelInitialize();  /* Call init function for freertos objects (in freertos.c) */
  
  MX_FREERTOS_Init();

  osKernelStart(); // 这里没有什么内容,应该也不需要改

  /* We should never get here as control is now taken by the scheduler */
  /* Infinite loop */
  while (1)
  {
  }
}
```

这是os启动后的用户app
收藏 评论0 发布时间:2026-3-18 20:00

举报

0个回答

所属标签

相似问题

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版