stm32f103vet6基于stm32cubemx利用exti外部中断测量pwm频率(代码片段)

perseverance52 perseverance52     2022-12-06     682

关键词:

STM32F103VET6基于STM32CubeMX利用EXTI外部中断测量PWM频率


🌼本篇利用上面两篇示例综合,利用STM32F103VET6引脚PB1测量STM32G070RBT6引脚上的PA8引脚上产生的PWM频率。

📝STM32F103VET6重写EXTI回调函数代码

  • 🔨在原工程项目中新增了PB1作为EXTI中断输入口。
  • 🔧中断优先级分组设置
static uint16_t cnt = 0;
//重写回调函数
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)

		
/*判断是中断引脚*/
			if(GPIO_Pin == GPIO_PIN_1)
		
				cnt++;		    
		
		if(GPIO_Pin == GPIO_PIN_7)
		
				HAL_GPIO_TogglePin(GPIOE, GPIO_PIN_5);//状态翻转
			 printf("PE7 KEYPRESS \\n");
		
		if(GPIO_Pin == GPIO_PIN_8)
		
				HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_5);//状态翻转
		    printf("PE8 KEYPRESS \\n");
		

  • ✅新增TIM1定时器对EXTI中断接收的数据进行滤波处理。
  • 定时时间=(Prescaler +1)* (Counter Period +1)/ 频率
  • 这里定时时间是0.1s

//TIM1中断回调函数
uint32_t pwm_sum =0;
uint32_t pwm_avg =0;
uint32_t pwm_final =0;
void HAL_TIM_PeriodElapsedCallback (TIM_HandleTypeDef *htim)//回调函数

	if(htim->Instance == TIM1)//判断进入回调函数方式
	
	  	pwm_sum += cnt*10  ;//累加
		pwm_sum -= pwm_avg;//减去上次的平均值
		pwm_avg = pwm_sum *1.0/5;//更新pwm平均值
		pwm_final = pwm_avg;//当前PWM的频率
		cnt =0;		
	


  • 在主while循环在只放置打印函数
while (1)
  
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
		HAL_Delay(1000);
	printf("PWM frequency= %u Hz \\n",pwm_final);
		
  

📗STM32G070RBT6PWM频率输出参数设置

  • 🛠通过调整TIM1初始化相关参数,进行PWM输出频率的调整
 htim1.Instance = TIM1;
  htim1.Init.Prescaler = 63;
  htim1.Init.CounterMode = TIM_COUNTERMODE_UP;
  htim1.Init.Period = 80 -1;//500 -> 2KHz, 1000 -> 1KHz,100 ->10KHz,80 ->12.5KHz
  htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  htim1.Init.RepetitionCounter = 0;

htim1.Init.Period = 50 -1;小于60时,需要调整main.c主循环while中的__HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1,25);//设置PWM占空比

  • 🌿2KHz测量频率打印:
  • 🍂1KHz的PWM频率测量
  • 🎋10KHz的PWM测量
  • 🌴12.5KHz的PWM测量数据
  • 20KHz的PWM测量数据
  • 通过逻辑分析仪采集到20KHz的PWM波形

⛳工程源码

链接:https://pan.baidu.com/s/1Pq9X8zCguQM2dzNscgmUGw
提取码:qfbq

stm32f103vet6基于stm32cubemx配置非dma方式获取内部温度(代码片段)

STM32F103VET6基于STM32CubeMX配置非DMA方式获取内部温度📌相关篇《STM32F103VET6基于STM32CubeMX配置DMA方式获取内部温度》🛠STM32CubeMX配置🌿勾选温度传感器通道。🌿参数配置选项参考上图。🌿配置串口1作为温度信息... 查看详情

stm32f103vet6基于stm32cubemx配置dma方式获取内部温度(代码片段)

STM32F103VET6基于STM32CubeMX配置DMA方式获取内部温度🎬STM32CubeMX参数配置演示(没有包含串口1的配置内容)🚩请注意:以演示中没有展现串口1的开启演示过程,需要自己勾选USART1STM32CubeMX配置解析内部温度和参考电压都属于... 查看详情

stm32f103vet6基于stm32cubemx创建串口中断+dma不定长数据接收(代码片段)

STM32F103VET6基于STM32CubeMX创建串口中断+DMA不定长数据接收✨STM32CubeMX工程配置过程演示:📍此工程参考《STM32CubeMX|STM32使用HAL库DMA+空闲中断实现串口不定长数据接收》📓DMA参数介绍🎉DMA传输方式🌿传输... 查看详情

stm32f103vet6基于stm32cubemx配置dac-三角波输出示例(代码片段)

STM32F103VET6基于STM32CubeMX配置DAC-三角波输出示例📽🎞🎬STM32CubeMX配置过程演示📍DAC输出引脚位:PA4🌷不同分频系数下的三角波频率分频系数越高,频率越低。htim2.Init.Prescaler=6-1;htim2.Init.Prescale 查看详情

stm32f103vet6基于stm32cubemx创建定时器中断控制led闪烁(代码片段)

STM32F103VET6基于STM32CubeMX创建定时器中断控制LED闪烁🌼STM32CubeMX配置界面演示⚡需求是通过定时器1来控制LED灯1s亮灭。📌工程分为两部分组成:STM32CubeMX创建并配置工程和业务代码完善🍁STM32CubeMX创建并配置工程1.&#... 查看详情

