使用STM32CubeMX捕获外来PWM高低电平并在串口调试助手显示

时间:2024-03-14 15:35:02

大家好,本人也是最近才开始接触STM32Cube,它极大的提高了软件开发的速度。

闲话少说,切入正题。本人使用的芯片是STM32L151C8T6一款低功耗的芯片。前提条件是:已知外来传感器PWM波周期是1S,通过低电平脉宽来发送有效数据,我们使用PWM捕获,将低电平时间显示在串口调试助手。所使用的管脚配置图如下:


使用STM32CubeMX捕获外来PWM高低电平并在串口调试助手显示

接下来本人将详细的操作顺序一步一步给出,方便初学者学习。

1.配置RCC时钟,本人使用外部高速时钟,如下图。

使用STM32CubeMX捕获外来PWM高低电平并在串口调试助手显示

2.配置PWM输入捕获通道,这里本人采用到的是TIM2CH1(这个根据自己MCU情况设定,没有太多要求),如下图:

使用STM32CubeMX捕获外来PWM高低电平并在串口调试助手显示

3.配置串口输出,这里我们只是用到了RX,如下图:

使用STM32CubeMX捕获外来PWM高低电平并在串口调试助手显示

4.配置时钟树,这里只需要配置两个参数即可,然后回车(至于时钟树怎么配置这里忽略,不做详细介绍,网上资料一大堆)

使用STM32CubeMX捕获外来PWM高低电平并在串口调试助手显示

6.根据需要配置自己串口的波特率,这里我设置的事9600,当然常见和默认是115200.

使用STM32CubeMX捕获外来PWM高低电平并在串口调试助手显示

7.定时器2配置,这里系统时钟是32MHZ,3200进行分频后是10KHZ,也就是说计数10000次就是1S。这里我设定了20000,也就是计数2S肯定能捕获1S周期的PWM。并在GPIO下进行如下设置。至此,配置过程结束,打开代码。

使用STM32CubeMX捕获外来PWM高低电平并在串口调试助手显示

使用STM32CubeMX捕获外来PWM高低电平并在串口调试助手显示


8.在打开工程下,本人将一一介绍变动的程序,没有作变动的,不做任何介绍。在串口.C文件最后面添加打印映射函数,也就是下图这一段代码:

使用STM32CubeMX捕获外来PWM高低电平并在串口调试助手显示

9.在初始化程序中添加HAL_TIM_IC_Start(&htim2, TIM_CHANNEL_1);和  HAL_TIM_IC_Start_IT(&htim2,TIM_CHANNEL_1);  在main.c后面添加下图所示的回调函数。

使用STM32CubeMX捕获外来PWM高低电平并在串口调试助手显示

使用STM32CubeMX捕获外来PWM高低电平并在串口调试助手显示

10,编译,下载之后在串口调试助手上面显示如下:

使用STM32CubeMX捕获外来PWM高低电平并在串口调试助手显示

附程序代码: