OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2101|回复: 3

新手求助,两块精英版进行CAN总线通信。

[复制链接]

1

主题

5

帖子

0

精华

新手入门

积分
7
金钱
7
注册时间
2018-9-28
在线时间
0 小时
发表于 2018-9-28 18:11:50 | 显示全部楼层 |阅读模式
4金钱
我想把两块精英版进行CAN总线通信,然后把其中一块的采集的温度数据,发送到另一块板子上面,并在LCD显示屏上面显示。但是一直改不对程序。不知道怎么把CAN总线随机发送的数据改成采集过来的温度数据。那一段看不懂。

用的是自带的18B20的传感器实验和CAN总线收发实验。#include "led.h"

[size=10.5000pt]#include "delay.h"
[size=10.5000pt]#include "key.h"
[size=10.5000pt]#include "sys.h"
[size=10.5000pt]#include "lcd.h"
[size=10.5000pt]#include "usart.h"[size=10.5000pt]        [size=10.5000pt]
[size=10.5000pt]#include "ds18b20.h"
[size=10.5000pt]
[size=10.5000pt]
[size=10.5000pt]
[size=10.5000pt]
[size=10.5000pt] int main(void)
[size=10.5000pt] {[size=10.5000pt]        [size=10.5000pt]
[size=10.5000pt]        [size=10.5000pt]u8 t=0;[size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]   
[size=10.5000pt]        [size=10.5000pt]short temperature;    [size=10.5000pt]        [size=10.5000pt]   
[size=10.5000pt]
[size=10.5000pt]        [size=10.5000pt]delay_init();[size=10.5000pt]        [size=10.5000pt]    [size=10.5000pt]        [size=10.5000pt] //延时函数初始化[size=10.5000pt]        [size=10.5000pt]  
[size=10.5000pt]        [size=10.5000pt]NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级
[size=10.5000pt]        [size=10.5000pt]uart_init(115200);[size=10.5000pt]        [size=10.5000pt] [size=10.5000pt]        [size=10.5000pt]//串口初始化为 115200
[size=10.5000pt]        [size=10.5000pt]LED_Init();[size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]  [size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]//初始化与LED连接的硬件接口
[size=10.5000pt]        [size=10.5000pt]LCD_Init();[size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]   [size=10.5000pt]        [size=10.5000pt]//初始化LCD  
[size=10.5000pt] [size=10.5000pt]        [size=10.5000pt]POINT_COLOR=RED;[size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]//设置字体为红色
[size=10.5000pt]        [size=10.5000pt]LCD_ShowString(30,50,200,16,16,"ELITE STM32");[size=10.5000pt]       
[size=10.5000pt]        [size=10.5000pt]LCD_ShowString(30,70,200,16,16,"DS18B20 TEST");[size=10.5000pt]       
[size=10.5000pt]        [size=10.5000pt]LCD_ShowString(30,90,200,16,16,"ATOM@ALIENTEK");
[size=10.5000pt]        [size=10.5000pt]LCD_ShowString(30,110,200,16,16,"2015/1/16");[size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]  
[size=10.5000pt] [size=10.5000pt]        [size=10.5000pt]while(DS18B20_Init())[size=10.5000pt]        [size=10.5000pt]//DS18B20初始化[size=10.5000pt]       
[size=10.5000pt]        [size=10.5000pt]{
[size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]LCD_ShowString(30,130,200,16,16,"DS18B20 Error");
[size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]delay_ms(200);
[size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]LCD_Fill(30,130,239,130+16,WHITE);
[size=10.5000pt] [size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]delay_ms(200);
[size=10.5000pt]        [size=10.5000pt]}[size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]   
[size=10.5000pt]        [size=10.5000pt]LCD_ShowString(30,130,200,16,16,"DS18B20 OK");
[size=10.5000pt]        [size=10.5000pt]POINT_COLOR=BLUE;//设置字体为蓝色
[size=10.5000pt] [size=10.5000pt]        [size=10.5000pt]LCD_ShowString(30,150,200,16,16,"Temp:   . C");[size=10.5000pt]        [size=10.5000pt]
[size=10.5000pt]        [size=10.5000pt]while(1)
[size=10.5000pt]        [size=10.5000pt]{[size=10.5000pt]        [size=10.5000pt]    [size=10.5000pt]        [size=10.5000pt]   
[size=10.5000pt] [size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]if(t%10==0)[size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]//每100ms读取一次
[size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]{[size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]  
[size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]temperature=DS18B20_Get_Temp();[size=10.5000pt]       
[size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]if(temperature<0)
[size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]{
[size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]LCD_ShowChar(30+40,150,'-',16,0);[size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]//显示负号
[size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]temperature=-temperature;[size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]//转为正数
[size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]}else LCD_ShowChar(30+40,150,' ',16,0);[size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]//去掉负号
[size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]LCD_ShowNum(30+40+8,150,temperature/10,2,16);[size=10.5000pt]        [size=10.5000pt]//显示正数部分[size=10.5000pt]        [size=10.5000pt]   
[size=10.5000pt]   [size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]LCD_ShowNum(30+40+32,150,temperature%10,1,16);[size=10.5000pt]        [size=10.5000pt]//显示小数部分 [size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]   
[size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]}[size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]   
[size=10.5000pt]        [size=10.5000pt] [size=10.5000pt]        [size=10.5000pt]delay_ms(10);
[size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]t++;
[size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]if(t==20)
[size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]{
[size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]t=0;
[size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]LED0=!LED0;
[size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]}
[size=10.5000pt]        [size=10.5000pt]}
[size=10.5000pt]}
[size=10.5000pt]这是温度显示的。
[size=10.5000pt]#include "led.h"
[size=10.5000pt]#include "delay.h"
[size=10.5000pt]#include "key.h"
[size=10.5000pt]#include "sys.h"
[size=10.5000pt]#include "lcd.h"
[size=10.5000pt]#include "usart.h"[size=10.5000pt]        [size=10.5000pt]
[size=10.5000pt]#include "can.h"
[size=10.5000pt]#include "ds18b20.h"
[size=10.5000pt]
[size=10.5000pt]
[size=10.5000pt]
[size=10.5000pt]
[size=10.5000pt] int main(void)
[size=10.5000pt] {[size=10.5000pt]        [size=10.5000pt]
[size=10.5000pt]        [size=10.5000pt]u8 key;
[size=10.5000pt]        [size=10.5000pt]u8 i=0,t=0;
[size=10.5000pt]        [size=10.5000pt]u8 cnt=0;
[size=10.5000pt]        [size=10.5000pt]u8 canbuf[8];
[size=10.5000pt]        [size=10.5000pt]u8 res;
[size=10.5000pt]        [size=10.5000pt]u8 mode=CAN_Mode_LoopBack;//CAN工作模式;CAN_Mode_Normal(0):普通模式,CAN_Mode_LoopBack(1):环回模式
[size=10.5000pt]
[size=10.5000pt]        [size=10.5000pt]delay_init();[size=10.5000pt]        [size=10.5000pt]    [size=10.5000pt]        [size=10.5000pt] //延时函数初始化[size=10.5000pt]        [size=10.5000pt]  
[size=10.5000pt]        [size=10.5000pt]NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级
[size=10.5000pt]        [size=10.5000pt]uart_init(115200);[size=10.5000pt]        [size=10.5000pt] [size=10.5000pt]        [size=10.5000pt]//串口初始化为115200
[size=10.5000pt]        [size=10.5000pt]LED_Init();[size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]  [size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]//初始化与LED连接的硬件接口
[size=10.5000pt]        [size=10.5000pt]LCD_Init();[size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]   [size=10.5000pt]        [size=10.5000pt]//初始化LCD[size=10.5000pt]       
[size=10.5000pt]        [size=10.5000pt]KEY_Init();[size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]//按键初始化[size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt] [size=10.5000pt]       
[size=10.5000pt]   
[size=10.5000pt]        [size=10.5000pt]CAN_Mode_Init(CAN_SJW_1tq,CAN_BS2_8tq,CAN_BS1_9tq,4,CAN_Mode_LoopBack);//CAN初始化环回模式,波特率500Kbps   
[size=10.5000pt]
[size=10.5000pt] [size=10.5000pt]        [size=10.5000pt]POINT_COLOR=RED;//设置字体为红色
[size=10.5000pt]        [size=10.5000pt]LCD_ShowString(60,50,200,16,16,"WarShip STM32");[size=10.5000pt]       
[size=10.5000pt]        [size=10.5000pt]LCD_ShowString(60,70,200,16,16,"CAN TEST");[size=10.5000pt]       
[size=10.5000pt]        [size=10.5000pt]LCD_ShowString(60,90,200,16,16,"ATOM@ALIENTEK");
[size=10.5000pt]        [size=10.5000pt]LCD_ShowString(60,110,200,16,16,"2015/1/11");
[size=10.5000pt]        [size=10.5000pt]LCD_ShowString(60,130,200,16,16,"LoopBack Mode");[size=10.5000pt]        [size=10.5000pt]
[size=10.5000pt]        [size=10.5000pt]LCD_ShowString(60,150,200,16,16,"KEY0:Send WK_UP:Mode");//显示提示信息[size=10.5000pt]        [size=10.5000pt]       
[size=10.5000pt]  POINT_COLOR=BLUE;//设置字体为蓝色[size=10.5000pt]        [size=10.5000pt]  
[size=10.5000pt]        [size=10.5000pt]LCD_ShowString(60,170,200,16,16,"Count:");[size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]//显示当前计数值[size=10.5000pt]       
[size=10.5000pt]        [size=10.5000pt]LCD_ShowString(60,190,200,16,16,"Send Data:");[size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]//提示发送的数据[size=10.5000pt]       
[size=10.5000pt]        [size=10.5000pt]LCD_ShowString(60,250,200,16,16,"Receive Data:");[size=10.5000pt]        [size=10.5000pt]//提示接收到的数据[size=10.5000pt]        [size=10.5000pt]       
[size=10.5000pt] [size=10.5000pt]        [size=10.5000pt]while(1)
[size=10.5000pt]        [size=10.5000pt]{
[size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]key=KEY_Scan(0);
[size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]if(key==KEY0_PRES)//KEY0按下,发送一次数据
[size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]{
[size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]for(i=0;i<8;i++)
[size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]{
[size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]canbuf=cnt+i;//填充发送缓冲区
[size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]if(i<4)LCD_ShowxNum(60+i*32,210,canbuf,3,16,0X80);[size=10.5000pt]        [size=10.5000pt]//显示数据
[size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]else LCD_ShowxNum(60+(i-4)*32,230,canbuf,3,16,0X80);[size=10.5000pt]        [size=10.5000pt]//显示数据
[size=10.5000pt] [size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]}
[size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]res=Can_Send_Msg(canbuf,8);//发送8个字节
[size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]if(res)LCD_ShowString(60+80,190,200,16,16,"Failed");[size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]//提示发送失败
[size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]else LCD_ShowString(60+80,190,200,16,16,"OK    ");[size=10.5000pt]        [size=10.5000pt] [size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]//提示发送成功[size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]   
[size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]}else if(key==WKUP_PRES)//WK_UP按下,改变CAN的工作模式
[size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]{[size=10.5000pt]        [size=10.5000pt]   
[size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]mode=!mode;
[size=10.5000pt]  [size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]CAN_Mode_Init(CAN_SJW_1tq,CAN_BS2_8tq,CAN_BS1_9tq,4,mode);//CAN普通模式初始化, 波特率500Kbps
[size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]POINT_COLOR=RED;//设置字体为红色
[size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]if(mode==0)//普通模式,需要2个开发板
[size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]{
[size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]LCD_ShowString(60,130,200,16,16,"Nnormal Mode ");[size=10.5000pt]        [size=10.5000pt]   
[size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]}else //回环模式,一个开发板就可以测试了.
[size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]{
[size=10.5000pt] [size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]LCD_ShowString(60,130,200,16,16,"LoopBack Mode");
[size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]}
[size=10.5000pt] [size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]POINT_COLOR=BLUE;//设置字体为蓝色
[size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]}[size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]
[size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]key=Can_Receive_Msg(canbuf);
[size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]if(key)//接收到有数据
[size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]{[size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]       
[size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]LCD_Fill(60,270,130,310,WHITE);//清除之前的显示
[size=10.5000pt] [size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]for(i=0;i<key;i++)
[size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]{[size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]   
[size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]if(i<4)LCD_ShowxNum(60+i*32,270,canbuf,3,16,0X80);[size=10.5000pt]        [size=10.5000pt]//显示数据
[size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]else LCD_ShowxNum(60+(i-4)*32,290,canbuf,3,16,0X80);[size=10.5000pt]        [size=10.5000pt]//显示数据
[size=10.5000pt] [size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]}
[size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]}
[size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]t++;
[size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]delay_ms(10);
[size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]if(t==20)
[size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]{
[size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]LED0=!LED0;//提示系统正在运行[size=10.5000pt]       
[size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]t=0;
[size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]cnt++;
[size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]LCD_ShowxNum(60+48,170,cnt,3,16,0X80);[size=10.5000pt]        [size=10.5000pt]//显示数据
[size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]}[size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]   
[size=10.5000pt]        [size=10.5000pt]}
[size=10.5000pt]}


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手入门

