历史上的今天
今天是:2025年01月14日(星期二)
2019年01月14日 | stm32 can通信发送解释
2019-01-14 来源:eefocus
uint8_t CAN_Transmit(CAN_TypeDef* CANx, CanTxMsg* TxMessage)
{
uint8_t transmit_mailbox = 0;
/* Check the parameters */
assert_param(IS_CAN_ALL_PERIPH(CANx));
assert_param(IS_CAN_IDTYPE(TxMessage->IDE));
assert_param(IS_CAN_RTR(TxMessage->RTR));
assert_param(IS_CAN_DLC(TxMessage->DLC));
/* Select one empty transmit mailbox */ 选择一个空邮箱
if ((CANx->TSR&CAN_TSR_TME0) == CAN_TSR_TME0)
{
transmit_mailbox = 0;
}
else if ((CANx->TSR&CAN_TSR_TME1) == CAN_TSR_TME1)
{
transmit_mailbox = 1;
}
else if ((CANx->TSR&CAN_TSR_TME2) == CAN_TSR_TME2)
{
transmit_mailbox = 2;
}
else
{
transmit_mailbox = CAN_TxStatus_NoMailBox;//没有邮箱,这个值是4
}
if (transmit_mailbox != CAN_TxStatus_NoMailBox)//主要是配置邮箱的4个寄存器
{
/* Set up the Id */
CANx->sTxMailBox[transmit_mailbox].TIR &= TMIDxR_TXRQ;
if (TxMessage->IDE == CAN_Id_Standard)//如果是标准侦
{
assert_param(IS_CAN_STDID(TxMessage->StdId)); //CAN_TIxR(寄存器)(0~2)
CANx->sTxMailBox[transmit_mailbox].TIR |= ((TxMessage->StdId << 21) | \
TxMessage->RTR);
}
else//扩展侦
{
assert_param(IS_CAN_EXTID(TxMessage->ExtId));//CAN_TIxR(寄存器)(0~2)
CANx->sTxMailBox[transmit_mailbox].TIR |= ((TxMessage->ExtId << 3) | \
TxMessage->IDE | \
TxMessage->RTR);
}
/* Set up the DLC */
TxMessage->DLC &= (uint8_t)0x0000000F;//邮箱数据长度和时间戳寄存器CAN_TDTxR
CANx->sTxMailBox[transmit_mailbox].TDTR &= (uint32_t)0xFFFFFFF0;
CANx->sTxMailBox[transmit_mailbox].TDTR |= TxMessage->DLC;//数据长度
/* Set up the data field */设置数据寄存器有高4字节和低4字节
CANx->sTxMailBox[transmit_mailbox].TDLR = (((uint32_t)TxMessage->Data[3] << 24) |
((uint32_t)TxMessage->Data[2] << 16) |
((uint32_t)TxMessage->Data[1] << 8) |
((uint32_t)TxMessage->Data[0]));
CANx->sTxMailBox[transmit_mailbox].TDHR = (((uint32_t)TxMessage->Data[7] << 24) |
((uint32_t)TxMessage->Data[6] << 16) |
((uint32_t)TxMessage->Data[5] << 8) |
((uint32_t)TxMessage->Data[4]));
/* Request transmission */
CANx->sTxMailBox[transmit_mailbox].TIR |= TMIDxR_TXRQ;//请求发送
}
return transmit_mailbox;//返回0~2就成功,4失败.
}
史海拾趣
|
设计彩信报警器快捷途径. 一款集成彩信的GPRS模块 IWOW TR800 GPRS模块 TR800是新加坡iwow公司的一款GPRS模块,采用TI的基带芯片,性能稳定,性价比高,它的主要特性如下: ? 频段支持:三频 (EGSM900 / DCS 1800 / PCS 1900) and 四频 (GSM850 / EGSM 900 / DCS 1800 / PCS 1900) ? 高速GPRS传输: Multi-Slot Class 1 ...… 查看全部问答> |
|
邮购到几种充电板,经通电测试发现其中的一块用MM1332G集成电路的充电板输出4.15v电压,充电集成电路为HHl332G,查资料得知,该集成电路为日本美上美公司产专用恒流恒压锂离子电池充电IC,内含电池电压检测、充满电检测,控制每节截止充电电压 ...… 查看全部问答> |
|
单片机 教程-延时程序分析 上一次课中,我们已经知道,程序中的符号R7、R6是代表了一个个的RAM单元,是用来放一些数据的,下面我们再来看一下其它符号的含义。 1. MOV:这是一条指令,意思是传递数据。 说到传递,我们都很清楚, ...… 查看全部问答> |
|
哪位大侠知道TFTP这几个回调函数需要实现什么功能,如何实现吗? 希望能交流下,谢谢! typedef tTFTPError (* tTFTPRequest)(struct _tTFTPConnection *psTFTP, &nbs ...… 查看全部问答> |
|
将官方例程去掉几个任务后,就剩下空闲任务、LED任务和显示任务,运行一下,液晶屏显示:Failed to start scheduler!,这说明几个任务都创建成功了,但是调度器为什么会启动失败呢?看了下手册,调度器启动失败的可能原因有:1.在启动调度器之前没 ...… 查看全部问答> |




