历史上的今天
返回首页

历史上的今天

今天是: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失败.

}



推荐阅读

史海拾趣

Beckhoff Automation GmbH公司的发展小趣事

随着电子行业的全球化趋势日益明显,BCD Semi公司积极拓展国内外市场,与众多知名企业建立了紧密的合作关系。公司通过与合作伙伴共同研发、生产和销售半导体产品,实现了资源共享和优势互补,进一步提升了市场竞争力。同时,BCD Semi还积极参加国际电子展会和交流活动,展示公司的最新技术和产品,为公司的品牌建设和市场拓展奠定了坚实的基础。

Hitano Enterprise Corp公司的发展小趣事

随着电子行业的全球化趋势日益明显,BCD Semi公司积极拓展国内外市场,与众多知名企业建立了紧密的合作关系。公司通过与合作伙伴共同研发、生产和销售半导体产品,实现了资源共享和优势互补,进一步提升了市场竞争力。同时,BCD Semi还积极参加国际电子展会和交流活动,展示公司的最新技术和产品,为公司的品牌建设和市场拓展奠定了坚实的基础。

Esico-Triton公司的发展小趣事

进入XXXX年代,Esico-Triton开始将目光投向国际市场。公司积极参加国际电子展会,与世界各地的潜在客户和合作伙伴建立联系。通过不断的市场调研和产品调整,Esico-Triton成功打入欧洲和亚洲市场,产品的国际知名度逐渐提升。

DEWALT公司的发展小趣事

DEWALT公司成立于1924年,由雷蒙得伟(Raymond Dewalt)创立。他是一位富有远见的发明家和企业家,对电动工具行业有着浓厚的兴趣。雷蒙得伟发明了摇臂锯,这一创新产品成为当时市场上的一颗新星。凭借这一发明,DEWALT公司开始进入电动工具行业,并逐渐在市场中树立了自己的品牌形象。

American Technical Ceramics (ATC)公司的发展小趣事

DEWALT公司成立于1924年,由雷蒙得伟(Raymond Dewalt)创立。他是一位富有远见的发明家和企业家,对电动工具行业有着浓厚的兴趣。雷蒙得伟发明了摇臂锯,这一创新产品成为当时市场上的一颗新星。凭借这一发明,DEWALT公司开始进入电动工具行业,并逐渐在市场中树立了自己的品牌形象。

eLED.com Corp公司的发展小趣事

随着国内市场的逐渐饱和,eLED.com Corp开始将目光投向国际市场。公司积极参与各类国际展会,向全球客户展示其优质的产品和技术。同时,eLED.com Corp还与国际知名企业开展合作,共同研发新技术,推动LED行业的发展。通过与国际巨头的合作,eLED.com Corp不仅提升了自身的技术水平,还拓展了国际市场,实现了品牌的全球化布局。

问答坊 | AI 解惑

全球前三大电容式触控IC厂家 Quantum 芯片选型手册

全球前三大电容式触控IC厂家  Quantum 芯片选型手册…

查看全部问答>

嵌入式系统设计师教程

与有志于此的朋友共勉 …

查看全部问答>

学习FPGA的SOPC

我感觉自己用SOPC定制软核功能强大,而且随心所遇不必要的功能可以去掉,必要的功能可以改进!最近弄这块,做的很开心…

查看全部问答>

win32程序怎么显示程序图标??

mfc程序我会显示.ico。win32程序怎么搞? app菜鸟期待指点…

查看全部问答>

设计彩信报警器快捷途径. 一款集成彩信的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 ...…

查看全部问答>

串口数据发接

我用DMA方式使用串口接发数据,但是接受到的都是0,为什么?…

查看全部问答>

多功能锂电池充电板应用

  邮购到几种充电板,经通电测试发现其中的一块用MM1332G集成电路的充电板输出4.15v电压,充电集成电路为HHl332G,查资料得知,该集成电路为日本美上美公司产专用恒流恒压锂离子电池充电IC,内含电池电压检测、充满电检测,控制每节截止充电电压 ...…

查看全部问答>

单片机教程之单片机的内外部结构分析二

单片机 教程-延时程序分析  上一次课中,我们已经知道,程序中的符号R7、R6是代表了一个个的RAM单元,是用来放一些数据的,下面我们再来看一下其它符号的含义。 1. MOV:这是一条指令,意思是传递数据。   说到传递,我们都很清楚, ...…

查看全部问答>

TFTP如何实现那几个回调函数?

哪位大侠知道TFTP这几个回调函数需要实现什么功能,如何实现吗? 希望能交流下,谢谢!   typedef tTFTPError (* tTFTPRequest)(struct _tTFTPConnection *psTFTP,           &nbs ...…

查看全部问答>

LM3S9B96 safertos启动调度器失败?

将官方例程去掉几个任务后,就剩下空闲任务、LED任务和显示任务,运行一下,液晶屏显示:Failed to start scheduler!,这说明几个任务都创建成功了,但是调度器为什么会启动失败呢?看了下手册,调度器启动失败的可能原因有:1.在启动调度器之前没 ...…

查看全部问答>