936|1

441

帖子

3

TA的资源

纯净的硅(高级)

楼主
 

【BL606P-DVK开发板】CAN扩展模块收发测试 [复制链接]

  本帖最后由 TL-LED 于 2023-2-19 18:21 编辑

    本计划是使用这款开发板来播放CAN通信控制的语音播放功能的,对语音这块还不是很会用,下面测试下扩展CAN通信模块收发测试功能。

 

    一、硬件部分

 

   1.1、使用到了硬件上的LCD接口

 

1.2、外扩CAN模块部分

1.3、硬件连接图

 

二、程序部分

2.1、端口初始化部分

gpio_dev_t gpio_2515_so = { GPIO_PIN_24, INPUT_PULL_UP, NULL };  //PIO24/LCD-PWM
gpio_dev_t gpio_2515_si = { GPIO_PIN_26, OUTPUT_PUSH_PULL, NULL };	 //PIO26/LCD-DIO
gpio_dev_t gpio_2515_sck= { GPIO_PIN_27, OUTPUT_PUSH_PULL, NULL };  //PIO27/LCD-CLK
gpio_dev_t gpio_2515_cs = { GPIO_PIN_28, OUTPUT_PUSH_PULL, NULL };   //PIO28/LCD-CS
gpio_dev_t gpio_2515_int = { GPIO_PIN_25, IRQ_MODE, NULL };  //PIO25

#define mcp2515_clk_l()         hal_gpio_output_low(&gpio_2515_sck)
#define mcp2515_clk_h()        hal_gpio_output_high(&gpio_2515_sck)

#define mcp2515_si_l()         hal_gpio_output_low(&gpio_2515_si )
#define mcp2515_si_h()        hal_gpio_output_high(&gpio_2515_si )

#define mcp2515_cs_l()         hal_gpio_output_low(&gpio_2515_cs )
#define mcp2515_cs_h()        hal_gpio_output_high(&gpio_2515_cs )

csi_pin_set_mux( GPIO_PIN_24, PIN_FUNC_GPIO);
	csi_pin_set_mux( GPIO_PIN_25, PIN_FUNC_GPIO);
	csi_pin_set_mux( GPIO_PIN_26, PIN_FUNC_GPIO);
	csi_pin_set_mux( GPIO_PIN_27, PIN_FUNC_GPIO);
	csi_pin_set_mux( GPIO_PIN_28, PIN_FUNC_GPIO);
	
	hal_gpio_init(&gpio_2515_so);
	hal_gpio_init(&gpio_2515_si);
	hal_gpio_init(&gpio_2515_sck);
	hal_gpio_init(&gpio_2515_cs);
	hal_gpio_init(&gpio_2515_int);
	hal_gpio_output_low(&gpio_2515_si);
	hal_gpio_output_low(&gpio_2515_sck);
	hal_gpio_output_low(&gpio_2515_cs);
	
	hal_gpio_enable_irq(&gpio_2515_int, IRQ_TRIGGER_FALLING_EDGE, can_eint, NULL);

    

2.2、main.c

#include <aos/aos.h>
#include <stdio.h>
#include <sys_clk.h>
#include "app_main.h"
#include <drv/gpio.h>
#include "led.h"
#include "tm1638.h"
#include "mcp2515.h"

int main(int argc, char *argv[])
{
	int i=0;
	uint8_t dispbuf[8];
	uint32_t cnt=0;
	uint8_t cantx_buf[8];
	
    board_yoc_init();
	init_led();
	init_tm1638();
	init_mcp2515();
    
    printf("\r\napp start core clock %d........\r\n", soc_get_cur_cpu_freq());
	
	disp_log();
	aos_msleep(2000);
    
    //codec_output_init();
    //codec_input_init();
    //codec_loop_init();
	for(i=0;i<8;i++)
	{
		dispbuf[i]=0;
	}
	while(1)
	{
		cantx_buf[0]=i;
		cantx_buf[1]=i+1;
		cantx_buf[2]=i+2;
		cantx_buf[3]=i+3;
		cantx_buf[4]=i;
		cantx_buf[5]=i+1;
		cantx_buf[6]=i+2;
		cantx_buf[7]=i+3;
		
		CAN_Send(cantx_buf);
		printf("can tx data :  %02x %02x %02x %02x %02x %02x %02x %02x\r\n",cantx_buf[0],cantx_buf[1],cantx_buf[2],cantx_buf[3],cantx_buf[4],cantx_buf[5],cantx_buf[6],cantx_buf[7]);
		i++;
		if(i>250)
		{
			i=0;
		}
		
		
		set_ledr();
		clr_ledg();
		clr_ledb();
		aos_msleep(100);
		
		clr_ledr();
		set_ledg();
		clr_ledb();
		aos_msleep(100);
		
		clr_ledr();
		clr_ledg();
		set_ledb();
		aos_msleep(100);
		
		clr_ledr();
		clr_ledg();
		clr_ledb();
		aos_msleep(100);
		
		if(cnt>999)
		{
				cnt=0;
		}
		cnt++;
		dispbuf[4]=cnt/1000;
		dispbuf[5]=(cnt%1000)/100;
		dispbuf[6]=((cnt%1000)%100)/10;
		dispbuf[7]=((cnt%1000)%100)%10;
		disp_led(dispbuf);
	}
    return 0;
}

2.3、can接收部分程序

void can_eint(void *args)
{
	uint8_t rx_sta;
	rx_sta=CAN_ReadINTF(); 
	if(rx_sta&0x01)
	{
		CAN_SetINTF(0x00);
		CAN_RecRXB0(canrx_buf);
		printf("can rx data : %02x %02x %02x %02x %02x %02x %02x %02x\r\n",canrx_buf[0],canrx_buf[1],canrx_buf[2],canrx_buf[3],canrx_buf[4],canrx_buf[5],canrx_buf[6],canrx_buf[7]);
		
	}
}

 

三、运行结果

CAN软件和串口收发数据显示

最新回复

扩展CAN通信模块收发这个方法收藏了   详情 回复 发表于 2023-2-20 07:34
点赞 关注
 
 

回复
举报

1700

帖子

0

TA的资源

五彩晶圆(初级)

沙发
 

扩展CAN通信模块收发这个方法收藏了

 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表