stm32f103vet6基于arduino开发框架下串口和软串口输出乱码解决方案(代码片段)

STM32F103VET6基于Arduino开发框架下串口和软串口输出乱码解决方案⛳昨天在测试过程中就已经发现了,后面无意间尝试选择了STM32F10ZET6单片机进行烧录测试,结果串口输出正常了。STM32F10ZET6单片机的话是144引脚的,容量... 查看详情

stm32f103vet6基于arduino开发框架下串口和软串口通讯示例(代码片段)

STM32F103VET6基于Arduino开发框架下串口和软串口通讯示例📌相关篇《【硬件开源电路】STM32F103VCT6开发板》🌺通讯演示:✨本示例来源于STM32核心固件自带例程。📢对于STM32F103VET6芯片,Arduino开发环境下,默... 查看详情

stm32f103vet6基于arduino开发框架下freertos串口1不能正常工作解决方案(代码片段)

STM32F103VET6基于Arduino开发框架下FreeRTOS串口1不能正常工作解决方案✨通过搜索发现这个bug存在了这么多年了,在百度经验《STM32F103+FreeRTOS串口模块不能正常工作》就记录了STM32F10x外设固件库v3.5+FreeRTOSv7.0.2存在这个问题&#... 查看详情

stm32f103vet6基于hal库和标准库下dac心形波形输出(代码片段)

STM32F103VET6基于HAL库和标准库下DAC心形波形输出🎞🎬鼎阳示波器上位机软件:EasyScopeX通过USB连接电脑截图显示:以上是基于标准库的波形。✨上面是基于HAL库创建的工程烧录显示的波形图。🎉本工程支持极海... 查看详情

stm32f103c8t6基于arduino框架下利用定时器跑rbg灯闪烁(代码片段)

STM32F103C8T6基于Arduino框架下利用定时器跑RGB灯闪烁🌼演示效果✨在程序示例测试当中发现好多库对STM32系列支持的不够全面,其中原因有STM32固件本身就有缺陷和bug,导致好多库都只能在部分型号中实现。另外测试STM32... 查看详情

三实战小例程基于stm32f103c8t6最小系统板和stm32cubemx驱动ws2812b光立方(代码片段)

系列文章目录一、基于STM32F103C8T6最小系统板和STM32CubeMX实现LED灯循环闪烁二、基于STM32F103C8T6和STM32CubeMX实现UART串口通信数据收发三、实战小例程基于STM32F103C8T6最小系统板和STM32CubeMX驱动WS2812B光立方(目前还只是个平方)... 查看详情

stm32学习笔记二基于stm32f103c8t6和stm32cubemx实现uart串口通信数据收发(代码片段)

系列文章目录一、基于STM32F103C8T6最小系统板和STM32CubeMX实现LED灯循环闪烁二、基于STM32F103C8T6和STM32CubeMX实现UART串口通信数据收发三、实战小例程基于STM32F103C8T6最小系统板和STM32CubeMX驱动WS2812B光立方四、基于STM32F103C8T6最小系统板... 查看详情

stm32学习笔记一基于stm32f103c8t6最小系统板和stm32cubemx实现板载led灯循环闪烁(代码片段)

系列文章目录一、基于STM32F103C8T6最小系统板和STM32CubeMX实现LED灯循环闪烁二、基于STM32F103C8T6和STM32CubeMX实现UART串口通信数据收发三、实战小例程基于STM32F103C8T6最小系统板和STM32CubeMX驱动WS2812B光立方四、基于STM32F103C8T6最小系统板... 查看详情

stm32的意思是啥呢?

...汇编和C语言的板级编程。如果从软件上讲,就是要学习基于ARM处理器的操作系统层面的驱动、移植了。硬件的寄存器类的东西还是要能看懂的,掌握基于板级的汇编和C编程。主要需要学习的有:基础操作:GPIO操作,串口操作,... 查看详情

基于stm32f103循迹避障遥控车

参考博文:上篇中篇下篇 查看详情

基于stm32f103的智能门锁系统(代码片段)

基于STM32F103的智能门锁系统直接说明实现了什么效果1指纹解锁(基于AS608)2RFID解锁(基于RC522)3密码解锁(基于LCD电容屏触摸控制)4蓝牙解锁(基于HC-06)5后台服务器管理开锁信息(基于ESP8266)6APP... 查看详情

stm32f103实例应用(3.1)——gpio(增加深度)(代码片段)

...片的GPIO被分成很多组,每组16个引脚,如型号STM32F103VET6的芯片有GPIOA至GPIOE共5组GPIO。芯片一共100个引脚, 查看详情

stm32学习笔记二基于stm32f103c8t6和stm32cubemx实现uart串口通信数据收发(代码片段)

系列文章目录一、基于STM32F103C8T6最小系统板和STM32CubeMX实现LED灯循环闪烁二、基于STM32F103C8T6和STM32CubeMX实现UART串口通信数据收发三、实战小例程基于STM32F103C8T6最小系统板和STM32CubeMX驱动WS2812B光立方四、基于STM32F103C8T6最小系统板... 查看详情