stm32实验CAN收发实验

更新时间:2024-05-11 23:18:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

#include \#include \#include \#include \#include \#include \#include \#include \#include \#include \#include \#include \#include \ #include \#include \#include \#include \#include \

#include \ #include \

#include \ #include \

int main(void) {

u8 key; u8 i=0,t=0; u8 cnt=0; u8 canbuf[8]; u8 res;

u8 mode=1;//CAN工作模式;0,普通模式;1,环回模式

Stm32_Clock_Init(9); //系统时钟设置 uart_init(72,9600); delay_init(72); LED_Init(); LCD_Init();

//串口初始化为9600 //延时初始化

//初始化与LED连接的硬件接口 //初始化LCD

usmart_dev.init(72); //初始化USMART KEY_Init();

//按键初始化

CAN_Mode_Init(1,8,7,5,mode);//CAN初始化,波特率450Kbps

POINT_COLOR=RED;//设置字体为红色

LCD_ShowString(60,50,200,16,16,\LCD_ShowString(60,70,200,16,16,\

LCD_ShowString(60,90,200,16,16,\LCD_ShowString(60,110,200,16,16,\LCD_ShowString(60,130,200,16,16,\

LCD_ShowString(60,150,200,16,16,\显示提示信

//显示当前

POINT_COLOR=BLUE;//设置字体为蓝色

LCD_ShowString(60,170,200,16,16,\

计数值

LCD_ShowString(60,190,200,16,16,\

LCD_ShowString(60,250,200,16,16,\

//提示发送的数据

//提示接收到的数

while(1)

{

key=KEY_Scan(0);

if(key==KEY_RIGHT)//KEY0按下,发送一次数据 {

for(i=0;i<8;i++) {

canbuf[i]=cnt+i;//填充发送缓冲区

if(i<4)LCD_ShowxNum(60+i*32,210,canbuf[i],3,16,0X80); //显示数据

else LCD_ShowxNum(60+(i-4)*32,230,canbuf[i],3,16,0X80); //显示数据

}

res=Can_Send_Msg(canbuf,8);//发送8个字节

if(res)LCD_ShowString(60+80,190,200,16,16,\//提示发送失败

else LCD_ShowString(60+80,190,200,16,16,\//提示发送成功

}else if(key==KEY_UP)//WK_UP按下,改变CAN的工作模式 {

mode=!mode;

CAN_Mode_Init(1,8,7,5,mode);//CAN普通模式初始化,普通模

式,波特率450Kbps

POINT_COLOR=RED;//设置字体为红色 if(mode==0)//普通模式,需要2个开发板 {

LCD_ShowString(60,130,200,16,16,\

}else //回环模式,一个开发板就可以测试了. {

}

}

LCD_ShowString(60,130,200,16,16,\

POINT_COLOR=BLUE;//设置字体为蓝色

key=Can_Receive_Msg(canbuf); if(key)//接收到有数据 {

LCD_Fill(60,270,130,310,WHITE);//清除之前的显示 for(i=0;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); //显示数据 }

}

} t++; delay_ms(10); if(t==20) { }

LED0=!LED0;//提示系统正在运行 t=0; cnt++;

LCD_ShowxNum(60+48,170,cnt,3,16,0X80);

//显示数据

}

本文来源:https://www.bwwdw.com/article/wk6g.html

Top