stm32实验CAN收发实验
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include "sys.h" #include "usart.h"
#include "delay.h"
#include "led.h"
#include "beep.h"
#include "key.h"
#include "exti.h"
#include "wdg.h"
#include "timer.h"
#include "tpad.h"
#include "oled.h"
#include "lcd.h"
#include "usmart.h"
#include "rtc.h"
#include "wkup.h"
#include "adc.h"
#include "dac.h"
#include "dma.h"
#include "24cxx.h"
#include "flash.h"
#include "rs485.h"
#include "can.h"
int main(void){u8 key;
u8 i=0,t=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
//xx初始化
//初始化与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,"WarShip STM32");
LCD_ShowString(60,70,200,16,16,"CAN TEST");
LCD_ShowString(60,90,200,16,16,"ATOM@ALIENTEK");
LCD_ShowString(60,130,200,16,16,"LoopBack Mode");
LCD_ShowString(60,150,200,16,16,"KEY0:Send WK_UP:
Mode");//显示提示信
//显示当前POINT_COLOR=BLUE;//设置字体为蓝色
LCD_ShowString(60,170,200,16,16,"Count:
");
计数值
据LCD_ShowString(60,190,200,16,16,"Send Data:
");
LCD_ShowString(60,250,200,16,16,"Receive Data:
");//提示发送的数据//提示接收到的数while
(1){key=KEY_Scan
(0);
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,"Failed");//提示发送失败
else LCD_ShowString(60+80,190,200,16,16,"OK ");//提示发送成功
}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,"Nnormal Mode ");}else //回环模式,一个开发板就可以测试了.{}}LCD_ShowString(60,130,200,16,16,"LoopBack
Mode");POINT_COLOR=BLUE;//设置字体为蓝色
key=Can_Receive_Msg(canbuf);
if(key)//接收到有数据{LCD_Fill(60,270,130,310,WHITE);//清除之前的显示
for(i=0;i 4)*32,290,canbuf[i],3,16,0X80);//显示数据 }}} t++; delay_ms (10); if(t==20){}LED0=!LED0;//提示系统正在运行 t=0;