我在做CAN的通信实验,有一块F4的板子和一块F1的板子。我的目标是两块板子都往CAN总线上发信息,且两块板子都能接收并显示。问题就出在这儿了,F4的板子向F1发信息没问题,F1向F4发信息也没问题,一切正常,但两块板子都往总线发信息就会接受失败.....尝试了许多办法仍然不行,求大神帮助。下面简单贴一下主函数。两块板子的程序几乎完全一样。初始化程序就不贴了,直接照搬的原子例程
#include "led.h"
#include "delay.h"
#include "key.h"
#include "sys.h"
#include "lcd.h"
#include "usart.h"
#include "can.h"
int main(void)
{
u8 key;
u8 i=0;
u8 res;
u8 canbuf[8];
delay_init();
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
uart_init(115200);
LED_Init();
LCD_Init();
KEY_Init();
CAN_Mode_Init(CAN_SJW_1tq,CAN_BS2_8tq,CAN_BS1_9tq,8,CAN_Mode_Normal); //波特率250kbps
while(1)
{
canbuf[0]=1;
canbuf[2]=0;
canbuf[3]=1;
canbuf[4]=0;
canbuf[5]=1;
canbuf[1]=0;
canbuf[6]=1;
canbuf[7]=0;
res=Can_Send_Msg(canbuf,8);//发送数据
delay_ms(100);
key=Can_Receive_Msg(canbuf);//接受数据。如果接收到数据该函数会返回1值,否则返回0
if(key)
{
LCD_Fill(60,270,130,310,WHITE); //清空显示
for(i=0;i<key;i++)
{
if(i<4)LCD_ShowxNum(60+i*32,270,canbuf[i],3,16,0X80); //显示数据
else LCD_ShowxNum(60+(i-4)*32,290,canbuf[i],3,16,0X80);
}
}
}
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>