Aurix Tricore TC397串口接收偶尔乱码的解决方法

一、问题背景

在使用tc397的aurix-code-example的uart代码时候,按照demo的示例配置好串口IO,中断、buffer之后

void init_ASCLIN_UART(void)
{
    /* Initialize an instance of IfxAsclin_Asc_Config with default values */
    IfxAsclin_Asc_Config ascConfig;
    IfxAsclin_Asc_initModuleConfig(&ascConfig, &MODULE_ASCLIN1);

    /* Set the desired baud rate */
    ascConfig.baudrate.baudrate = UART_BAUDRATE;

    /* ISR priorities and interrupt target */
    ascConfig.interrupt.txPriority = INTPRIO_ASCLIN1_TX;
    ascConfig.interrupt.rxPriority = INTPRIO_ASCLIN1_RX;
    ascConfig.interrupt.typeOfService = IfxCpu_Irq_getTos(IfxCpu_getCoreIndex());

    /* FIFO configuration */
    ascConfig.txBuffer = &g_ascTxBuffer;
    ascConfig.txBufferSize = UART_TX_BUFFER_SIZE;
    ascConfig.rxBuffer = &g_ascRxBuffer;
    ascConfig.rxBufferSize = UART_RX_BUFFER_SIZE;

    /* Pin configuration */
    const IfxAsclin_Asc_Pins pins =
    {
        NULL_PTR,       IfxPort_InputMode_pullUp,     /* CTS pin not used */
        &UART_PIN_RX,   IfxPort_InputMode_pullUp,     /* RX pin           */
        NULL_PTR,       IfxPort_OutputMode_pushPull,  /* RTS pin not used */
        &UART_PIN_TX,   IfxPort_OutputMode_pushPull,  /* TX pin           */
        IfxPort_PadDriver_cmosAutomotiveSpeed1
    };
    ascConfig.pins = &pins;

    IfxAsclin_Asc_initModule(&g_ascHandle, &ascConfig); /* Initialize module with above parameters */
}

在部分接收下,会出现串口接收异常,与发送的数据不匹配的问题。

通过debug排查问题发现,串口中断接收的时候已经出现字符串乱码。问题应该出现在串口的硬件时序接收上。

二、问题解决

在AURIX的用户手册串口章节,对串口的描述中,串口可以设置oversamplingsample point,通过设置这两个参数可以设置串口模块在时序采样的时候的属性。

 在串口初始化的时候添加该两个参数可以有效的避免串口通信乱码异常。

