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.

关于LIN模块时钟

Part Number: F280025


在参考手册TRM(spruin7a) 24.2.1.3 SCI Baud Rate 章节介绍波特率计算公式时提到:

The SCI/LIN has an internally generated serial clock determined by the peripheral VCLK and the prescalers P and M in this register

这个外设时钟VCLK应该就是在前面3.7节时钟树中讲到的PERx.SYSCLK吧,这个外设时钟有从SYSCLK分频吗?时钟树上没有画出来,

但是在这里表24-1的标题里面怎么又提到 “100MHz Device, Lin Module input clock =50MHz ” ,这个50MHz怎么来的?

在板上100MHz系统,按9600波特率配置时,MCU发送数据时,串口工具需要配置19200波特率才能正确接收。

另外,LIN寄存器在CCS V12中的显示也有问题,如下图BRSR跟配置值不同(代码中PSH设置值=0,寄存器显示值0x44;M值=8,寄存器显示1)。

还有SCIGCR1这个寄存器也是类似,代码中TXENA和RXENA都配置为1了,

但是在寄存器中显示都是0:

这是怎么回事呢?

  • 有人帮忙看下吗?

  • /**
     * @brief 计算Buadrate对应寄存器值,默认19200
     * 
     * @param baudrate 	: 波特率
     */
    void MonitorLina_SetBaudrate(Uint16 baudrate)
    {
    	//Set baudrate
    	//VCLK=SYSCLKOUT
    	//Baud=VCLK/[(P+1)*16+M]
    	switch (baudrate)
    	{
    		case BAUDRATE_9600:
    		{
    			LinaRegs.BRSR.bit.SCI_LIN_PSH = 0;
    			LinaRegs.BRSR.bit.SCI_LIN_PSL = 650;
    			LinaRegs.BRSR.bit.M =5;
    			break;
    		}
    		case BAUDRATE_38400:
    		{
    			LinaRegs.BRSR.bit.SCI_LIN_PSH = 0;
    			LinaRegs.BRSR.bit.SCI_LIN_PSL = 161;
    			LinaRegs.BRSR.bit.M =12;
    			break;
    		}
    		case BAUDRATE_57600:
    		{
    			LinaRegs.BRSR.bit.SCI_LIN_PSH = 0;
    			LinaRegs.BRSR.bit.SCI_LIN_PSL = 107;
    			LinaRegs.BRSR.bit.M =6;
    			break;
    		}
    		case BAUDRATE_115200:
    		{
    			LinaRegs.BRSR.bit.SCI_LIN_PSH = 0;
    			LinaRegs.BRSR.bit.SCI_LIN_PSL = 53;
    			LinaRegs.BRSR.bit.M =4;
    			break;
    		}
    		case BAUDRATE_19200:
    		default:
    		{
    			LinaRegs.BRSR.bit.SCI_LIN_PSH = 0;
    			LinaRegs.BRSR.bit.SCI_LIN_PSL = 324;
    			LinaRegs.BRSR.bit.M =8;
    			break;
    		}
    	}
    }

  • 没有直接回复提出的问题,2个核心点:(1)Table24-1的标题里面提到 “100MHz Device, Lin Module input clock =50MHz ” ,这个50MHz怎么来的?这里是不是写错了。实际测试如你波特率代码和截图所示,LIN等外设的输入时钟等于SYSCLK,即100MHz (2)在CCS里面读取的相关寄存器的内容与实际设置不符,是显示bug?

  • 可能是Expression的刷新没开。