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_FilterIdHighCAN_FilterIdLowCAN_FilterMaskIdHighCAN_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掩码完整数值
  • 14
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 下面是使用STM32CubeMx初始化结构体的示例代码: ``` /* FFT handler declaration */ arm_cfft_radix4_instance_f32 S; /* FFT configuration structure */ static arm_cfft_radix4_instance_f32_config FFT_Config; /* Initialize FFT configuration structure */ FFT_Config.fftLen = FFT_LENGTH; FFT_Config.ifftFlag = 0; FFT_Config.bitReverseFlag = 1; FFT_Config.twidCoefModifier = 1; /* Initialize FFT instance */ arm_cfft_radix4_init_f32(&S, FFT_LENGTH, 0, 1); /* Set FFT configuration */ arm_cfft_radix4_setConfig(&S, &FFT_Config); ``` 其中,`arm_cfft_radix4_instance_f32` 是 FFT 处理器的实例结构体,`arm_cfft_radix4_instance_f32_config` 是 FFT 配置结构体,`FFT_LENGTH` 是 FFT 处理的长度。你可以根据具体的需求修改这些参数。 ### 回答2: 在使用STMCubeMX进行STM32F系列微控制器的初始化时,必须设置FFT(快速傅里叶变换)功能的初始化结构体。这个结构体包含了FFT的各种参数和配置选项。 初始化结构体主要包括以下几个重要成员: 1. FFT求解模式(Mode):可以选择单向FFT模式或者双向FFT模式。单向FFT用于计算正向FFT,而双向FFT可以同时计算正向和逆向FFT。 2. 输入取样位宽(InputTrigger):设置FFT输入的数据位宽,可以选择8位、12位或16位。 3. 输入采样频率(InputSamplingFreq):设置FFT输入采样频率,它应该与实际的输入信号频率匹配。 4. 数据类型(DataType):选择输入数据的数据类型,可以是浮点数类型(Float)或固定点数类型(Int)。 5. 输入缓冲区(pInputBuffer):设置FFT输入数据的缓冲区指针。 6. 输出缓冲区(pOutputBuffer):设置FFT输出数据的缓冲区指针。 7. FFT大小(FFTSize):设置FFT的大小,它应当是2的幂次方(如16、32、64等),决定了FFT的频率分辨率。 以上只是初始化结构体的一部分成员,还有其他一些可选的配置选项,如窗函数、输出格式等。通过在STMCubeMX工具中选择所需的参数和选项,可以生成相应的初始化代码。 ### 回答3: 在使用STM32CubeMX生成代码时,我们可以使用FFT(快速傅里叶变换)模块。以下是初始化FFT模块所需的结构体的设置方法: 首先,在CubeMX的配置界面中,选择需要使用FFT功能的定时器。然后,选择“Configuration”选项卡,找到“Middleware”部分,点击“FFT”的复选框以使其激活。 接下来,点击“FFT”配置的右侧按钮,打开“FFT Configuration”面板。在此面板上,我们可以设置FFT模块的相关参数。 第一个参数是“Number of FFT Points”,即FFT点数。这决定了FFT的分辨率和计算量。可以根据需求选择适当的值,例如256、512、1024等。 第二个参数是“Sampling Frequency”,即采样频率。这是原始信号的采样频率,决定了FFT结果的频率范围。根据实际应用,选择适当的采样频率,如10 kHz、20 kHz等。 第三个参数是“Windowing Mode”,即窗函数模式。窗函数用于减小FFT结果中的频谱泄露问题。可以选择不同的窗函数,如矩形窗、汉宁窗等。 最后,点击“OK”按钮应用设置。现在,我们已经完成了FFT模块的初始化结构体的设置。 在生成代码后,可以在初始化代码中找到相关结构体。在这里,CubeMX已经为我们自动生成了相应的初始化代码,主要包括设置时钟、配置中断优先级等。 总之,通过使用CubeMX,我们可以很方便地初始化FFT模块的结构体,并生成相应的初始化代码。这样,我们就可以在STM32上使用FFT功能进行信号处理和频谱分析了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

YRr YRr

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值