现在在做往Motorware电机控制例程中添加CAN通信的内容。因为controlsuite与motorware编程风格不一样,且Motorware的例程中没有对can的寄存器进行封装,编写相应的结构体。所以自己模仿其他外设模块的编程方式写了一个can.c的文件,利用can.h定义的结构体来编写程序。
其中两部分程序如下图所示:
1. 将定义的寄存器结构体与对应的内存地址相联系
2. 往邮箱里写入初始数据
此外,还将controlsuite例程中关于can的初始化程序按照新定义的结构体重新修改一遍并移植到电机控制程序中。
可是在程序运行时,观察邮箱内存地址中的数据都是0,自测试模式也无法通过。
感觉就像是给寄存器写的值完全没起到作用,可是前面也有模仿motorware编程方式将寄存器指针域与地址相联系起来。
尝试直接定义一个指向邮箱存储内容的指针往里面写数据也无法改变邮箱内的数据(一直都为0)。
想了很久也没有想到错误原因和解决办法,所以特来向各位前辈求教,希望大家能够指点一二,先谢谢大家了!
li josh:
我引入sci 的时候也遇到 寄存器写的值完全没起到作用 写scia 结果配置到scib
楼上 can 加入成功了?
现在在做往Motorware电机控制例程中添加CAN通信的内容。因为controlsuite与motorware编程风格不一样,且Motorware的例程中没有对can的寄存器进行封装,编写相应的结构体。所以自己模仿其他外设模块的编程方式写了一个can.c的文件,利用can.h定义的结构体来编写程序。
其中两部分程序如下图所示:
1. 将定义的寄存器结构体与对应的内存地址相联系
2. 往邮箱里写入初始数据
此外,还将controlsuite例程中关于can的初始化程序按照新定义的结构体重新修改一遍并移植到电机控制程序中。
可是在程序运行时,观察邮箱内存地址中的数据都是0,自测试模式也无法通过。
感觉就像是给寄存器写的值完全没起到作用,可是前面也有模仿motorware编程方式将寄存器指针域与地址相联系起来。
尝试直接定义一个指向邮箱存储内容的指针往里面写数据也无法改变邮箱内的数据(一直都为0)。
想了很久也没有想到错误原因和解决办法,所以特来向各位前辈求教,希望大家能够指点一二,先谢谢大家了!
Zhenghu wang:
回复 li josh:
我也在用28069M的motorware 中电机控制程序,我们的产品要有CAN通讯功能,正在头疼怎么把CAN加入到motorware中去,开发板上留的有隔离的CAN接口不知为什么例程中又没有。
不知楼主问题解决了吗?怎么做的,我们可以互相交流。
现在在做往Motorware电机控制例程中添加CAN通信的内容。因为controlsuite与motorware编程风格不一样,且Motorware的例程中没有对can的寄存器进行封装,编写相应的结构体。所以自己模仿其他外设模块的编程方式写了一个can.c的文件,利用can.h定义的结构体来编写程序。
其中两部分程序如下图所示:
1. 将定义的寄存器结构体与对应的内存地址相联系
2. 往邮箱里写入初始数据
此外,还将controlsuite例程中关于can的初始化程序按照新定义的结构体重新修改一遍并移植到电机控制程序中。
可是在程序运行时,观察邮箱内存地址中的数据都是0,自测试模式也无法通过。
感觉就像是给寄存器写的值完全没起到作用,可是前面也有模仿motorware编程方式将寄存器指针域与地址相联系起来。
尝试直接定义一个指向邮箱存储内容的指针往里面写数据也无法改变邮箱内的数据(一直都为0)。
想了很久也没有想到错误原因和解决办法,所以特来向各位前辈求教,希望大家能够指点一二,先谢谢大家了!
deping long:
回复 li josh:
我的CAN加成功了。你检查下你的SCI时钟有没有使能。
现在在做往Motorware电机控制例程中添加CAN通信的内容。因为controlsuite与motorware编程风格不一样,且Motorware的例程中没有对can的寄存器进行封装,编写相应的结构体。所以自己模仿其他外设模块的编程方式写了一个can.c的文件,利用can.h定义的结构体来编写程序。
其中两部分程序如下图所示:
1. 将定义的寄存器结构体与对应的内存地址相联系
2. 往邮箱里写入初始数据
此外,还将controlsuite例程中关于can的初始化程序按照新定义的结构体重新修改一遍并移植到电机控制程序中。
可是在程序运行时,观察邮箱内存地址中的数据都是0,自测试模式也无法通过。
感觉就像是给寄存器写的值完全没起到作用,可是前面也有模仿motorware编程方式将寄存器指针域与地址相联系起来。
尝试直接定义一个指向邮箱存储内容的指针往里面写数据也无法改变邮箱内的数据(一直都为0)。
想了很久也没有想到错误原因和解决办法,所以特来向各位前辈求教,希望大家能够指点一二,先谢谢大家了!
deping long:
回复 Zhenghu wang:
我是用的是cmd文件的方式来将寄存器与内存地址相对应的,可以用现成的CAN寄存器结构体,不用自己添加地址对应函数。
现在在做往Motorware电机控制例程中添加CAN通信的内容。因为controlsuite与motorware编程风格不一样,且Motorware的例程中没有对can的寄存器进行封装,编写相应的结构体。所以自己模仿其他外设模块的编程方式写了一个can.c的文件,利用can.h定义的结构体来编写程序。
其中两部分程序如下图所示:
1. 将定义的寄存器结构体与对应的内存地址相联系
2. 往邮箱里写入初始数据
此外,还将controlsuite例程中关于can的初始化程序按照新定义的结构体重新修改一遍并移植到电机控制程序中。
可是在程序运行时,观察邮箱内存地址中的数据都是0,自测试模式也无法通过。
感觉就像是给寄存器写的值完全没起到作用,可是前面也有模仿motorware编程方式将寄存器指针域与地址相联系起来。
尝试直接定义一个指向邮箱存储内容的指针往里面写数据也无法改变邮箱内的数据(一直都为0)。
想了很久也没有想到错误原因和解决办法,所以特来向各位前辈求教,希望大家能够指点一二,先谢谢大家了!
Linda:
回复 deping long:
您好!
hal.c中的HAL_Handle HAL_init(void *pMemory,const size_t numBytes)这个函数中需要添加对于CAN相关handle的初始化,这个需要注意一下的。
现在在做往Motorware电机控制例程中添加CAN通信的内容。因为controlsuite与motorware编程风格不一样,且Motorware的例程中没有对can的寄存器进行封装,编写相应的结构体。所以自己模仿其他外设模块的编程方式写了一个can.c的文件,利用can.h定义的结构体来编写程序。
其中两部分程序如下图所示:
1. 将定义的寄存器结构体与对应的内存地址相联系
2. 往邮箱里写入初始数据
此外,还将controlsuite例程中关于can的初始化程序按照新定义的结构体重新修改一遍并移植到电机控制程序中。
可是在程序运行时,观察邮箱内存地址中的数据都是0,自测试模式也无法通过。
感觉就像是给寄存器写的值完全没起到作用,可是前面也有模仿motorware编程方式将寄存器指针域与地址相联系起来。
尝试直接定义一个指向邮箱存储内容的指针往里面写数据也无法改变邮箱内的数据(一直都为0)。
想了很久也没有想到错误原因和解决办法,所以特来向各位前辈求教,希望大家能够指点一二,先谢谢大家了!
user524568:
回复 deping long:
请问Deping Long ,你是怎么加进去的,我加can.h后,编好发送和接收函数,编译时出现error #10234-D: unresolved symbols remain错误,说_ECanaRegs和_ECanaMboxes没有定义,但ECanaRegs和ECanaMbox它们都在can.h中定义了呀,请教你是怎么解决的?
wangzh_2004@163.com