Hero Image
使用CUBEMX配置CANFD

3. 配置CANFD 3.1 波特率计算 波特率 波特率 = FDCAN时钟频率 / (NominalPrescaler × (1 + NominalTimeSeg1 + NominalTimeSeg2)) 时间量子(TQ) 时间量子也就是一个Tick的时间 时间量子 = FDCAN时钟频率 / NominalPrescaler 位时间 这里的1就是同步段NominalSyncJumpWidth,同步段一般设置为固定的1TQ; NominalTimeSeg1决定了采样点的位置,采样点在NominalTimeSeg1段的结束处; NominalTimeSeg2是采样点到位结束的距离,越大对抖动的容忍度越高。 位时间 = 1 + NominalTimeSeg1 + NominalTimeSeg2 个时间量子 采样点 采样点一般设置在75%左右。 采样点位置 = (1 + NominalTimeSeg1) / (1 + NominalTimeSeg1 + NominalTimeSeg2) 波特率设置注意事项 1. NominalPrescaler应该尽可能小,以提高采样精度,减少误差; 2. CANFD推荐仲裁域NominalPrescaler <= 数据域NominalPrescaler; 3. SJW应尽量大,尽量保持与TSEG2一致,以提高位宽容忍度; 4. 波特率大于800K,推荐采样点在75%;波特率大于500K,推荐采样点在80%;波特率小于500K,推荐采样点在87.5%; 5. 尽量保证总线上所有节点的采样点一致,CANFD的仲裁域和数据域采样点不要求一致; 6. CANFD仲裁域与数据域的波特率之比应该大于等于1/8. 3.2 配置参数 在这里我们目标是使用CANFD的加速模式,仲裁域波特率为1M,数据域波特率为2M。 Frame Format Classic mode : 标准的can模式,非CANFD,单帧数据最多8个字节。 FD mode without BitRate Switching:CANFD模式,仲裁域和数据域波特率相同,CANFD单帧数据可扩展至64个字节。 FD mode with BitRate Switching:CANFD加速模式,数据域波特率可与仲裁域波特率不同,数据域波特率大于仲裁域波特率。 Data Prescaler 这里是数据域的波特率设置,在CANFD加速模式下有效。

Hero Image
使用CUBEMX配置单片机时钟

STM32开发记录 1. 配置时钟 开发流程是先使用STM32CubeMX软件生成项目框架,然后再使用Keil进行软件开发。 1. STM32CubeMX 1.1 配置Debug信息 在Pinout&Configuration下点击 Trace and Debug->DEBUG 选择Serial Wire。 Serial Wire Debug (SWD) 是ARM Cortex-M系列微控制器的一种调试接口,它是JTAG接口的简化版本。 1.2 配置系统时钟 控制板采用的是24MHZ无源晶振,在Pinout&Configuration选择RCC->HSE选择Crystal/Ceramic Resonator。其中HSE为外部时钟,LSE 为内部时钟,使用外部时钟能比内部时钟更加稳定高效。Crystal/Ceramic Resonator为无源晶振;BYPASS Clock Source为有源晶振。 切换到Clock Configuration修改Input frequency的频率为24,其他参数按照下图修改。 1.2.1 总线时钟 总线时钟是整个系统中非常重要的一个时钟信号,为许多核心外设和总线提供了时钟源。和单片机的功耗有直接关系。 AHB总线时钟在CUBEMX中的位置如下图红色框出部分所示。 1.2.2 功耗 芯片的功耗和设置的总线时钟源相关,具体可以参考对应芯片的数据手册,在手册中搜索Supply current characteristics,查看对应的表格。 有上表可见,系统的功耗和芯片所处的VOS(稳压器电压调试等级)相关,默认VOS0可以提供全功率,调节VOS等级可以使得功耗得到优化。在cubemx中设置好时钟源之后,可以在Pinout & Configuration -> System Core -> RCC 下设置对应的VOS等级。如下图所示。 1.3 配置代码生成 点击右上角 GENERATE CODE 生成 KEIL项目代码。