积分
7
金钱
7
注册时间
2018-9-28
在线时间
0 小时
 楼主| 发表于 2018-9-28 18:16:22 | 显示全部楼层
#include "led.h"
#include "delay.h"
#include "key.h"
#include "sys.h"
#include "lcd.h"
#include "usart.h"         
#include "ds18b20.h"




int main(void)
{         
        u8 t=0;                            
        short temperature;              

        delay_init();                     //延时函数初始化          
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级
        uart_init(115200);                 //串口初始化为 115200
        LED_Init();                                  //初始化与LED连接的硬件接口
        LCD_Init();                                   //初始化LCD  
        POINT_COLOR=RED;                //设置字体为红色
        LCD_ShowString(30,50,200,16,16,"ELITE STM32");       
        LCD_ShowString(30,70,200,16,16,"DS18B20 TEST");       
        LCD_ShowString(30,90,200,16,16,"ATOM@ALIENTEK");
        LCD_ShowString(30,110,200,16,16,"2015/1/16");                  
        while(DS18B20_Init())        //DS18B20初始化       
        {
                LCD_ShowString(30,130,200,16,16,"DS18B20 Error");
                delay_ms(200);
                LCD_Fill(30,130,239,130+16,WHITE);
                delay_ms(200);
        }                                                                  
        LCD_ShowString(30,130,200,16,16,"DS18B20 OK");
        POINT_COLOR=BLUE;//设置字体为蓝色
        LCD_ShowString(30,150,200,16,16,"Temp:   . C");         
        while(1)
        {                        
                if(t%10==0)                        //每100ms读取一次
                {                                                                          
                        temperature=DS18B20_Get_Temp();       
                        if(temperature<0)
                        {
                                LCD_ShowChar(30+40,150,'-',16,0);                        //显示负号
                                temperature=-temperature;                                        //转为正数
                        }else LCD_ShowChar(30+40,150,' ',16,0);                        //去掉负号
                        LCD_ShowNum(30+40+8,150,temperature/10,2,16);        //显示正数部分            
                           LCD_ShowNum(30+40+32,150,temperature%10,1,16);        //显示小数部分                   
                }                                  
                 delay_ms(10);
                t++;
                if(t==20)
                {
                        t=0;
                        LED0=!LED0;
                }
        }
}
第一次发帖,感觉格式好奇怪。
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手入门

