主题中讨论的其他器件: TM4C123
大家好、TM4C 论坛、
目前、我正在为 CAN 应用开发 TM4C123GH6PM 微控制器。 我正在从 PCAN 发送/接收数据。
我已经使用 CANBitRateSet()驱动程序函数来设置50MHz 时钟的波特率。 据观察、当波特率配置为100k、125k、250k 和500kbps 时、它可以平稳工作。 但是、当波特率增加到800k 或1Mbps 时、PCAN 显示50MHz SYSCLK 的 BUSHEAVY/BUSOFF 条件。
然后,我尝试使用 CANBitTimingSet()来设置位速率,而不是 CANBitRateSet()函数,该位速率转而使用 tCANBitClkParms 结构,如下所示。 CAN 时钟设置为50MHz。 在此配置中、还观察到、当位速率高于500kbps 时、PCAN 显示 BUSHEAVY/BUSOFF 条件。
tCANBitClkParms CANBitClkSettings[]=
{
{16、8、4、20}、 // CANBAUD_100K 在50MHz 时钟下正常。
{13、2、4、25}、 // CANBAUD_125K 在50MHz 时钟下正常。
{6、1、2、25}、 // CANBAUD_250K 在50MHz 时钟下正常。
{16、3、2、5}、 // CANBAUD_500K 在50MHz 时钟下正常。
{8、1、1、5} // CANBAUD_1M 在50MHz 时钟正常。
};
tCANBitClkParms 数据结构包含用于计算比特率的 SyncPropPhase1、Phase2、SJW、BRP 的值。
typedef 结构
{
uint32_t ui32SyncPropPhase1Seg;
uint32_t ui32Phase2Seg;
uint32_t ui32SJW;
uint32_t ui32QuantumPrescaler;
}
tCANBitClkParms;
我使用的是 SN65HVD1040D CAN 收发器和 8MHz XTAL。
请任何人帮助我、如何计算上述数据结构中显示的这些值、或如何考虑参数以获取这些值以实现相应的比特率。
提前感谢。