OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 11998|回复: 9

求大神告知,有关STM32F429的CAN时钟是多少,从哪里看

[复制链接]

12

主题

43

帖子

0

精华

初级会员

Rank: 2

积分
148
金钱
148
注册时间
2014-10-28
在线时间
8 小时
发表于 2015-3-11 11:14:54 | 显示全部楼层 |阅读模式
5金钱
求大神告知,STM32F429 CAN的时钟具体是多少?从哪里获悉?由下图知道,tq=1/CAN时钟
由RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1, ENABLE);知CAN1在APB1时钟线上,那APB1的时钟具体是多少M?
另外,CAN1的时钟可以通过扎波形获悉吗?波特率可以扎出来吗?从哪里扎?
谢谢!


最佳答案

查看完整内容[请看2#楼]

APB1一般是低速时钟,等于主时钟的1/4. 比如你主时钟是180M,那么APB1就是45M.
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2015-3-11 11:14:55 | 显示全部楼层
APB1一般是低速时钟,等于主时钟的1/4.
比如你主时钟是180M,那么APB1就是45M.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

28

主题

1489

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1656
金钱
1656
注册时间
2013-7-24
在线时间
1 小时
发表于 2015-3-11 12:01:59 | 显示全部楼层
RCC章,有个时钟树。
于20150522停用该账号:http://www.microstar.club
回复

使用道具 举报

12

主题

43

帖子

0

精华

初级会员

Rank: 2

积分
148
金钱
148
注册时间
2014-10-28
在线时间
8 小时
 楼主| 发表于 2015-3-12 08:48:16 | 显示全部楼层
回复【3楼】正点原子:
---------------------------------
u8 CAN1_Mode_Init(u8 tsjw,u8 tbs2,u8 tbs1,u16 brp,u8 mode)
{

  GPIO_InitTypeDef GPIO_InitStructure; 
 CAN_InitTypeDef        CAN_InitStructure;
  CAN_FilterInitTypeDef  CAN_FilterInitStructure;
    NVIC_InitTypeDef  NVIC_InitStructure;
    //?????à???±??
 RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);//????PORTA?±??                    

  RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1, ENABLE);//????CAN1?±?? 

    //??????GPIO
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8| GPIO_Pin_9;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;//????????
    GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//???ì????
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHz
    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//????
    GPIO_Init(GPIOB, &GPIO_InitStructure);//??????PA11,PA12

 //????????????????
 GPIO_PinAFConfig(GPIOB,GPIO_PinSource8,GPIO_AF_CAN1); //GPIOA11??????CAN1
 GPIO_PinAFConfig(GPIOB,GPIO_PinSource9,GPIO_AF_CAN1); //GPIOA12??????CAN1
 
  //CAN?????è??
    CAN_InitStructure.CAN_TTCM=DISABLE; //·??±????·??¨??????   
  CAN_InitStructure.CAN_ABOM=DISABLE; //?í??×??????????í  
  CAN_InitStructure.CAN_AWUM=DISABLE;//?????????¨???í??????(????CAN->MCR??SLEEP??)
  CAN_InitStructure.CAN_NART=ENABLE; //????±¨??×??????? 
  CAN_InitStructure.CAN_RFLM=DISABLE; //±¨???????¨,????????????  
  CAN_InitStructure.CAN_TXFP=DISABLE; //????????±¨??±ê??·????¨ 
  CAN_InitStructure.CAN_Mode= mode; //?????è?? 
  CAN_InitStructure.CAN_SJW=tsjw; //?????????????í??(Tsjw)??tsjw+1???±?????? CAN_SJW_1tq~CAN_SJW_4tq
  CAN_InitStructure.CAN_BS1=tbs1; //Tbs1·??§CAN_BS1_1tq ~CAN_BS1_16tq
  CAN_InitStructure.CAN_BS2=tbs2;//Tbs2·??§CAN_BS2_1tq ~ CAN_BS2_8tq
  CAN_InitStructure.CAN_Prescaler=brp;  //·???????(Fdiv)??brp+1 
  CAN_Init(CAN1, &CAN_InitStructure);   // ??????CAN1 
    