积分
7
金钱
7
注册时间
2018-9-28
在线时间
0 小时
 楼主| 发表于 2018-9-28 18:17:24 | 显示全部楼层
把两个程序重新发了一遍#include "led.h"
#include "delay.h"
#include "key.h"
#include "sys.h"
#include "lcd.h"
#include "usart.h"         
#include "can.h"
#include "ds18b20.h"




int main(void)
{         
        u8 key;
        u8 i=0,t=0;
        u8 cnt=0;
        u8 canbuf[8];
        u8 res;
        u8 mode=CAN_Mode_LoopBack;//CAN工作模式;CAN_Mode_Normal(0):普通模式,CAN_Mode_LoopBack(1):环回模式

        delay_init();                     //延时函数初始化          
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级
        uart_init(115200);                 //串口初始化为115200
        LED_Init();                                  //初始化与LED连接的硬件接口
        LCD_Init();                                   //初始化LCD       
        KEY_Init();                                //按键初始化                        
   
        CAN_Mode_Init(CAN_SJW_1tq,CAN_BS2_8tq,CAN_BS1_9tq,4,CAN_Mode_LoopBack);//CAN初始化环回模式,波特率500Kbps   

        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,110,200,16,16,"2015/1/11");
        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(key==KEY0_PRES)//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,"Failed");                //提示发送失败
                        else LCD_ShowString(60+80,190,200,16,16,"OK    ");                         //提示发送成功                                                                  
                }else if(key==WKUP_PRES)//WK_UP按下,改变CAN的工作模式
                {          
                        mode=!mode;
                          CAN_Mode_Init(CAN_SJW_1tq,CAN_BS2_8tq,CAN_BS1_9tq,4,mode);//CAN普通模式初始化, 波特率500Kbps
                        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<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);        //显示数据
                        }
                }
                t++;
                delay_ms(10);
                if(t==20)
                {
                        LED0=!LED0;//提示系统正在运行       
                        t=0;
                        cnt++;
                        LCD_ShowxNum(60+48,170,cnt,3,16,0X80);        //显示数据
                }                  
        }
}
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2018-9-29 01:35:30 | 显示全部楼层
贴一堆代码。。。。
你先搞懂我们的can通信实验,能把我们实验效果做出来先
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-20 05:56

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表