金牌会员
- 积分
- 1393
- 威望
- 690
- 贡献
- 439
- 兑换币
- 386
- 注册时间
- 2013-3-6
- 在线时间
- 132 小时
- 毕业学校
- 北京师范大学珠海分校
|
本帖最后由 尕玍紿 于 2014-5-31 14:20 编辑
lf1286 发表于 2014-5-27 18:09
上拉是可以的,也可以用转换芯片来实现。
我之前弄的是:STM32+MCP2510+A82C250 与 STM32+MCP2510+A82C250 进行CAN通讯,已经调通了。现在在弄:K60 + A82C250 与 STM32+MCP2510+A82C250,将K60的CAN输出上拉后还是没能成功,不知道是什么原因。
现在有一个疑问:
不管什么协议的通讯,双方的波特率设置要一样这是必须的,但是CAN这里的波特率设置在细节上面我有一个问题:
CAN的波特率设置是基于“最小时间分量TQ”对不同段位的位时间长度进行配置从而得到了一个波特率的。我现在的情况是通讯双方的最终波特率是一样的,都设置为125Kbps了;但是他们在细节上的配置是不一致的(即TQ不等、不同段位的位时间长度也不尽相同),这样的配置行得通吗?
以下是具体配置:
STM32+MCP2510+A82C250的波特率配置:
write_mcp2510_oneByte(CNF1,0x07); // 8分频:TQ= 2 * 1/(16/8) = 1us
write_mcp2510_oneByte(CNF2,0x90); // Pseg=1TQ,PS1=3TQ
write_mcp2510_oneByte(CNF3,0x02); // PS2=3TQ
//时钟源Fosc=16MHz ; 预分频数:BRP=7(8分频) ; 即:最小时间分子TQ = 2*(1/Fosc)*(BRP+1);
//(再同步补偿时间长度)Sync Seg=1TQ ; (传播段的位时间长度) Prop Seg=1TQ ;
//(相位段1的位时间长度)Phase Seg1=3TQ ; (相位段2的位时间长度)Phase Seg2=3TQ ;
//所以波特率就为 Bus speed = 1 / ((Total of TQ) * TQ) = 125Kbps
K60+A82C250的波特率配置:
CAN_CTRL1_REG(CANBaseAdd) |= CAN_CTRL1_CLKSRC_MASK; //选择时钟源:外设时钟,由PLL分频得到:48MHz
CAN_CTRL1_REG(CANBaseAdd) = ( 0 | CAN_CTRL1_PROPSEG(1) /*设置传播段位时间长度=2TQ*/
| CAN_CTRL1_RJW(1) /*设置再同步补偿时间长度=2TQ*/
| CAN_CTRL1_PSEG1(3) /*设置相位段1位时间长度=4TQ*/
| CAN_CTRL1_PSEG2(3) /*设置相位段2位时间长度=4TQ*/
| CAN_CTRL1_PRESDIV(31) ); /*32分频:TQ=1/(48/32)=0.67us*/
//所以波特率就为 Bus speed = 48M / 32分频 /12个TQ = 125Kbps
|
|