N32L40XCL-STB开发板模块之新建CAN测试工程

资料下载
国民技术提供了ftp://58.250.18.138网址下载。
开发工具选择
国民技术提供了mdk以及iar的example工程示例。在n32l40xn32l40xxx_v2.1.06-软件开发套件(software development kit)nationstech.n32l40x_library.1.2.1projectsn32l40x_evalexamples目录下面对应为mdk-arm与ewarm
当然也可以选择其的工具,如vscode、clion等,在目录m:n32l40xn32l40xxx_v2.1.07-应用笔记(application note)an_n32g43x_n32l43x_n32l40x_gcc development environment application note_v3.0nationstech.n32l43x_library.1.0.1下面有vscode的基础工程包。
我这次选择的是rt-thread studio工具,由于我是第n次rt-thread studio了,这里就不展示安装,
下载sdk支持包
按下图操作,下载开发板sdk支持包
新建工程
菜单-文件-》新建-》rt-thread项目
配置can
1、打开rt-thread settings,按下图指示,使能can:
2、保存,关闭rt-thread stettings,等待自动生成工程:
创建can测试工程:
在applications目录下面添加一个test_can.c,内容如下:
/*
程序清单:这是一个 can 设备使用例程
例程导出了 can_sample 命令到控制终端
命令调用格式:can_sample can1
命令解释:命令第二个参数是要使用的 can 设备名称,为空则使用默认的 can 设备
程序功能:通过 can 设备发送一帧,并创建一个线程接收数据然后打印输出。
/
#include
#include rtdevice.h
#define can_dev_name can1 / can 设备名称 /
static struct rt_semaphore rx_sem; / 用于接收消息的信号量 /
static rt_device_t can_dev; / can 设备句柄 /
/ 接收数据回调函数 /
static rt_err_t can_rx_call(rt_device_t dev, rt_size_t size)
{
/ can 接收到数据后产生中断,调用此回调函数,然后发送接收信号量 */
rt_sem_release(&rx_sem);
return rt_eok;
}
static void can_rx_thread(void parameter)
{
int i;
rt_err_t res;
struct rt_can_msg rxmsg = {0};
/ 设置接收回调函数 /
rt_device_set_rx_indicate(can_dev, can_rx_call);
#ifdef rt_can_using_hdr
struct rt_can_filter_item items[5] =
{
rt_can_filter_item_init(0x100, 0, 0, 0, 0x700, rt_null, rt_null), / std,match id:0x1000x1ff,hdr 为 - 1,设置默认过滤表 /
rt_can_filter_item_init(0x300, 0, 0, 0, 0x700, rt_null, rt_null), / std,match id:0x3000x3ff,hdr 为 - 1 /
rt_can_filter_item_init(0x211, 0, 0, 0, 0x7ff, rt_null, rt_null), / std,match id:0x211,hdr 为 - 1 /
rt_can_filter_std_init(0x486, rt_null, rt_null), / std,match id:0x486,hdr 为 - 1 /
{0x555, 0, 0, 0, 0x7ff, 7,} / std,match id:0x555,hdr 为 7,指定设置 7 号过滤表 /
};
struct rt_can_filter_config cfg = {5, 1, items}; / 一共有 5 个过滤表 /
/ 设置硬件过滤表 /
res = rt_device_control(can_dev, rt_can_cmd_set_filter, &cfg);
rt_assert(res == rt_eok);
#endif
while (1)
{
/ hdr 值为 - 1,表示直接从 uselist 链表读取数据 /
rxmsg.hdr = -1;
/ 阻塞等待接收信号量 /
rt_sem_take(&rx_sem, rt_waiting_forever);
/ 从 can 读取一帧数据 /
rt_device_read(can_dev, 0, &rxmsg, sizeof(rxmsg));
/ 打印数据 id 及内容 /
rt_kprintf(id:%x, rxmsg.id);
for (i = 0; i < 8; i++)
{
rt_kprintf(%2x, rxmsg.data[i]);
}
rt_kprintf(n);
}
}
int can_sample(int argc, char argv[])
{
struct rt_can_msg msg = {0};
rt_err_t res;
rt_size_t size;
rt_thread_t thread;
char can_name[rt_name_max];
if (argc == 2)
{
rt_strncpy(can_name, argv[1], rt_name_max);
}
else
{
rt_strncpy(can_name, can_dev_name, rt_name_max);
}
/ 查找 can 设备 /
can_dev = rt_device_find(can_name);
if (!can_dev)
{
rt_kprintf(find %s failed!n, can_name);
return rt_error;
}
/ 初始化 can 接收信号量 /
rt_sem_init(&rx_sem, rx_sem, 0, rt_ipc_flag_fifo);
/ 以中断接收及发送方式打开 can 设备 /
res = rt_device_open(can_dev, rt_device_flag_int_tx | rt_device_flag_int_rx);
rt_assert(res == rt_eok);
/ 设置 can 通信的波特率为 500kbit/s /
res = rt_device_control(can_dev, rt_can_cmd_set_baud, (void )can500kbaud);
/ 创建数据接收线程 /
thread = rt_thread_create(can_rx, can_rx_thread, rt_null, 1024, 25, 10);
if (thread != rt_null)
{
rt_thread_startup(thread);
}
else
{
rt_kprintf(create can_rx thread failed!n);
}
msg.id = 0x78; / id 为 0x78 /
msg.ide = rt_can_stdid; / 标准格式 /
msg.rtr = rt_can_dtr; / 数据帧 /
msg.len = 8; / 数据长度为 8 /
/ 待发送的 8 字节数据 /
msg.data[0] = 0x00;
msg.data[1] = 0x11;
msg.data[2] = 0x22;
msg.data[3] = 0x33;
msg.data[4] = 0x44;
msg.data[5] = 0x55;
msg.data[6] = 0x66;
msg.data[7] = 0x77;
/ 发送一帧 can 数据 /
size = rt_device_write(can_dev, 0, &msg, sizeof(msg));
if (size == 0)
{
rt_kprintf(can dev write data failed!n);
}
return res;
}
/ 导出到 msh 命令列表中 */
msh_cmd_export(can_sample, can device sample);
然后编译工程:
【小结】到此,基于can测试的工程就建好了,等开发板到位,就可以用can分析仪来验证了。

基于EDA软件Proteus的LED屏下位机系统设计
怎样用Arduino和GPS天线创建汽车跟踪系统
如何确定电脑是否中毒/木马
百度携手妙健康推进慢病管理创新,让老百姓享有优质医疗服务
土壤水势仪与其它方法对比优势
N32L40XCL-STB开发板模块之新建CAN测试工程
车辆超高检测示警系统解决方案
资深评测!华为荣耀V9为何成为众多花粉心中的全能王?
柔宇科技新款瀑布屏设计的新机曝光搭配柔性OLED屏幕屏占比非常高
TRITTONHALO专业电容麦克风评测 这是你需要的直播神器
基于多点控制器和A/D转换器实现数字图像远程监控系统的设计
维信诺拟转让Micro LED相关的专利技术给成都辰显
Merge用VR和AR技术创建和发展一个适合孩子的XR生态系统
无线通信技术给物联网IoT带来哪些价值?
华为P40高颜值亮相,麒麟990+120HZ+50W闪充
减少变频器对PLC与外围设备通讯干扰的方法
曝上汽集团已与地平线合作造汽车芯片
中兴通讯:五大重点多方位协同,构筑700M优质5G网络
对于中国医疗行业六大新趋势独家解读
喜讯 | 美格智能子公司西安兆格电子上榜2022年陕西省“专精特新”企业