STM32 CAN控制的相关结构体(标准库)

STM32 CAN控制的相关结构体(标准库)

初始化结构体: CAN_InitTypeDef

  • CAN_Prescaler

    • 本成员设置CAN外设的时钟分频,它可控制时间片Tq的时间长度,这里设置的值最终会减1后再写入BRP寄存器位,即前面介绍的Tq计算公式:
      • Tq = (BRP[9:0]+1) x TPCLK
      • 等效于: Tq = CAN_Prescaler x TPCLK
  • CAN_Mode

    • 本成员设置CAN的工作模式,可设置为正常模式(CAN_Mode_Normal)、回环模式(CAN_Mode_LoopBack)、静默模式(CAN_Mode_Silent)以及回环静默模式(CAN_Mode_Silent_LoopBack)。
  • CAN_SJW

    • 本成员可以配置SJW的极限长度,即CAN重新同步时单次可增加或缩短的最大长度,它可以被配置为1-4Tq(CAN_SJW_1/2/3/4tq)。
  • CAN_BS1

    • 本成员用于设置CAN位时序中的BS1段的长度,它可以被配置为1-16个Tq长度(CAN_BS1_1/2/3...16tq)。
  • CAN_BS2

    • 本成员用于设置CAN位时序中的BS2段的长度,它可以被配置为1-8个Tq长度(CAN_BS2_1/2/3...8tq)。
      SYNC_SEG、 BS1段及BS2段的长度加起来即一个数据位的长度,即前面介绍的原来计算公式:
      • T1bit =1Tq+TS1+TS2 =1+ (TS1[3:0] + 1)+ (TS2[2:0] + 1)
      • 等效于: T1bit = 1Tq+CAN_BS1+CAN_BS2
  • CAN_TTCM

    • 本成员用于设置是否使用时间触发功能(ENABLE/DISABLE),时间触发功能在某些CAN标准中会使用到。
  • CAN_ABOM

    • 本成员用于设置是否使用自动离线管理(ENABLE/DISABLE),使用自动离线管理可以在节点出错离线后适时自动恢复,不需要软件干预。
  • CAN_ AWUM

    • 本成员用于设置是否使用自动唤醒功能(ENABLE/DISABLE),使能自动唤醒功能后它会在监测到总线活动后自动唤醒。
  • CAN_NART

    • 本成员用于设置是否使用自动重传功能(ENABLE/DISABLE),使用自动重传功能时,会一直发送报文直到成功为止。
  • CAN_RFLM

    • 本成员用于设置是否使用锁定接收FIFO(ENABLE/DISABLE),锁定接收FIFO后,若FIFO溢出时会丢弃新数据,否则在FIFO溢出时以新数据覆盖旧数据。
  • CAN_TXFP

    • 本成员用于设置发送报文的优先级判定方法(ENABLE/DISABLE),使能时,以报文存入发送邮箱的先后顺序来发送,否则按照报文ID的优先级来发送

发送及接收结构体: CanTxMsg及CanRxMsg

CanTxMsg

  • 在发送或接收报文时,需要往发送邮箱中写入报文信息或从接收FIFO中读取报文信息,利用STM32标准库的发送及接收结构体可以方便地完成这样的工作。
  • StdId

    • 本成员存储的是报文的11位标准标识符,范围是0-0x7FF。
  • ExtId

    • 本成员存储的是报文的29位扩展标识符,范围是0-0x1FFFFFFF。 ExtId与StdId这两个成员根据下面的IDE位配置,只有一个是有效的。
  • IDE

    • 本成员存储的是扩展标志IDE位,当它的值为宏CAN_ID_STD时表示本报文是标准帧,使用StdId成员存储报文ID;当它的值为宏CAN_ID_EXT时表示本报文是扩展帧,使用ExtId成员存储报文ID。
  • RTR

    • 本成员存储的是报文类型标志RTR位,当它的值为宏CAN_RTR_Data时表示本报文是数据帧;当它的值为宏CAN_RTR_Remote时表示本报文是遥控帧,由于遥控帧没有数据段,所以当报文是遥控帧时,下面的Data[8]成员的内容是无效的。
  • DLC

    • 本成员存储的是数据帧数据段的长度,它的值的范围是0-8,当报文是遥控帧时DLC值为0。
  • Data[8]

    • 本成员存储的就是数据帧中数据段的数据。

CanRxMsg

  • FMI
    • 本成员只存在于接收结构体,它存储了筛选器的编号,表示本报文是经过哪个筛选器存储进接收FIFO的,可以用它简化软件处理。
  • 当需要使用CAN发送报文时,先定义一个上面发送类型的结构体,然后把报文的内容按成员赋值到该结构体中,最后调用库函数CAN_Transmit把这些内容写入到发送邮箱即可把报文发送出去。
  • 接收报文时,通过检测标志位获知接收FIFO的状态,若收到报文,可调用库函数CAN_Receive把接收FIFO中的内容读取到预先定义的接收类型结构体中,然后再访问该结构体即可利用报文。

