研究
STM32的双can有段时间了 一直有个问题一直没搞定,我初始化设置成500K,当 can总线上为500K时程序不会自动配置成相同的波特率.当总线上为125K是就会自动配置成125K 请大神们看看要怎么弄,
以下是我的部分代码:
#include "stm32f10x.h"
#include "led.h"
#include "delay.h"
#include "sys.h"
#include "can.h"
int main(void)
{
Bsp_Init();
while(1)
{
c1Sendc2Data();
c2Sendc1Data();
if (CAN_MessagePending(CAN1,CAN_FIFO0)==0)
检测有没有报文 没有就配置成125K
{
CAN_Mode_Init(CAN_SJW_1tq,CAN_BS1_16tq,CAN_BS2_1tq,8,CAN_Mode_Normal);
Delay(1);
}
IWDG_ReloadCounter();
}
}
void Bsp_Init(void)
{
Delay_Init();
Delay(3); //ÑÓʱ3Ãë µÈ´ýµçÔ´ÉϵçÎȶ¨ºó µ¥Æ¬»úÔÙÕý³£¹¤×÷¡£
LED_Init();
BEEP_Init();
KEY_Init();
SFQpw=1;
LED=1;
BEEP=1;
SFQout=1;
SFQin=1;
// USART_Configura
tion();
CAN_Mode_Init(CAN_SJW_1tq,CAN_BS1_16tq,CAN_BS2_1tq,4,CAN_Mode_Normal);
这里初始化设置can波特率设为500K
// NVIC_Configuration();
// CAN_Filter_config();
// IWDG ...
IWDG_Configuration();
}
1> 首先你得知道的所使用到的CAN控制器外设挂载的APB总线频率多少?APB1/APB2?多少M?? 30M?
2> CAN预分频系数,即CAN_Prescaler值多少?假如是4,那么到CAN控制器外设的实际时钟频率则为30M/4=7.5M=7500 000bps
3> 再看CAN_BS1,CAN_BS2参数,假如BS1=6,BS2=8,那么CAN最终的波特率为7.5M/(6+8+1)=7500000/15=500000bps=500Kbps
就是这么来的
楼主代码参数BS1=16,BS2=1,SJW=1,但是实际到达CAN控制的时钟频率多少并不知道,。。因此我也无法判断你是否设置正确。SJW一般固定为1。
一周热门 更多>