1、如何实现CAN通讯发送32位float型数据?库函数定义的是16位无符号整数
extern void
CAN_sendMessage(uint32_t base, uint32_t objID, uint16_t msgLen,
const uint16_t *msgData);
2、程序用can传递某个变量的值,该变量是总中断更新一次,如何实现数据段的更新?
把一下程序放在中断里,可以实现吗?
// Initialize the transmit message object data buffer to be sent
//
txMsgData=pi_pos.Fbk;
//
// Start CAN module A operations
//
CAN_startModule(CANA_BASE);
//
// Transmit messages from CAN-A
//
CAN_sendMessage(CANA_BASE, TX_MSG_OBJ_ID, MSG_DATA_LENGTH, txMsgData);
3、需要用到多个邮箱,是否重复一下程序即可?
CAN_setupMessageObject(CANA_BASE, TX_MSG_OBJ_ID, 0x95555555,
CAN_MSG_FRAME_EXT, CAN_MSG_OBJ_TYPE_TX, 0,
CAN_MSG_OBJ_NO_FLAGS, MSG_DATA_LENGTH);
// Initialize the transmit message object data buffer to be sent
//
txMsgData=pi_pos.Fbk;
//pi_id.fbk;
//
// Start CAN module A operations
//
CAN_startModule(CANA_BASE);
//
// Transmit messages from CAN-A
//
//while(1)
//
// Comment for infinite transmissions
//
//for(i = 0; i < TXCOUNT; i++)
//
//{
CAN_sendMessage(CANA_BASE, TX_MSG_OBJ_ID, MSG_DATA_LENGTH, txMsgData);
//
user6510059:
打错了,是F28379d的can通讯。
,
Susan Yang:
user6510059 说:1、如何实现CAN通讯发送32位float型数据?库函数定义的是16位无符号整数
您可以尝试将float转化为unsigned char类型的数据打包发送
user6510059 说:2、程序用can传递某个变量的值,该变量是总中断更新一次,如何实现数据段的更新?
没有太理解您的意思,能否详细说明一下?
user6510059 说:把一下程序放在中断里,可以实现吗?
可以的
user6510059 说:3、需要用到多个邮箱,是否重复一下程序即可?
是的,您的理解是正确的
,
user6510059:
谢谢,我去试试
,
Susan Yang:
期待您的反馈
,
user6510059:
已解决float型数据转换。程序如下:
//用union 类型,共用数据空间;
union change{float32_t a;uint16_t dat[2];}r1;
r1.a= svgen1.Ta;
//txMsgData只能保存1个字节的内容,是8位数据,因此用2个txMsgData分别保存r1.dat[0]的低8位和高8位txMsgData1[0]=r1.dat[0]&0xff;//low 8 bitstxMsgData1[1]=r1.dat[0]>>8;//high 8 bitstxMsgData1[2]=r1.dat[1]&0xff;//txMsgData1[3]=r1.dat[1]>>8;//