STM32G474 中包含了针对数字电源应用的高精度定时器(HRTIMER),客户在应用该定时器 产生 PWM 时,发现 PWM 的输出出现了“丢波”现象,本文对该问题进行分析并给出解决方案。客户使用高精度定时器产生 PWM, 其 PWM 产生的配置如下,Master Timer 的 period event与 compare 1 event 分别作为 Timer A 与 Timer B 的复位源,Timer A 与 Timer B 产生的 180 度移相的 PWM 输出,EEV4 作为外部事件来触发 PWM reset, 并且使用 blanking 功能过滤发生在PWM set 点附近的 EEV4 事件,Timer compare 3 event 用来限制 PWM 的最大占空比,当 PWM周期内没有 EEV4 发生或是发生的时间点晚于 compare 3 事件时,Timer compare 3 event 将触发PWM reset。 ### 应用笔记LAT1167+STM32G474+HRTIME+PWM+丢波问题分析与解决 #### 1. 前言 在本篇文章中,我们将深入探讨一个关于STM32G474微控制器在使用其内置的高精度定时器(HRTIMER)来产生脉冲宽度调制(PWM)信号时所遇到的一个具体问题——即“丢波”现象,并提供一种可行的解决方案。STM32G474是一款高性能、低功耗的微控制器,特别适合应用于数字电源控制等场合。该控制器配备有高级定时器模块HRTIMER,能够满足高精度PWM输出的需求。 #### 2. 问题描述 客户在配置HRTIMER用于产生PWM时,遇到了“丢波”的情况。具体配置如下: - **Master Timer**: - 工作模式:交错模式(Half mode) - Timer A 和 Timer B 的计数器重置触发源分别由Master Timer的周期事件(period event)和比较1事件(compare 1 event)提供。 - PWM 设置源和复位源:对于Timer A 和 Timer B,PWM的设置源同样分别为Master Timer的周期事件和比较1事件;而PWM的复位源则由Timer compare 3 event 和外部事件EEV4共同决定。 - **EEV4**(外部事件输入4): - 源:比较器1(COMP1)的下降沿 - 快速模式:重新同步模式(re-sync mode) - 过滤功能:从计数器重置/溢出到比较1期间的事件将被消隐(blanking) 这种配置的目的在于产生两路相位相差180度的PWM输出,并且通过外部事件EEV4来复位PWM,同时利用消隐功能避免在PWM设置点附近发生EEV4事件导致的错误触发。 #### 3. 问题分析 在正常情况下,此配置能够成功地产生预期的PWM信号。然而,在某些特定条件下,当外部事件EEV4接近PWM周期值发生时,会出现“丢波”的现象。具体来说,“丢波”是指在连续的PWM周期中,某一周期内的信号未能正确输出或输出时间异常缩短的情况。 **原因分析**: - 当外部事件EEV4接近PWM周期值发生时,它可能会与Timer compare 3 event触发的PWM复位冲突。这是因为两者都可能在接近PWM周期结束时触发PWM复位,从而导致实际的PWM输出时间异常缩短或者完全丢失。 - 另外,虽然配置中启用了消隐功能来避免在PWM设置点附近的EEV4事件触发,但由于EEV4事件与PWM设置点之间的时间间隔较短,这可能导致消隐机制未能有效工作。 #### 4. 解决方案 为了解决上述“丢波”问题,可以采取以下措施: 1. **调整消隐窗口**:通过增加消隐窗口的长度,确保EEV4事件不会在PWM设置点附近触发。这可以通过调整计数器重置/溢出到比较1之间的消隐区间来实现。 2. **优化外部事件触发逻辑**:考虑修改EEV4的触发逻辑,例如改变其触发条件或延迟触发时间,以避免其与Timer compare 3 event冲突。 3. **调整Timer compare 3 event的阈值**:通过调整Timer compare 3 event的触发条件,使其触发时间更早,从而减少与EEV4事件之间的冲突可能性。 #### 5. 结论 通过对STM32G474中HRTIMER产生的PWM信号出现“丢波”现象的原因进行深入分析,并提出相应的解决方案,我们能够有效地提高系统的稳定性和可靠性。未来还可以进一步探索其他参数调整的方法,以适应不同应用场景下的需求。
2025-05-07 14:16:07 1022KB stm32 HRTIMER
1
初学CANFD, 把发送FDCAN报文的程序调试成功了. 这里把通过STM32CubeMX做的配置做了记录, 并把调试好的程序一起打包起来供初学者参考. 1. 硬件: 系统时钟 160M; FDCAN2引脚: PB12(Rx),PB13(Tx), CAN收发器用的是TJA1051T CANFD的监听设备 PCAN-FD, 软件 PCAN-View. 2. FDCAN参数 仲裁段: 时钟: 40MHz; Nominal Bit rate: 500Kbit/s; 采样点 0.8 数据段: 时钟 : 40MHz Data Bit rate:2Mbit/s 采样点 0.75
2025-05-06 15:11:15 22.64MB STM32G474 STM32CUBEMX CANFD PCAN
1
STM32G474是意法半导体(STMicroelectronics)推出的一款基于ARM Cortex-M4内核的微控制器,属于STM32G4系列。该系列芯片拥有高速处理能力和丰富的外设接口,广泛应用于嵌入式系统设计。在STM32G474中,Flash存储器是重要的组成部分,它用于存储程序代码、配置数据和用户数据。本文将详细讲解STM32G474的Flash读写操作,并基于描述中提到的"仿LL库"进行解析。 STM32的Low Layer (LL)库是一种轻量级的底层驱动库,提供接近硬件层的API函数,以简化开发者对特定外设的操作。LL库通常比HAL库更加灵活且效率更高,适合对性能有较高要求的应用。在STM32G474的Flash读写中,`stm32g4xx_ll_flash.c`和`stm32g4xx_ll_flash.h`文件包含了相关的LL库函数定义和实现。 1. **Flash读操作**: - `LL_FLASH_ReadWord(uint32_t Address)`: 这个函数用于读取Flash中的32位数据。Address参数为要读取的Flash地址。 - 在实际应用中,可以使用这个函数来读取已编程的程序代码或存储在Flash中的配置数据。 2. **Flash写操作**: - `LL_FLASH_ProgramWord(uint32_t Address, uint32_t Data)`: 此函数用于写入32位Data到Flash的指定Address。在写入前,必须确保该地址没有被保护,并且满足最小编程单位(一般为4字节)的要求。 - 写入操作通常包括擦除和编程两个步骤。在STM32G474中,Flash的擦除是以页为单位进行的,每页大小通常为2K字节。`LL_FLASH_ErasePage(uint32_t PageAddress)`函数用于擦除指定页。 3. **Flash编程和验证**: - `LL_FLASH_EnableWriteProtection(uint32_t FlashRegion)`: 为了防止意外修改Flash内容,可以启用写保护功能。 - `LL_FLASH_IsOperationReady(void)`: 检查Flash操作(如编程或擦除)是否完成,避免在操作进行时进行其他操作,导致数据损坏。 - `LL_FLASH_OperationErrorGet(void)`: 获取Flash操作错误状态,用于故障排查。 4. **Flash编程策略**: - 由于Flash有一定的寿命限制(编程/擦除次数),因此在编程时需谨慎。建议采用“先擦后写”策略,即在写入新数据前先擦除目标区域。 - 必须确保在写入过程中电源稳定,因为断电可能导致Flash数据丢失或损坏。 5. **异常处理**: - 使用LL库时,需要注意错误处理。例如,如果Flash操作失败,可以通过`LL_FLASH_OperationErrorGet()`获取错误信息,然后采取相应措施,如重试或报告错误。 6. **安全考虑**: - STM32G474提供了安全特性,如Boot Loader区域保护,防止非法程序覆盖。这些特性在开发过程中需要正确配置和利用。 通过`stm32g4xx_ll_flash.c`和`stm32g4xx_ll_flash.h`文件,开发者可以深入了解并掌握STM32G474的Flash管理机制,从而高效地进行固件开发。在实际项目中,根据需求选择合适的数据结构和算法,结合STM32的中断和定时器等资源,可以实现高性能、低功耗的Flash读写操作。
2024-09-19 16:26:39 3KB STM32
1
STM32G474+FreeRTOS+Modbus
2023-12-04 10:56:16 26.15MB stm32
1
stm32G474官方数据手册
2023-04-11 13:49:04 2.92MB stm32 arm 嵌入式硬件 单片机
1
STM32G474实现USB的MSC+CDC的组合功能
2023-01-09 19:15:19 42.14MB MSC+CDC
1
stm32g474的代码(nucleo、cubeide): 频率捕获 测量频率和占空比串口通信 wifi通信 利用L610模块与腾讯云发送信息 adc、LCD 测量直流电压、LCD显示 stm32F407的代码(正点原子、keil5): FFT 频率、占空比、蓝牙通信(幅值有些些问题,但频率贼准能把学校波形发生器测爆)
2022-12-08 18:40:38 78.08MB STM32G474
1
STM32G474采用串口空闲接收中断实现MODBUS-RTU协议框架 适合采用STM32实现简易的MODBUS-RTU通信,从而简化该协议框架在嵌入式芯片上实现的难度。 配套的文章: https://blog.csdn.net/qq_40824852/article/details/124188811
2022-05-07 13:14:16 32.43MB stm32 arm 嵌入式硬件 单片机
1
这是我的一个测试程序,使用STM32CubeMX做的初始化,然后使用Keil5 做的调试,初次使用,勉强实现功能,可能会有些问题,仅作参考。FM25V01.c 是本例程的重点,其他的是我之前的一些其他外设的测试内容。有Flash读写,和备份域 的读写,备份域有点坑只有4*32个字节,太少了。 工程根目录有FM25V01的数据手册。请同时参考。 无需积分即可下载,讨厌下载东西需要积分,好多东西本身就没啥价值,花了积分还浪费了时间。
2022-04-28 16:01:44 41.12MB STM32 STM32G474
1
STM32G474 系统时钟配置为170MHz,8路ADC转换结果通过DMA的方式直接缓存到数组中,ADC+DMA通过定时器的方式启动adc转换,从而可以控制adc的转换频率。已调试通过。
2022-04-17 09:48:08 12.84MB STM32G474 ADC+DMA+TIM2
1