跳转至内容
  • 版块
  • 最新
  • 标签
  • 热门
折叠
品牌标识

YunTu Forum

YTMicro.com
  1. 主页
  2. Discussion & Question
  3. YTM32B1M系列
  4. YTM32B1MD1 Uart中断接收DEMO修改的程序会进入DefaultISR ,用官方DEMO配置也是一样的

YTM32B1MD1 Uart中断接收DEMO修改的程序会进入DefaultISR ,用官方DEMO配置也是一样的

已定时 已固定 已锁定 已移动 YTM32B1M系列
6 帖子 3 发布者 70 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • F 离线
    F 离线
    Follow
    写于2025年3月12日 03:35 最后由 编辑
    #1

    9c490505-3352-4ef5-a5d6-ccbf3bc7d7-875d-410a-bd78-b718a76e5605-1741750184912.png f804c4dadb-image.png
    4c0898e1-fbcc-4203-a2e0-a22a8866a39d-1741750160584.png
    #include "sdk_project_config.h"
    /* Includes ------------------------------------------------------------------*/

    /* Private includes ----------------------------------------------------------/
    /
    USER CODE BEGIN Includes /
    /
    USER CODE END Includes */

    /* Private typedef -----------------------------------------------------------/
    /
    USER CODE BEGIN PTD /
    /
    USER CODE END PTD */

    /* Private define ------------------------------------------------------------/
    /
    USER CODE BEGIN PD /
    #define UART_TX_RX_SIZE (8)
    #define INST_UART (0)
    /
    USER CODE END PD */

    /* Private macro -------------------------------------------------------------/
    /
    USER CODE BEGIN PM /
    /
    USER CODE END PM */

    /* Private variables ---------------------------------------------------------/
    /
    USER CODE BEGIN PV /
    uint8_t g_RecData[UART_TX_RX_SIZE];
    volatile bool g_rxComplete = false;
    volatile bool g_txComplete = false;
    /
    USER CODE END PV */

    /* Private function declare --------------------------------------------------/
    /
    USER CODE BEGIN PFDC /
    /
    USER CODE END PFDC */
    static void Board_Init(void);

    /* Private user code ---------------------------------------------------------/
    /
    USER CODE BEGIN 0 /
    /
    Uart rx callback function */
    void Uart_RxCallback(void *LINFLexDState, uart_event_t event, void *userData)
    {
    (void)LINFLexDState;
    (void)userData;
    if (event == UART_EVENT_END_TRANSFER)
    {
    g_rxComplete = true;
    }
    }

    /* Uart tx callback function */
    void Uart_TxCallback(void *LINFLexDState, uart_event_t event, void *userData)
    {
    (void)LINFLexDState;
    (void)userData;
    if (event == UART_EVENT_END_TRANSFER)
    {
    g_txComplete = true;
    }
    }

    /* USER CODE END 0 */

    /**

    • @brief The application entry point.

    • @retval int
      /
      int main(void)
      {
      /
      USER CODE BEGIN 1 /
      status_t status = STATUS_SUCCESS;
      /
      USER CODE END 1 /
      Board_Init();
      /
      USER CODE BEGIN 2 */
      PRINTF("Build %s %s\r\n", DATE, TIME);
      PRINTF("Linflexd Uart Interrupt Demo!\r\n");

      LINFlexD_UART_DRV_InstallRxCallback(INST_UART, Uart_RxCallback, NULL);
      LINFlexD_UART_DRV_InstallTxCallback(INST_UART, Uart_TxCallback, NULL);
      /* USER CODE END 2 */

      /* Infinite loop /
      /
      USER CODE BEGIN WHILE */
      while (1)
      {

       status |= LINFlexD_UART_DRV_ReceiveData(INST_UART, g_RecData, UART_TX_RX_SIZE);
       PRINTF("\r\n g_RecData: %c",g_RecData);
       /* Wait for reception to complete */
      // while (!g_rxComplete)
      //     ;
       /* Send received data */
      // status |= LINFlexD_UART_DRV_SendData(INST_UART, g_RecData, UART_TX_RX_SIZE);
       /* Wait for sending to complete */
      // while (!g_txComplete)
      //     ;
      // PRINTF("\r\n g_RecData: %c",g_RecData);
      

      // g_txComplete = false;
      // g_rxComplete = false;

       if (status != STATUS_SUCCESS)
       {
           //break;
       }
       /* USER CODE END WHILE */
       /* USER CODE BEGIN 3 */
      

      }
      /* USER CODE END 3 */
      }

    static void Board_Init(void)
    {
    CLOCK_SYS_Init(g_clockManConfigsArr,CLOCK_MANAGER_CONFIG_CNT,g_clockManCallbacksArr,CLOCK_MANAGER_CALLBACK_CNT);
    CLOCK_SYS_UpdateConfiguration(CLOCK_MANAGER_ACTIVE_INDEX,CLOCK_MANAGER_POLICY_AGREEMENT);
    PINS_DRV_Init(NUM_OF_CONFIGURED_PINS0,g_pin_mux_InitConfigArr0);
    UTILITY_PRINT_Init();
    }

    /* USER CODE BEGIN 4 /
    /
    USER CODE END 4 */
    ed3aa81a-0738-4786-b983-9bf3494a7a2e-1741750399007.png 程序跑到箭头所指的地方就进入了DefaultISRLinflexd_Uart_Interrupt_Demo.yct yct配置工程已经提交

    1 条回复 最后回复
    0
    • F 离线
      F 离线
      Follow
      写于2025年3月12日 03:40 最后由 编辑
      #2

      fc99cccd-57cd-4fdb-a6a5-7098dae65036-1741750740515.png
      b8c327cb-5826-4d82-a472-b0bd70ad23b2-1741750726034.png
      a7f6cddc-9f62-4303-a576-ee0eef77cc4f-1741750800274.png 时钟配置补充

      1 条回复 最后回复
      0
      • D 离线
        D 离线
        Diga
        写于2025年3月12日 05:24 最后由 编辑
        #3

        NULL 是空指针,不会进这里的。
        是进的 HardFault?Hardfault 状态是什么

        F 1 条回复 最后回复 2025年3月12日 05:29
        0
        • F 离线
          F 离线
          Follow
          在 2025年3月12日 05:29 回复了 Diga 最后由 编辑
          #4

          Diga 在 YTM32B1MD1 Uart中断接收DEMO修改的程序会进入DefaultISR ,用官方DEMO配置也是一样的 中说:

          HardFault

          是进入了DefaultISR,麻烦你帮我看看我的串口的驱动配置哪里有问题,谢谢

          1 条回复 最后回复
          0
          • runR 离线
            runR 离线
            run YunTu
            写于2025年3月12日 05:38 最后由 run 编辑 2025年3月12日 13:39
            #5

            在LINFlexD_UART_DRV_InstallRxCallback前,需要确保 LINFlexD_UART0 已经Init了。
            如果进入HardFault,其行为默认也是DefaultISR。

            F 1 条回复 最后回复 2025年3月12日 06:14
            0
            • F 离线
              F 离线
              Follow
              在 2025年3月12日 06:14 回复了 run 最后由 编辑
              #6

              run #include "sdk_project_config.h"
              /* Includes ------------------------------------------------------------------*/

              /* Private includes ----------------------------------------------------------/
              /
              USER CODE BEGIN Includes /
              /
              USER CODE END Includes */

              /* Private typedef -----------------------------------------------------------/
              /
              USER CODE BEGIN PTD /
              /
              USER CODE END PTD */

              /* Private define ------------------------------------------------------------/
              /
              USER CODE BEGIN PD /
              #define UART_TX_RX_SIZE (8)
              #define INST_UART (0)
              /
              USER CODE END PD */

              /* Private macro -------------------------------------------------------------/
              /
              USER CODE BEGIN PM /
              /
              USER CODE END PM */

              /* Private variables ---------------------------------------------------------/
              /
              USER CODE BEGIN PV */
              uint8_t g_RecData[UART_TX_RX_SIZE];

              #define UART_RX_LENGTH (20)
              volatile bool g_rxComplete = false;
              volatile bool g_txComplete = false;
              uint8_t g_uartRxBuffer[UART_RX_LENGTH] = { 0 };
              /* USER CODE END PV */

              /* Private function declare --------------------------------------------------/
              /
              USER CODE BEGIN PFDC /
              /
              USER CODE END PFDC */
              static void Board_Init(void);

              /* Private user code ---------------------------------------------------------/
              /
              USER CODE BEGIN 0 /
              /
              Uart rx callback function */
              void uart_RX_Callback(void *uartState, uart_event_t event, void userData)
              {
              (void)userData;
              (void)uartState;
              if (UART_EVENT_END_TRANSFER == event)
              {
              /
              Note: Debug output inserted into interrupt routine for demo clarity. Might introduce delay. /
              PRINTF("Data Received: ");
              for (int i = 0; i < UART_RX_LENGTH; i++)
              {
              PRINTF("%x ", g_uartRxBuffer[i]);
              }
              PRINTF("\n\r");
              }
              else if (UART_EVENT_ERROR == event)
              {
              /
              error happened */
              }
              }

              void uart_TX_Callback(void *uartState, uart_event_t event, void userData)
              {
              (void)userData;
              (void)uartState;
              if (UART_EVENT_END_TRANSFER == event)
              {
              /
              Note: Debug output inserted into interrupt routine for demo clarity. Might introduce delay. */
              PRINTF("Data sent.\n");
              }
              }

              /* USER CODE END 0 */

              /**

              • @brief The application entry point.

              • @retval int
                /
                int main(void)
                {
                /
                USER CODE BEGIN 1 /
                status_t status = STATUS_SUCCESS;
                /
                USER CODE END 1 /
                Board_Init();
                /
                USER CODE BEGIN 2 */
                PRINTF("Build %s %s\r\n", DATE, TIME);
                PRINTF("Linflexd Uart Interrupt Demo!\r\n");

                LINFlexD_UART_DRV_InstallRxCallback(INST_UART, uart_RX_Callback, NULL);
                LINFlexD_UART_DRV_InstallTxCallback(INST_UART, uart_TX_Callback, NULL);
                /* USER CODE END 2 */

                /* Infinite loop /
                /
                USER CODE BEGIN WHILE */
                while (1)
                {

                 status |= LINFlexD_UART_DRV_ReceiveData(INST_UART, g_RecData, UART_TX_RX_SIZE);
                 //PRINTF("\r\n g_RecData: %c",g_RecData);
                 /* Wait for reception to complete */
                // while (!g_rxComplete)
                //     ;
                 /* Send received data */
                // status |= LINFlexD_UART_DRV_SendData(INST_UART, g_RecData, UART_TX_RX_SIZE);
                 /* Wait for sending to complete */
                // while (!g_txComplete)
                //     ;
                // PRINTF("\r\n g_RecData: %c",g_RecData);
                

                // g_txComplete = false;
                // g_rxComplete = false;

                 if (status != STATUS_SUCCESS)
                 {
                     //break;
                 }
                 /* USER CODE END WHILE */
                 /* USER CODE BEGIN 3 */
                

                }
                /* USER CODE END 3 */
                }

              static void Board_Init(void)
              {
              CLOCK_SYS_Init(g_clockManConfigsArr,CLOCK_MANAGER_CONFIG_CNT,g_clockManCallbacksArr,CLOCK_MANAGER_CALLBACK_CNT);
              CLOCK_SYS_UpdateConfiguration(CLOCK_MANAGER_ACTIVE_INDEX,CLOCK_MANAGER_POLICY_AGREEMENT);
              PINS_DRV_Init(NUM_OF_CONFIGURED_PINS0,g_pin_mux_InitConfigArr0);
              UTILITY_PRINT_Init();
              LINFlexD_UART_DRV_Init(0, &linflexd_uart_config0_State, &linflexd_uart_config0);
              }
              程序正常跑起来的,没有进入DefaultISR了,串口是有发送数据的,用逻辑分析仪是能看到的,但是就是接收不到,麻烦帮我看看我的YCT和代码,哪个地方配置错了,谢谢Linflexd_Uart_Interrupt_Demo.yct

              1 条回复 最后回复
              -1

              1/6

              2025年3月12日 03:35

            • 云途论坛规则/Yuntu Forum Rules

              发帖前请查看

            • YCT离线License申请流程

              帮助没办法联网的电脑使用YCT

            • YT CONFIG TOOL调查问卷

              帮助改进和优化YT CONFIG TOOL,有机会抽取YTM32B1ME0 EVB哦...

            • demo
              11
              can
              8
              lin stack
              5
              yt-link
              5
              vscode
              3
              adc模块
              2
              i2c
              2
              uuid
              2
              Online Users
              dongtian1D
              dongtian1
              2分钟之前
              • 登录

              • 登录或注册以进行搜索。
              1 / 6
              • 第一个帖子
                1/6
                最后一个帖子
              0
              • 版块
              • 最新
              • 标签
              • 热门