打印

关于 STM32 CAN接口问题

[复制链接]
6949|16
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zb214|  楼主 | 2007-8-8 13:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
看到论坛里面的"STM3210B-EVAL参考线路图",CAN总线和USB都使用了,但是手册上这两个接口IO是共用的,如何实现?如图,将CAN接到了PD0,PD1
C:C.JPG
沙发
grant_jx| | 2007-8-8 13:44 | 只看该作者

看来你和我一样,看见数据手册比较激动,没看参考手册

参考手册87页:5.3.2
The BXCAN signal can be mapped on Port A, Port B or Port E as shown in Table 13.

Table 13. BXCAN alternate function remapping
Alternate Function    CAN_REMAP[1:0] =“00”   CAN_REMAP[1:0] ="10"(1)     CAN_REMAP[1:0] ="11"(2)

CANRX       PA11      PB8      PD0
          
CANTX       PA12      PB9      PD1



1. Remap not available on 36-pin package
2. Remap available only on 100-pin package


使用特权

评论回复
板凳
zb214|  楼主 | 2007-8-8 15:28 | 只看该作者

看来得在看看这几百页的手册,非常感谢!

使用特权

评论回复
地板
ijk| | 2007-8-9 13:01 | 只看该作者

STM32 CAN和USB

  还需要注意的是,STM32的 CAN和USB有可能不能同时使用的,因为它们共享了专门的1块RAM区域:0x4000 6000 ~ 0x4000 6400。
  这点可以参考STM32F103 Data sheet Rev 2的第22页

使用特权

评论回复
5
yxs1977| | 2007-8-10 13:41 | 只看该作者

真的??

正准备用它做个CAN-usb的东西呢,

使用特权

评论回复
6
starm| | 2007-8-10 13:59 | 只看该作者

共享了专门的1块RAM区域:0x4000 6000 ~ 0x4000 6400

那就不好用了

使用特权

评论回复
7
yxs1977| | 2007-8-13 10:19 | 只看该作者

CAN用这块区域干什么呢?

接收和发送缓冲区?

看ST的DEMO这块区域好像全给了USB。 

使用特权

评论回复
8
ijk| | 2007-8-13 11:41 | 只看该作者

STM32 CAN和USB共享的RAM

  STM32 CAN和USB共享了RAM区域:0x4000 6000 ~ 0x4000 6400,当然都是用作缓冲区。但我想这并不意味着CAN和USB绝对不能同时使用,在某些应用中,如果缓冲区不需要太大,那么CAN和USB有可能同时可用。

使用特权

评论回复
9
yxs1977| | 2007-8-14 13:14 | 只看该作者

这共享的0x400应该是1Kbit吧

怎么数据手册上写shared 512BYTE 呢?



使用特权

评论回复
10
sms_zh| | 2007-8-17 13:00 | 只看该作者

关于 STM32 CAN接口问题

请教一下,
1. Remap not available on 36-pin package
手册里没提到过36脚的,有货么,48脚的能不能map阿

使用特权

评论回复
11
ijk| | 2007-8-17 14:26 | 只看该作者

36脚的STM32?

  36脚的STM32,或许有? 但既然手册里没提到过36脚的,那么最好认为没这种货-除非你有很大的订货量(每年几百万片?)。
  其实,只要你有大量的订单,即使你想做32脚的芯片,ST(或其它大的供应商)都原意帮你做。问题是,你没有那么大的订单...

使用特权

评论回复
12
yxs1977| | 2007-8-21 11:19 | 只看该作者

48脚的能很容易买到就不错了,呵呵

使用特权

评论回复
13
wjc3k| | 2007-8-25 07:36 | 只看该作者

不知道64PIN的可以REMAP吗?

上面说到: 2. Remap available only on 100-pin package
64脚的没看到有提起。

使用特权

评论回复
14
ijk| | 2007-8-27 10:53 | 只看该作者

不知道64PIN的可以REMAP吗?

上面写到:
Table 13. BXCAN alternate function remapping
Alternate Function    CAN_REMAP[1:0] =“00”   CAN_REMAP[1:0] ="10"(1)

1. Remap not available on 36-pin package

那么言下之意,64PIN的支持CAN_REMAP[1:0] ="10"。

使用特权

评论回复
15
starm| | 2008-7-13 23:08 | 只看该作者

怎么数据手册上写shared 512BYTE 呢?

占用了 1K 空间而已。 每一个Word,只有低 HalfWord 有用。

参考USB的

void UserToPMABufferCopy(u8 *pbUsrBuf, u16 wPMABufAddr, u16 wNBytes)
{
  u32 n = (wNBytes + 1) >> 1;   /* n = (wNBytes + 1) / 2 */
  u32 i, temp1, temp2;

  u16 *pdwVal;        HalfWord 指针

  pdwVal = (u16 *)(wPMABufAddr * 2 + PMAAddr);
  for (i = n; i != 0; i--)
  {
    temp1 = (u16) * pbUsrBuf;
    pbUsrBuf++;
    temp2 = temp1 | (u16) * pbUsrBuf << 8;
    *pdwVal++ = temp2;

    pdwVal++;        跳过 HalfWord

    pbUsrBuf++;
  }
}
 

使用特权

评论回复
16
starm| | 2008-7-13 23:14 | 只看该作者

CAN对共享缓冲区的使用,没有明确的说明

USB对缓冲区的分配可以灵活设置

#define BTABLE_ADDRESS xxxx

然后可以定义端点缓冲区地址

/* EP0  */
/* rx/tx buffer base address */
#define ENDP0_RXADDR        (BTABLE_ADDRESS+BTABLE_SIZE)
#define ENDP0_TXADDR        (ENDP0_RXADDR+BULK_MAX_PACKET_SIZE)

/* EP1  */
/* tx buffer base address */
#define ENDP1_TXADDR        (ENDP0_TXADDR+BULK_MAX_PACKET_SIZE)

/* EP2  */
/* Rx buffer base address */
#define ENDP2_RXADDR        (ENDP1_TXADDR+BULK_MAX_PACKET_SIZE)

但是CAN对共享缓冲区的使用,没有明确的说明,需要通过实验来确定。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

23

帖子

0

粉丝