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

YunTu Forum

YTMicro.com
  1. 主页
  2. Discussion & Question
  3. YTM32B1L系列
  4. 关于LE05串口回显

关于LE05串口回显

已定时 已固定 已锁定 已移动 YTM32B1L系列
8 帖子 2 发布者 145 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • Y 离线
    Y 离线
    yishui66
    写于2025年1月20日 02:58 最后由 yishui66 编辑 2025年1月20日 11:05
    #1
    此主題已被删除!
    1 条回复 最后回复
    0
    • Y 离线
      Y 离线
      yishui66
      写于2025年1月20日 09:02 最后由 yishui66 编辑 2025年1月20日 17:02
      #2

      大家好,问题已解决,是我的自己使用不规范的缘故;但是串口是否确定没有UART_EVENT_TIMEOUT事件?RM手册未找到相关描述,且UART_DRV_GetReceiveStatus函数也没有实际意义

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

        有个 idle 可以用来判断超时,即当前开始接收后,MCU 收到若干数据,后总线不发送数据,直到 IDLE 时间超过 IDLESZ,即会产生 IDLE 事件。
        这个 API 可以在异步传输时判断当前传输状态

        image.png

        image.png

        1 条回复 最后回复
        0
        • Y 离线
          Y 离线
          yishui66
          写于2025年1月22日 03:00 最后由 yishui66 编辑 2025年1月22日 11:02
          #4

          Diga 谢谢支持。回调函数里没有成功触发过UART_EVENT_TIMEOUT,可以提供一下具体用法吗?我在中断配置结构体对空闲中断进行使能了。即.idleErrorIntEnable=true,

          ①回调函数在接收到的字节数不满预期需接收的字节数时,只会触发UART_EVENT_ERROR事件,并且此时UART_DRV_GetReceiveStatus(INST_UART1, &g_rxRemainNum);获取到的剩余接收字节数是对的

          void uart1_RX_Callback(void *uartState, uart_event_t event, void *userData)
          {
              (void)uartState;
              (void)userData;
              if (event == UART_EVENT_END_TRANSFER)
              {
                  g_rxComplete = true;
              }
              else if (event == UART_EVENT_TIMEOUT)
              {
                  UART_DRV_GetReceiveStatus(INST_UART1, &g_rxRemainNum);
                  g_TimeoutFlag = true;
              } 
             else 
             {
                  UART_DRV_GetReceiveStatus(INST_UART1, &g_rxRemainNum);
          	PRINTF("Number of remaining received bytes is %d\r\n", g_rxRemainNum);
          	PRINTF("event is %x\r\n",event);
          	}
          		
          }
          

          ②这是我设置超时值的写法,有问题吗?我这么写后回调函数都无法正确触发了

              UART_Type *uartPtr;
          
              uint32_t ctrl1Value = uartPtr->CTRL1;
              // 清除IDLESZ位(18 - 16位)
              ctrl1Value &= ~(0x7 << 16);
              // 设置IDLESZ为011b(3)
              ctrl1Value |= (0x3 << 16);
              // 写回修改后的值到CTRL1寄存器
              uartPtr->CTRL1 = ctrl1Value;
          

          ③以下是我的main.c

          int main(void)
          {
          
              /* USER CODE BEGIN 1 */
              status_t status = STATUS_SUCCESS;
              UART_Type *uartPtr;
              /* USER CODE END 1 */ 
              Board_Init();
              /* USER CODE BEGIN 2 */
          
              PRINTF("Build %s %s\n", __DATE__, __TIME__);
              PRINTF("UART Idle Interrupt Demo!\r\n");
          
              // 读取CTRL1寄存器的值
              uint32_t ctrl1Value = uartPtr->CTRL1;
              // 清除IDLESZ位(18 - 16位)
              ctrl1Value &= ~(0x7 << 16);
              // 设置IDLESZ为011b(3)
              ctrl1Value |= (0x3 << 16);
              // 写回修改后的值到CTRL1寄存器
              uartPtr->CTRL1 = ctrl1Value;
          		
              UART_DRV_InstallRxCallback(INST_UART1, uart1_RX_Callback, NULL);
              UART_DRV_InstallTxCallback(INST_UART1, uart1_TX_Callback, NULL);
          		
              while (1)
              {
          	status |=UART_DRV_ReceiveData(INST_UART1, g_RecData, UART_TX_RX_SIZE);
                  /* Wait for reception to complete */
                  while ((!g_rxComplete) && (!g_TimeoutFlag))
                      ;
          
          	if (g_TimeoutFlag)
                  {
                      PRINTF("Number of remaining received bytes is %d\r\n", g_rxRemainNum);
                  }
                  if (g_rxComplete)
                  {
                      UART_DRV_GetReceiveStatus(INST_UART1, &g_rxRemainNum);
          
                  }
          	status |=UART_DRV_SendData(INST_UART1, g_RecData,UART_TX_RX_SIZE - g_rxRemainNum);
          	while (!g_txComplete)
                      ;
                  PRINTF("\r\n");
          				
          	g_rxComplete = false;
                  g_txComplete = false;
          	g_TimeoutFlag = false;
          
                  if (status != STATUS_SUCCESS)
                  {
                      break;
                  }
          
              }
          
              PRINTF("UART Idle Interrupt Demo End!\r\n");
              /* USER CODE END 2 */
          
              /* Infinite loop */
              /* USER CODE BEGIN WHILE */
              while (1)
              {
                  /* USER CODE END WHILE */
                  /* USER CODE BEGIN 3 */
              }
              /* USER CODE END 3 */
          }
          
          1 条回复 最后回复
          0
          • D 离线
            D 离线
            Diga
            写于2025年1月22日 03:05 最后由 编辑
            #5

            那个是 LINFlexD 模块的 UART 模式超时功能,YTM32B1LE0 是 UART 模块,没有这个 event

            Y 1 条回复 最后回复 2025年1月22日 03:42
            0
            • Y 离线
              Y 离线
              yishui66
              在 2025年1月22日 03:42 回复了 Diga 最后由 编辑
              #6

              Diga 所以LE0 的 UART 模块只能接收刚好是预期字节数的数据,对吧?

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

                那倒不至于,模块内部 IDLE 事件就是用来接收不定长数据的,例如你设置接收 10 字节,实际发了 8 字节就结束了,等到 IDLE 事件置起,就可以断定此刻传输完成,即终止此次传输。

                Y 1 条回复 最后回复 2025年1月22日 06:32
                0
                • Y 离线
                  Y 离线
                  yishui66
                  在 2025年1月22日 06:32 回复了 Diga 最后由 编辑
                  #8

                  Diga 感谢,功能已经实现。

                  1 条回复 最后回复
                  0

                  8/8

                  2025年1月22日 06:32

                • 云途论坛规则/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
                  • 登录

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