/* This function initializes the ASCLIN UART module */
void UART0_Init(float32 baudrate)
{
    /* Initialize an instance of IfxAsclin_Asc_Config with default values */
    IfxAsclin_Asc_Config ascConfig;
    IfxAsclin_Asc_initModuleConfig(&ascConfig, &MODULE_ASCLIN0);

    /* Set the desired baud rate */
    ascConfig.baudrate.baudrate = baudrate;
    ascConfig.baudrate.oversampling = IfxAsclin_OversamplingFactor_16;            /* Set the oversampling factor      */

    /* Configure the sampling mode */
    ascConfig.bitTiming.medianFilter = IfxAsclin_SamplesPerBit_three;             /* Set the number of samples per bit*/
    ascConfig.bitTiming.samplePointPosition = IfxAsclin_SamplePointPosition_8;    /* Set the first sample position    */

    /* ISR priorities and interrupt target */
    ascConfig.interrupt.txPriority = INTPRIO_UART0_TX;
    ascConfig.interrupt.rxPriority = INTPRIO_UART0_RX;
    ascConfig.interrupt.typeOfService = ISR_TOS_UART0;

    /* FIFO configuration */
    ascConfig.txBuffer = &g_asc0TxBuffer;
    ascConfig.txBufferSize = UART0_TX_BUFFER_SIZE;
    ascConfig.rxBuffer = &g_asc0RxBuffer;
    ascConfig.rxBufferSize = UART0_RX_BUFFER_SIZE;

    /* Pin configuration */
    const IfxAsclin_Asc_Pins pins =
    {
        NULL_PTR,       IfxPort_InputMode_pullUp,     /* CTS pin not used */
        &UART0_PIN_RX,  IfxPort_InputMode_pullUp,     /* RX pin           */
        NULL_PTR,       IfxPort_OutputMode_pushPull,  /* RTS pin not used */
        &UART0_PIN_TX,  IfxPort_OutputMode_pushPull,  /* TX pin           */
        IfxPort_PadDriver_cmosAutomotiveSpeed1
    };
    ascConfig.pins = &pins;

    IfxAsclin_Asc_initModule(&g_asc0Handle, &ascConfig); /* Initialize module with above parameters */
}

 other tips但是在使用串口的时候还是应该避免线缆过长、波特率过快的情况。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 英飞凌aurix tc1.61架构是一种高性能的汽车电子控制单元(ECU)。该架构采用高度集成的设计,集成了诸多功能和接口,用于实现对车辆系统的精确控制和管理。 首先,aurix tc1.61架构具有强大的处理能力和高效的数据处理能力。它搭载了一款高性能的处理器,能够实现快速的指令运算和数据处理,以满足车辆控制系统的高要求。同时,架构中还内置了丰富的存储器,用于存储程序代码和实时数据,确保系统的稳定性和可靠性。 其次,aurix tc1.61架构具备丰富的外部接口和通信能力。它集成了各种通信接口,如CAN总线、FlexRay、以太网等,以实现与其他车辆模块的高效通信和数据交换。此外,架构还支持多个传感器和执行器的接入,并能够实现对其进行精确控制和管理,以实现车辆高级驾驶辅助系统(ADAS)的功能。 再次,aurix tc1.61架构具备高度的安全性和可靠性。架构中集成了多重安全机制,如内存检查、故障检测、硬件监控等,以确保系统在运行过程中的稳定性和安全性。此外,架构还支持硬件加密和软件保护机制,以保护系统的代码和数据安全。 总的来说,英飞凌aurix tc1.61架构是一种高性能、高安全性的汽车电子控制单元架构。它具备强大的处理能力和丰富的外部接口,能够实现对车辆系统的精确控制和管理,以满足汽车领域对高级驾驶辅助系统的需求。 ### 回答2: 英飞凌AURIX TC1.61架构是一种高度可靠和安全的嵌入式系统架构,广泛应用于汽车电子和工业控制领域。该架构基于ARM Cortex-R5内核,并具有多个硬件安全功能。 AURIX TC1.61架构采用了三层内存保护机制,确保了系统的可靠性和安全性。第一层是主线程中的特权区,用于运行操作系统和驱动程序。第二层是中断线程,用于处理实时事件和中断请求。第三层则是应用程序代码区,用于运行用户自定义的应用程序。 AURIX TC1.61架构还支持数据保护和加密技术。它提供了多个硬件数据保护单元(DPU),用于保护核心内存和外部存储器。此外,该架构还提供了硬件加密引擎,可以对数据进行加密和解密操作,以提高系统的安全性。 该架构还具备高性能和低功耗的特点。它的核心内存集成了缓存和预取器,可以提高数据存取的速度,并减少功耗。此外,AURIX TC1.61架构还支持动态电压调节技术,可以根据处理器的工作负载动态调整供电电压,进一步减少功耗。 总之,英飞凌AURIX TC1.61架构是一种高可靠性、高安全性、高性能和低功耗的嵌入式系统架构。它在汽车电子和工业控制领域具有广泛的应用前景。 ### 回答3: 英飞凌AURIX TC1.61架构是一种用于汽车电子系统的嵌入式处理器架构。该架构采用了多核设计,具有高性能和强大的实时计算能力。 AURIX TC1.61架构由英飞凌公司开发,旨在满足汽车电子系统对高可靠性和实时计算的要求。该架构采用三核设计,包括两个高性能的TriCore™处理核心和一个Lockstep核心,以及丰富的外设接口和内存控制器。这些处理核心能够同时运行不同的应用程序,实现复杂的任务分配和并行处理,提高系统的效率和可靠性。 AURIX TC1.61架构具有强大的实时计算能力,适用于处理复杂的汽车控制算法和数据处理任务。该架构支持高速通信接口,如CAN和Ethernet,用于与其他汽车子系统进行实时通信。此外,该架构还具备硬实时性能,以确保数据的准确处理和实时响应。 AURIX TC1.61架构还具有高度的可靠性和安全性。它采用了自动纠错编码和故障诊断机制,以及专门的防护措施,以防止外部攻击和内部故障对系统的影响。这些特性使得AURIX TC1.61成为汽车电子系统的理想选择,能够提供可靠的性能和安全的数据处理。 总而言之,英飞凌AURIX TC1.61架构是一种适用于汽车电子系统的嵌入式处理器架构,具有高性能、强大的实时计算能力、高度可靠性和安全性的特点。它能够满足汽车电子系统对复杂算法的处理和实时通信的需求,是汽车领域的先进技术。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Huskiey

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值