This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] ARM Cortex-R4F RM48x MCU 波特率问题

Guru**** 2022830 points
Other Parts Discussed in Thread: HALCOGEN
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/742627/arm-cortex-r4f-rm48x-mcu-baud-question

主题中讨论的其他器件:HALCOGEN

你好


使用 Hercules MCU 进行产品开发


型号 ARM Cortex-R4F RM48


当波特率设置为1200、2400和4800时找到


无法接收


我想问如何解决这个问题。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Willy、

    SCI 使用 BRSR 寄存器的24位整数预分频器 P 值来选择所需的波特率。 如果 VCLK 为80MHz、1200/2400/4800波特率的 P 值为4168/2082/1041。

    波特率= VCLK /((P+1)*16)

    请仔细检查 PC 端的帧格式
    起始位:1.
    2.数据位:1至8
    停止位:0至2
    奇偶校验:0或1

    我们不支持硬件流控制。

    BTW、其他波特率是否起作用:9600、115200等?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你好

    当 VCLK=110MHz 时
    我想将波特率设置为4800/2400/1200
    P 值应该设置多少?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Willy、

    如果 VCLK 为110MHz、

    对于4800波特率:P=110*10^6/(16*4800)-1 = 1431

    对于115200:P=110*10^6/(16*115200)-1 = 59

    对于1200:P=110*10^6/(16*1200)-1 = 5728

    TI 有一个代码生成工具(HALCoGen)、可用于为 TMS570/RMX 器件生成更低级的驱动程序。 下面是下载部分:

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    e2e.ti.com/.../2061.HALCoGen04.05.02-selftest.zipHelloQJ Wang

    我使用的 HalCoGen 版本是4.05.02。

    但是、当我想使用4800波特率并且将 P 值设置为1431时、我只能传输数据、不能接收数据。

    附加文件是我的 HalCoGen 项目文件。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Willy、

    请启用 RX 中断并写入 sciNotification()以读取 RXed 数据:

    1.置位 RX 中断:检查 SCI/LIN 全局下的 RX 中断
    2.启用 SCI 中断:检查 VIM 通道13 (高电平)和通道27 (低电平)
    3.在主程序中()

    unsigned char rxData[8];
    void main(){
    _enable_IRQ ();
    sciInit();

    /**-将 SCI 配置为接收8个字节的命令信息*/
    sciReceive (scilinREG、8、rxData);


    添加 sciNotif阳 离子():

    /**@fn void sciNotification (unsigned flags)*/
    void sciNotification (sciBASE-t * sci、无符号标志)

    /**-准备接收下一个命令*/
    sciReceive (scilinREG、8、rxData);

    /**将 rxData 发送回终端*/
    sciSend (scilinREG、8、rxData);
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 QJ Wang

    我在下面使用了这个子函数、我使用的 HalCoGen 版本为4.05.02。

    void sciSetBudrate (sciBASE-t * sci、uint32波特)

    float64 vclk = 110.000 * 1000000.0;
    uint32 f=((sci->GCR1 & 2U)=2U)? 16U:1U;
    uint32温度;
    float64 temp2;

    temp =(f*(baud));
    TEMP2 =((vclk)/((float64) temp))-1U;
    TEMP2 = floor (temp2 + 0.5);/*取整至最接近的整数*/
    SCI->BRS =(uint32)((uint32) temp2 & 0x00FFFFFFU);

    此函数适用于 TX,波特率115200/57600/38400.... 9600/4800/2400/1200
    但是对于 RX 115200/57600/38400.... 9600 OK,4800/2400/1200不正常

    谢谢
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Willy、

    4800/2400/1200没有收到任何信息? 或者您收到了一些问题、但它们不正确?
    您可以与我分享您的代码吗? 谢谢
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 QJ Wang

    波特率设置为4800/200/1200时、我不会收到任何内容。
    代码如下:

    void sciSetBudrate (sciBASE-t * sci、uint32波特)

    float64 vclk = 110.000 * 1000000.0;
    uint32 f=((sci->GCR1 & 2U)=2U)? 16U:1U;
    uint32温度;
    float64 temp2;

    temp =(f*(baud));
    TEMP2 =((vclk)/((float64) temp))-1U;
    TEMP2 = floor (temp2 + 0.5);
    SCI->BRS =(uint32)((uint32) temp2 & 0x00FFFFFFU);

    我尝试另一种方法
    void sciSetBudrate (sciBASE-t * sci、uint32波特)

    /**-设置波特率*/
    scilinREG->BRS = 1431;//预分频1431 = 4800 PBS*/

    但波特率设置为4800时无法接收相同的数据

    谢谢

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Willy、

    代码对我来说很好。 请使用示波器探测 RX 信号、以确保发送器发送数据。 主机向 MCU 发送数据后、FTVCT0或 INVECT1置位还是 FLG 寄存器中的 RXRDY 位置位? SCIFLG 的价值是什么?