首页 > 其他分享 >基于STM32F103 HAL库 开发PWM读取

基于STM32F103 HAL库 开发PWM读取

时间:2024-06-21 14:33:02浏览次数:23  
标签:STM32F103 PWM HAL read TIM time pwm CHANNEL

目录

CubeMX配置

调试配置​

时钟配置

​编辑定时器配置

打开定时器捕获中断

代码

readpwm.h

readpwm.c

CubeMX配置

调试配置

时钟配置

定时器配置

测已知周期的占空比,我们要读取的PWM周期是20ms,于是我设计预分频系数是72-1,自动重装载系数是40000-1,周期是40ms,存在两个完整的周期,所以一定会存在一个上升沿后跟着下降沿,这个时间差就是高电平时间,再除以整个周期的时间就是占空比。

打开定时器捕获中断

代码

readpwm.h

#ifndef __readpwm_H__
#define __readpwm_H__

extern unsigned  int read_pwm[2];   
void readpwminit();


#endif

readpwm.c

#include "readpwm.h"
#include "tim.h"
int32_t time_rising[2];
int32_t time_falling[2];
int32_t read_pwm_temp[2];
uint32_t read_pwm[2];//1000-2000


void readpwminit(){
	
	HAL_TIM_IC_Start_IT(&htim1, TIM_CHANNEL_1);      
    HAL_TIM_IC_Start_IT(&htim1, TIM_CHANNEL_2); 
	HAL_TIM_IC_Start_IT(&htim1, TIM_CHANNEL_3);      
    HAL_TIM_IC_Start_IT(&htim1, TIM_CHANNEL_4);

}



void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
{
    if (htim->Instance == TIM1)
    {
        if (htim->Channel == HAL_TIM_ACTIVE_CHANNEL_1)
        {
			time_rising[0] = (int32_t) HAL_TIM_ReadCapturedValue(&htim1, TIM_CHANNEL_1);
        }
        if (htim->Channel == HAL_TIM_ACTIVE_CHANNEL_2)
        {
			time_falling[0] = (int32_t) HAL_TIM_ReadCapturedValue(&htim1, TIM_CHANNEL_2);
        }
		if (htim->Channel == HAL_TIM_ACTIVE_CHANNEL_3)
        {
            time_rising[1] = (int32_t) HAL_TIM_ReadCapturedValue(&htim1, TIM_CHANNEL_3);
        }
        if (htim->Channel == HAL_TIM_ACTIVE_CHANNEL_4)
        {
			time_falling[1] = (int32_t) HAL_TIM_ReadCapturedValue(&htim1, TIM_CHANNEL_4);
        }
		
		read_pwm_temp[0] = (time_falling[0] - time_rising[0]);
        read_pwm_temp[1] = (time_falling[1] - time_rising[1]) ;

		if (read_pwm_temp[0] >= 0) {read_pwm[0] = read_pwm_temp[0];}
		if (read_pwm_temp[1] >= 0) {read_pwm[1] = read_pwm_temp[1];}
    }
}

标签:STM32F103,PWM,HAL,read,TIM,time,pwm,CHANNEL
From: https://blog.csdn.net/w111155855/article/details/139818940

相关文章

  • 基于C#的winform和halcon开发的通用视觉框架,类似visionpro
    基于C#的winform和halcon开发的通用视觉框架界面风格和visionpro的很像,线条连线的流程风格,代码编译无报错,程序可运行,工具不是很完善,适合大家学习使用。需要源码请私信或者加QQ......
  • 基于C#的winform和halcon开发的通用视觉框架
    基于C#的winform和halcon开发的通用视觉框架代码编译无报错,程序可运行,有些地方有BUG,适合大家学习使用。需要源码请私信或者加QQ......
  • 基于C#的WPF+halcon开发,视觉和运动控制软件框架源码
    基于C#的WPF+halcon开发,视觉和运动控制软件框架源码带ui设计器和轴卡运控,上手可用,WPFMVVM开发模式,1:1参考easyvision开发,集成几十个软件算子,插件框架可以自定义变量,写c#脚本,自定义流程,包含了halcon脚本和封装的算子,可自定义ui,通过插件形式开发很方便拓展自己的功能。可学......
  • STM32入门HAL库-GPIO点灯
    目录1.目标2.背景知识3.过程1.目标通过HAL库操作GPIO口,使灯闪烁2.背景知识GPIO即通用输入输出查阅手册,可以了解到STM32中GPIO支持功能这里是点灯,点灯这里用到了GPIO的输出功能3.过程引脚配置界面,选择对应引脚输出功能这里是PB7主函数中编写代码HAL......
  • [机器视觉]halcon应用实例 用户自定义多ROI模板匹配
    本示在前面几个halconROI示例的基础上继续扩展,更靠进实标情况。为了使ROI匹配更灵活,就要求可以让用户或工程根据实际使用情况自己去画ROI,想画几个是几个。数量不能在代码里写死。这次升级的主要是增加了一个while循环根据用户的鼠标按键来进行判断是否继续画,还是退出画ROI。效......
  • 10.[机器视觉]Halcon形态学膨胀,腐蚀,开运算,闭运算
    膨胀:对边界点进行扩充,填充空洞,使边界向外部扩张的过程。 腐蚀:消除物体边界点,使边界向内部收缩的过程,把小于结构元素的物体去除掉. 开运算:先腐蚀后膨胀的过程称为开运算。作用:去除孤立的小点,毛刺,消除小物体,平滑较大物体边界,同时不改变其面积.闭运算:先膨胀......
  • [机器视觉]halcon应用实例 边缘检测
    一个学习找边的实例边缘检测的步骤图解步骤1.通过Blob方法获取需要测量的Region1.1主要运用图像形态学、二值化2.创建测量句柄2.1create_metrology_model(MetrologyHandle)3.设置目标图像大小......
  • 一文带你了解STM32F4中断的概念,串口的概念,DMA的转运,以及如何运用在串口的收发上,串口收
    本篇主要实现的是用UART的接收中断接收数据,用DMA接收不定长的数据并发送回给电脑,接收信息控制LED灯的亮灭,成为点灯大师。什么是中断(EXIT)EXIT 外部中断/事件控制器,管理了控制器的20个中断/事件线。每个中断/事件线都对应有一个边沿检测器,可以实现输入信号的上升沿检测和下......
  • 1-STM32F103+ESP8266+ML307(中移4G Cat1)--硬件使用说明
    <p><iframename="ifd"src="https://mnifdv.cn/resource/cnblogs/ZLIOTB/ML307/my.html"frameborder="0"scrolling="auto"width="100%"height="1500"></iframe></p> 实物图 板载说......
  • HALCON-从入门到入门-相机标定-内参外参
    1.废话为什么要进行相机标定几个坐标系像素坐标系(图片坐标系)就是我们在电脑上看到图片的坐标系,以左上角为原点(2d坐标系)单位是像素pixel相机坐标系相机物方视野投影的坐标系,单位是mm世界坐标系就是真实的世界坐标系,单位是mm标定的结果标定的结果中有内参矩阵,外参,畸......