筛选器结构体: CAN_FilterInitTypeDef

  • CAN_FilterIdHigh
    • CAN_FilterIdHigh成员用于存储要筛选的ID,若筛选器工作在32位模式,它存储的是所筛选ID的高16位;若筛选器工作在16位模式,它存储的就是一个完整的要筛选的ID。
  • CAN_FilterIdLow
    • 类似地, CAN_FilterIdLow成员也是用于存储要筛选的ID,若筛选器工作在32位模式,它存储的是所筛选ID的低16位;若筛选器工作在16位模式,它存储的就是一个完整的要筛选的ID。
  • CAN_FilterMaskIdHigh
    • CAN_FilterMaskIdHigh存储的内容分两种情况,当筛选器工作在标识符列表模式时,它的功能与CAN_FilterIdHigh相同,都是存储要筛选的ID;而当筛选器工作在掩码模式时,它存储的是CAN_FilterIdHigh成员对应的掩码,与CAN_FilterIdLow组成一组筛选器。
  • CAN_FilterMaskIdLow
    • 类似地, CAN_FilterMaskIdLow存储的内容也分两种情况,当筛选器工作在标识符列表模式时,它的功能与CAN_FilterIdLow相同,都是存储要筛选的ID;而当筛选器工作在掩码模式时,它存储的是CAN_FilterIdLow成员对应的掩码,与CAN_FilterIdLow组成一组筛选器。
  • CAN_FilterFIFOAssignment
    • 本成员用于设置当报文通过筛选器的匹配后,该报文会被存储到哪一个接收FIFO,它的可选值为FIFO0或FIFO1(宏CAN_Filter_FIFO0/1)。
  • CAN_FilterNumber
    • 本成员用于设置筛选器的编号,即本过滤器结构体配置的是哪一组筛选器, CAN一共有28个筛选器,所以它的可输入参数范围为0-27。
  • CAN_FilterMode
    • 本成员用于设置筛选器的工作模式,可以设置为列表模式(宏CAN_FilterMode_IdList)及掩码模式(宏CAN_FilterMode_IdMask)。
  • CAN_FilterScale
    • 本成员用于设置筛选器的尺度,可以设置为32位长(宏CAN_FilterScale_32bit)及16位长(宏CAN_FilterScale_16bit)。
  • CAN_FilterActivation
    • 本成员用于设置是否激活这个筛选器(宏ENABLE/DISABLE)。

不同模式下各结构体成员的内容:

模式 CAN_FilterIdHigh CAN_FilterIdLow CAN_FilterMaskIdHigh CAN_FilterMaskIdLow
32位列表模式 ID1的高16位 ID1的低16位 ID2的高16位 ID2的低16位
16位列表模式 ID1的完整数值 ID2的完整数值 ID3的完整数值 ID4的完整数值
32位掩码模式 ID1的高16位 ID1的低16位 ID1掩码的高16位 ID1掩码的低16位
16位掩码模式 ID1的完整数值 ID2的完整数值 ID1掩码的完整数值 ID2掩码完整数值
相关推荐
hahaha60162 分钟前
RK3588和FPGA桥片之间IO电平信号概率性不能通信原因
单片机·嵌入式硬件·fpga开发
茯苓gao3 小时前
STM32G4 电机外设篇(三) TIM1 发波 和 ADC COMP DAC级联
stm32·单片机·嵌入式硬件
君鼎3 小时前
STM32——CAN总线
stm32·单片机·嵌入式硬件
阿川!3 小时前
嵌入式软件--stm32 DAY 8.5 基础复习总结
stm32·单片机·嵌入式硬件
小猪写代码7 小时前
STM32中,如何理解看门狗
stm32·单片机·嵌入式硬件
Lester_11017 小时前
嵌入式学习笔记 - STM32 HAL库以及标准库内核以及外设头文件区别问题
笔记·stm32·单片机·学习
小智学长 | 嵌入式8 小时前
SOC-ESP32S3部分:23-文件系统
单片机·esp32
不脱发的程序猿9 小时前
MCU如何从向量表到中断服务
单片机·嵌入式硬件
仰泳之鹅13 小时前
【STM32F1标准库】理论——定时器/计数器中断
stm32·单片机·嵌入式硬件
Ronin-Lotus13 小时前
嵌入式硬件篇---蜂鸣器
嵌入式硬件·有源蜂鸣器·无源蜂鸣器