关于STM32CAN接口问题

happepipi   2007-8-8 13:26 楼主
看到论坛里面的"STM3210B-EVAL参考线路图",CAN总线和USB都使用了,但是手册上这两个接口IO是共用的,如何实现?如图,将CAN接到了PD0,PD1
C:C.JPG

回复评论 (17)

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

参考手册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


点赞  2007-8-8 13:44

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

                                  
点赞  2007-8-8 15:28

STM32 CAN和USB

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

真的??

                                 正准备用它做个CAN-usb的东西呢,
点赞  2007-8-10 13:41

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

                                 那就不好用了
点赞  2007-8-10 13:59

CAN用这块区域干什么呢?

接收和发送缓冲区?

看ST的DEMO这块区域好像全给了USB。 
点赞  2007-8-13 10:19

STM32 CAN和USB共享的RAM

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

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

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



点赞  2007-8-14 13:14

关于 STM32 CAN接口问题

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

36脚的STM32?

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

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

                                  
点赞  2007-8-21 11:19

STM32 芯片


  
  STM32F10XX 48PIN,100PIN已经到了一批,如果需要购买或者是申请样片可以联系我们。www.mxchip.com
点赞  2007-8-21 18:07

不知道64PIN的可以REMAP吗?

上面说到: 2. Remap available only on 100-pin package
64脚的没看到有提起。
点赞  2007-8-25 07:36

不知道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"。
点赞  2007-8-27 10:53

48PIN也應該能remap

                                 看datasheet上,48PIN應該也能remap,但CAN和USB使用共用的RAM這個絕對是個設計上的失誤,大部分的工業設備及系統,都需要與PC連接進行組態,配置,監控等,之前一直使用RS232,但現在越來越多的電腦不帶RS232,且速度也慢,對於快速數據采集來說,USB更是理想的選擇,所以越來越多的工業設備要使用USB來取代RS232,因此USB接口運用於工業產品上是會越來越普遍的,因此強烈建議ST將STM32的USB和CAN的RAM分開,要省也不用省這麼一點點。
点赞  2008-2-11 17:18

怎么数据手册上写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++;
  }
}
 
点赞  2008-7-13 23:08

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对共享缓冲区的使用,没有明确的说明,需要通过实验来确定。
点赞  2008-7-13 23:14
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复