STM32-HAL库12-STM32F407VGT6的PWM主从定时器,发送指定数量脉冲

server/2024/10/19 2:22:45/

STM32-HAL库12-STM32F407VGT6的PWM主从定时器,发送指定数量脉冲

一、所用材料

STM32F407VGT6自制双伺服电机控制板;
一川A1系列伺服电机驱动器(电0.73KW电机);

二、所学内容

实现PWM发送指定个数脉冲,以实现伺服电机的定位控制。

三、HAL库配置

第一步:RCC配置-选取外部晶振

在这里插入图片描述

第二步:SYS配置-选取SW

在这里插入图片描述

第三步:时钟树配置

在这里插入图片描述

第四步:TIM定时器配置

本文选取TIM1-CH3作为电机1的主TIM的PWM输出口,TIM4作为从TIM;
本文选取TIM2-CH1作为电机2的主TIM的PWM输出口,TIM8作为从TIM;
本文以电机1定位控制为例

  • 以下为TIM1的配置参数:
    在这里插入图片描述
    在这里插入图片描述
  • 以下为TIM4的配置参数:
    在这里插入图片描述
    需要打开TIM4的全局中断
    在这里插入图片描述

四、MDK配置

第一步:main.c

main函数中代码如下:

int main(void)
{/* USER CODE BEGIN 1 *//* USER CODE END 1 *//* MCU Configuration--------------------------------------------------------*//* Reset of all peripherals, Initializes the Flash interface and the Systick. */HAL_Init();/* USER CODE BEGIN Init *//* USER CODE END Init *//* Configure the system clock */SystemClock_Config();/* USER CODE BEGIN SysInit *//* USER CODE END SysInit *//* Initialize all configured peripherals */MX_GPIO_Init();MX_USART1_UART_Init();MX_TIM1_Init();MX_CAN2_Init();MX_CAN1_Init();MX_TIM2_Init();MX_TIM3_Init();MX_TIM4_Init();MX_TIM5_Init();MX_TIM8_Init();/* USER CODE BEGIN 2 */HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_3);HAL_Delay(10);
//  CAN_Start_Init();									
//  CAN1Filter_Config();
//  CAN2Filter_Config();/* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */while (1){if(HAL_GPIO_ReadPin(GPIOE, GPIO_PIN_0)==0){HAL_Delay(10);if(HAL_GPIO_ReadPin(GPIOE, GPIO_PIN_0)==0){__HAL_TIM_SetCompare(&htim1, TIM_CHANNEL_3, 25); //修改占空比比较值,一直保持占空比50%__HAL_TIM_SET_AUTORELOAD(&htim4,20000-1); //设置要输出的PWM脉冲数1000个HAL_TIM_Base_Start_IT(&htim4);             //启动从定时器HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_3);while(HAL_GPIO_ReadPin(GPIOE, GPIO_PIN_0)==0);}}/* USER CODE END WHILE *//* USER CODE BEGIN 3 */}/* USER CODE END 3 */
}

定时器的中断回调如下:

void  HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{if(htim == &htim4){if(__HAL_TIM_GET_FLAG(&htim4, TIM_FLAG_CC2) != RESET)//判断是否触发中断   {__HAL_TIM_CLEAR_FLAG(&htim4, TIM_FLAG_CC2); //清除中断标志            HAL_TIM_PWM_Stop(&htim1, TIM_CHANNEL_3);   //关闭主定时器HAL_TIM_Base_Stop_IT(&htim4);              //关闭从定时器}}
}

通过以上代码即可实现单词按键输入后STM32F407发送20000个脉冲


http://www.ppmy.cn/server/28009.html

相关文章

B树:原理、操作及应用

B树:原理、操作及应用 一、引言二、B树概述1. 定义与性质2. B树与磁盘I/O 三、B树的基本操作1. 搜索(B-TREE-SEARCH)2. 插入(B-TREE-INSERT)3. 删除(B-TREE-DELETE) 四、B树的C代码实现示例五、…

【QEMU系统分析之实例篇(九)】

系列文章目录 第九章 QEMU系统仿真的机器创建分析实例 文章目录 系列文章目录第九章 QEMU系统仿真的机器创建分析实例 前言一、QEMU是什么?二、QEMU系统仿真的机器创建分析实例1.系统仿真的命令行参数2.完成默认设备的设置工作suspend_mux_open()qemu_disable_defa…

ReactNative0.74 版本发布重大更新

React Native 0.74 版本发布,主要更新包括: Yoga 3.0:新版布局引擎带来更稳定的样式处理,并支持基于Web的组件渲染。Yoga 3.0对行反向容器上的边距、填充和边框属性的行为进行了调整,现在与Web保持一致,即不…

unity入门——按钮点击了却无法调用函数

查阅了一番都没有解决问题,最后发现问题是由button的Onclick()事件绑定了代码脚本而不是游戏对象导致的。 如果Onclick()事件绑定的是代码脚本,则下拉框里没有函数,但是点击MonoScript后能手动填入函数名(本以为这样就能实现调用…

Oracle对空值(NULL)的 聚合函数 排序

除count之外sum、avg、max、min都为null,count为0 Null 不支持加减乘除,大小比较,相等比较,否则只能为空;只能用‘is [not] null’来进行判断; Max等聚合函数会自动“过滤null” null排序默认最大&#xf…

Mac 上安装多版本的 JDK 且实现 自由切换

背景 当前电脑上已经安装了 jdk8; 现在再安装 jdk17。 期望 完成 jdk17 的安装,并且完成 环境变量 的配置,实现自由切换。 前置补充知识 jdk 的安装路径 可以通过查看以下目录中的内容,确认当前已经安装的 jdk 版本。 cd /Library/Java/Java…

【云原生】Docker 实践(四):使用 Dockerfile 文件的综合案例

Docker 实践(四):使用 Dockerfile 文件的综合案例 下面将从一个 CentOS 的基础镜像开始,安装 JDK 和 Tomcat 环境,并完成一个 Web 应用的部署。整个过程通过一个 Dockerfile 文件来描述。通过 Dockerfile 文件来构建一…

“大唐杯”基础知识(部分)

DL:下载 UL:上行链路 在5G系统中:2.1GHZ DL最大4流,UL最大2流;700MHZ DL最大2流,UL最大1流 在5G系统中:在手机开机流程中,负责业务承载建立的过程是PDU会话建立过程 NR中支持基础的4…