F103和F407通过CAN总线通讯,在UCOSIII中,测试得到的通讯速度才28KByte,不知道是什么问题?求助!
F103 CAN初始化代码
[mw_shl_code=c,true]//CAN初始化,波特率500Kbps
CAN_Mode_Init(CAN_SJW_1tq, CAN_BS2_8tq, CAN_BS1_9tq, 4, 0);
[/mw_shl_code]
F103任务代码
[mw_shl_code=c,true]void can1_tx(void)
{
OS_ERR err;
CanTxMsg tx;
u8 count = 1, i = 0;
u32 eid;
CAN_IdTypeDef id;
id.SourId = CAN_ID;
id.PrioId = 1;
id.ArguId = 3;
id.DestId = 1;
eid = CAN_ID_Build(&id);
while (1)
{
tx.IDE = CAN_Id_Extended;
tx.ExtId = eid;
tx.DLC = 8;
for (i = 0; i < tx.DLC; i++)
{
tx.Data = count;
count++;
}
tx.RTR = CAN_RTR_Data;
if (CAN_TxStatus_NoMailBox != CAN_Transmit(CAN1, &tx))
OSFlagPost(&RT_FLAG, TX_FLAG, (OS_OPT)OS_OPT_POST_FLAG_SET, &err);
}
}[/mw_shl_code]
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
如果是的话,差不多是这个速度了
500K/125*8=32K
UCOS系统里没有什么其他高级任务影响CAN通讯任务。CAN节点通讯距离40cm。
发送方太懒?
[mw_shl_code=c,true]#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "lcd.h"
#include "key.h"
#include "can.h"
int main(void)
{
u32 temp;
u8 key;
u32 cnt=0;
u8 canbuf[8];
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2
delay_init(168); //初始化延时函数
uart_init(115200); //初始化串口波特率为115200
LED_Init(); //初始化LED
LCD_Init(); //LCD初始化
CAN1_Mode_Init(CAN_SJW_1tq,CAN_BS2_6tq,CAN_BS1_7tq,6,0);//CAN初始化环回模式,波特率500Kbps
POINT_COLOR=RED;//设置字体为红 {MOD}
LCD_ShowString(30,50,200,16,16,"Explorer STM32F4");
LCD_ShowString(30,70,200,16,16,"CAN TEST");
LCD_ShowString(30,90,200,16,16,"ATOM@ALIENTEK");
LCD_ShowString(30,110,200,16,16,"2014/5/7");
LCD_ShowString(30,130,200,16,16,"LoopBack Mode");
LCD_ShowString(30,150,200,16,16,"KEY0:Send WK_UP:Mode");//显示提示信息
POINT_COLOR=BLUE;//设置字体为蓝 {MOD}
LCD_ShowString(30,170,200,16,16,"Count:"); //显示当前计数值
LCD_ShowString(30,190,200,16,16,"Send Data:"); //提示发送的数据
LCD_ShowString(30,250,200,16,16,"Receive Data:"); //提示接收到的数据
while(1)
{
key=CAN1_Receive_Msg(canbuf);
if(key)//接收到有数据
{
cnt = cnt + key;
}
if(cnt >= 1024 * 1024)
{
LCD_ShowString(30,270,200,16,16,"New One MByte"); //提示接收到的数据
delay_ms(10000);
}
}
}
[/mw_shl_code]
一周热门 更多>