//?????????÷
   CAN_FilterInitStructure.CAN_FilterNumber=0;  //?????÷0
  CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdMask; 
  CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_32bit; //32?? 
  CAN_FilterInitStructure.CAN_FilterIdHigh=0x0000;////32??ID
  CAN_FilterInitStructure.CAN_FilterIdLow=0x0000;
  CAN_FilterInitStructure.CAN_FilterMaskIdHigh=0x0000;//32??MASK
  CAN_FilterInitStructure.CAN_FilterMaskIdLow=0x0000;
    CAN_FilterInitStructure.CAN_FilterFIFOAssignment=CAN_Filter_FIFO0;//?????÷0??????FIFO0
  CAN_FilterInitStructure.CAN_FilterActivation=ENABLE; //?¤???????÷0
  CAN_FilterInit(&CAN_FilterInitStructure);//???¨?÷??????


 CAN_ITConfig(CAN1,CAN_IT_FMP0,ENABLE);//FIFO0???????????????í.    
  
  NVIC_InitStructure.NVIC_IRQChannel = CAN1_RX0_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;     // ?÷????????1
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;            // ??????????0
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);
}   
调用为CAN1_Mode_Init(CAN_SJW_1tq,CAN_BS2_4tq,CAN_BS1_6tq,2,CAN_Mode_Normal);?
配置程序如上,这样配扎TX脚波形为下图,大概1M,反推出CAN时钟为1*(1+4+6)*(2+1)=33M
?不是您说的45M表示非常迷茫,需要大神解答。
?也许您要说,是否是再看tsjw要加1,计算的时候已经按加1算了
?如下
?#define CAN_SJW_1tq                 ((uint8_t)0x00)  /*!< 1 time quantum */
#define CAN_SJW_2tq                 ((uint8_t)0x01)  /*!< 2 time quantum */
#define CAN_SJW_3tq                 ((uint8_t)0x02)  /*!< 3 time quantum */
#define CAN_SJW_4tq                 ((uint8_t)0x03)  /*!< 4 time quantum */
?所以,较郁闷。求解答。
?另,CAN2用与CAN1相同的配置,但是不能通信,真是一件非常伤心的事。同求大神解答。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2015-3-12 23:12:20 | 显示全部楼层
回复【4楼】墨染卿卿:
---------------------------------
CAN2的时钟和CAN1一样么?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

12

主题

43

帖子

0

精华

初级会员

Rank: 2

积分
148
金钱
148
注册时间
2014-10-28
在线时间
8 小时
 楼主| 发表于 2015-3-13 14:19:38 | 显示全部楼层
回复【5楼】正点原子:
---------------------------------
CAN2和CAN1的时钟一样都是APB1提供的。
之前问您的问题得到了解决,CAN1_Mode_Init(CAN_SJW_1tq,CAN_BS2_4tq,CAN_BS1_6tq,4,CAN_Mode_Normal);
(1+4+6)*4=44M,配出来的正好是1M的波特率,只是不知道,为什么这里的分频系数没有按加1算。
求原子哥解答。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2015-3-13 22:47:57 | 显示全部楼层
回复【6楼】墨染卿卿:
---------------------------------
这个和 参考手册的公式不符么?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

12

主题

43

帖子

0

精华

初级会员

Rank: 2

积分
148
金钱
148
注册时间
2014-10-28
在线时间
8 小时
 楼主| 发表于 2015-3-14 16:41:27 | 显示全部楼层


CAN1_Mode_Init(CAN_SJW_1tq,CAN_BS2_4tq,CAN_BS1_6tq,4,CAN_Mode_Normal); 
BRP的赋值是4,照理说,写入寄存器的值是4,计算的时候要按5计算。我已经按照以上的配置,配出1M的CAN波特率,即1bit位的时间为1us,
根据这个反推
如果分频系数按4算:(1+4+6)*4=44M
如果分频系数按5算:(1+4+6)*5=55M
而STM32F429sysclk为180M,APB1最大为45M,因此,分频系数没有加1 
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2015-3-14 23:02:51 | 显示全部楼层
回复【8楼】墨染卿卿:
---------------------------------
这个问题,你得问问ST了,呵呵。看看是不是数据手册有误。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2015-9-17
在线时间
1 小时
发表于 2015-11-23 17:12:10 | 显示全部楼层
/* Set the bit timing register */
    CANx->BTR = (uint32_t)((uint32_t)CAN_InitStruct->CAN_Mode << 30) | \
                ((uint32_t)CAN_InitStruct->CAN_SJW << 24) | \
                ((uint32_t)CAN_InitStruct->CAN_BS1 << 16) | \
                ((uint32_t)CAN_InitStruct->CAN_BS2 << 20) | \
               ((uint32_t)CAN_InitStruct->CAN_Prescaler - 1);

是不是因为这个,在写BTR寄存器的时候实际写的是CAN_Prescaler - 1
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-25 15:10

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表