R4 STM32高级定时器笔记之PWM互补输出

2023-11-04

STM32高级定时器笔记之PWM互补输出

程序功能

通过两个GPIO,输出相反的PWM信号,带死区时间和刹车控制。
PWM为50%。要配置几个寄存器:
CNT计数器
CCR输出比较寄存器器(输入捕获寄存器)
ARR自动重装载寄存器(最大65535)
当CQT开始计数(从高电平开始),小于CCR为高电平,等于CCR时跳变低电平。再计数,计数到等于ARR,计数器清零,电平反转,变为高电平。
计数器的时钟(频率)为72Mhz/psc+1
计数器的周期psc+1/72Mhz
- psc分屏因子

这里写图片描述

PWM互补输出—bsp_AdvanceTim.c

高级定时器时钟挂载在RCC_APB2上,如果改为通用定时器.h里的RCC_APB2要改为RCC_APB1

#define            ADVANCE_TIM                    TIM1
#define            ADVANCE_TIM_APBxClock_FUN     RCC_APB2PeriphClockCmd
#define            ADVANCE_TIM_CLK               RCC_APB2Periph_TIM1

三个形参:

#define            ADVANCE_TIM_PERIOD            (8-1)//自动重装载寄存器,决定周期,ARR
#define            ADVANCE_TIM_PSC               (9-1)//计数器分频因子PSC
#define            ADVANCE_TIM_PULSE             4//CCR
配置GPIO

仅用于STM32F103ZET6,STM32F103RCT6:
这里写图片描述
用到三个引脚:CH1-PA8 CHIN-PB13 BKIN-PB12

static void ADVANCE_TIM_GPIO_Config(void)
{
    GPIO_InitTypeDef GPIO_InitStructure;

  // 输出比较通道 GPIO 初始化
    RCC_APB2PeriphClockCmd(ADVANCE_TIM_CH1_GPIO_CLK, ENABLE);
  GPIO_InitStructure.GPIO_Pin =  ADVANCE_TIM_CH1_PIN;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(ADVANCE_TIM_CH1_PORT, &GPIO_InitStructure);

  // 输出比较通道互补通道 GPIO 初始化
    RCC_APB2PeriphClockCmd(ADVANCE_TIM_CH1N_GPIO_CLK, ENABLE);
  GPIO_InitStructure.GPIO_Pin =  ADVANCE_TIM_CH1N_PIN;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(ADVANCE_TIM_CH1N_PORT, &GPIO_InitStructure);

  // 输出比较通道刹车通道 GPIO 初始化
    RCC_APB2PeriphClockCmd(ADVANCE_TIM_BKIN_GPIO_CLK, ENABLE);
  GPIO_InitStructure.GPIO_Pin =  ADVANCE_TIM_BKIN_PIN;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(ADVANCE_TIM_BKIN_PORT, &GPIO_InitStructure);
    // BKIN引脚默认先输出低电平
    GPIO_ResetBits(ADVANCE_TIM_BKIN_PORT,ADVANCE_TIM_BKIN_PIN);
}
配置高级定时器工作模式(初始化结构体)
static void ADVANCE_TIM_Mode_Config(void)
{
    //开定时器时钟,即内部时钟CK_INT=72M
    ADVANCE_TIM_APBxClock_FUN(ADVANCE_TIM_CLK,ENABLE);

/*--------------------时基结构体初始化(确定周期和计数器时钟)-----*/
    TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
    TIM_TimeBaseStructure.TIM_Period=ADVANCE_TIM_PERIOD;//自动重装寄存器的值 
    TIM_TimeBaseStructure.TIM_Prescaler= ADVANCE_TIM_PSC;// 驱动CNT计数器的时钟= Fck_int/(psc+1)    
    TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;//时钟分频因子,配置死区时用        
    TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;//计数器计数模式,设置为向上计数      
    TIM_TimeBaseStructure.TIM_RepetitionCounter=0;//重复计数器的值 
    TIM_TimeBaseInit(ADVANCE_TIM, &TIM_TimeBaseStructure);//初始化定时器

    /*--------------------输出比较结构体初始化(配置PWM)--------*/       
    TIM_OCInitTypeDef  TIM_OCInitStructure;
    // 配置为PWM模式1
    TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
    // 输出使能
    TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
    //互补输出使能
    TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable; 
    // 设置占空比大小
    TIM_OCInitStructure.TIM_Pulse = ADVANCE_TIM_PULSE;
    // 输出通道电平极性配置
    TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
    // 互补输出通道电平极性配置
    TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_High;
    // 输出通道空闲电平极性配置
    TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Set;
    // 互补输出通道空闲电平极性配置
    TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCNIdleState_Reset;
    TIM_OC1Init(ADVANCE_TIM, &TIM_OCInitStructure);
    TIM_OC1PreloadConfig(ADVANCE_TIM, TIM_OCPreload_Enable);

    /*-------------------刹车和死区结构体初始化-------------------*/
    //可参看BDTR寄存器描述
    TIM_BDTRInitTypeDef TIM_BDTRInitStructure;
  TIM_BDTRInitStructure.TIM_OSSRState = TIM_OSSRState_Enable;
  TIM_BDTRInitStructure.TIM_OSSIState = TIM_OSSIState_Enable;
  TIM_BDTRInitStructure.TIM_LOCKLevel = TIM_LOCKLevel_1;
    // 输出比较信号死区时间配置,可参考 BDTR:UTG[7:0]描述
    // 配置的死区时间为152ns
  TIM_BDTRInitStructure.TIM_DeadTime = 11;//刹车时间
  TIM_BDTRInitStructure.TIM_Break = TIM_Break_Enable;//刹车是否使能
    //当BKIN引脚检测到高电平,输出比较信号被禁止,如同刹车
  TIM_BDTRInitStructure.TIM_BreakPolarity = TIM_BreakPolarity_High;
  TIM_BDTRInitStructure.TIM_AutomaticOutput = TIM_AutomaticOutput_Enable;
  TIM_BDTRConfig(ADVANCE_TIM, &TIM_BDTRInitStructure);

    // 使能计数器
    TIM_Cmd(ADVANCE_TIM, ENABLE);   
    // 主输出使能,当使用通用定时器时,这句不需要
    TIM_CtrlPWMOutputs(ADVANCE_TIM, ENABLE);
}
调用上面两个函数
void ADVANCE_TIM_Init(void)
{
    ADVANCE_TIM_GPIO_Config();
    ADVANCE_TIM_Mode_Config();
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

R4 STM32高级定时器笔记之PWM互补输出 的相关文章

  • SpringBoot第16讲:如何生成接口文档之Swagger技术栈

    SpringBoot第16讲 如何生成接口文档之Swagger技术栈 SpringBoot开发Restful接口 有什么API规范吗 如何快速生成API文档呢 Swagger 是一个用于生成 描述和调用 RESTful 接口的 Web 服务
  • `算法知识` 笛卡尔坐标系, 边长与边权, 曼哈顿距离, 欧几里得距离,外接矩形

    catalog 图像引用 图一 图二 笛卡尔坐标系的 边长 与 边权 曼哈顿距离 曼哈顿边权 与 欧几里得距离 的转换 凸多边形的曼哈顿周长 与 外接矩形的欧几里得周长 例题 ID COUNT 4 跳转链接已经使用了 0 ID COUNT
  • kali中binwalk/foremost/zip2john工具的配合使用

    kali中binwalk foremost zip2john工具的配合使用 背景 通过binwalk工具观察该文件是否包含其他文件 通过foremost工具将隐藏文件提取出来 通过zip2john工具破解压缩包的密码 心得体会 背景 最近参
  • 魏副业而战:开学季,闲鱼卖什么好?

    我是魏哥 与其躺平 不如魏副业而战 现在八月底了 意味着暑假结束 新的学期将要开始 作为闲鱼卖家 可顺势布局一下 那卖什么好呢 开学季嘛 卖学习相关的 例如 文具 书包 练习本 教辅书籍等等 只要和学生相关的都可以的 另外 有些大学生可能会
  • oracle 连接串解释

    工作中 oracle环境 常常通过连接串描述 scott 123456 DESCRIPTION ADDRESS PROTOCOL TCP HOST 192 168 206 100 PORT 1521 CONNECT DATA SERVER
  • 小孩学机器人编程怎么样

    小孩学机器人编程怎么样 孩子的学习从古至今都是家长们十分关心和重视的一件事情 很多的家长在培养孩子的学习方面也是相当耐心的 就拿现在很多的家长想要孩子去学习机器人编程的课程来说 他们对于小孩学机器人编程怎么样并不是很清楚 今天我们就一起来了
  • sqli-labs靶场Less-3

    1 访问首页 index php id 1 这里的传参点是id 2 判断注入点是数字还是字符 如果是字符就需要闭合 and 1 1 qwe and 1 2 qwe 分析 通过以上探测发现并不起效果 考虑是不是和第一关一样需要单引号闭合 再次
  • 如何用一根网线实现在两台电脑之间传输数据

    下面我来说一说怎样用一根网线连接两台电脑 从而实现数据的传输 首先 我们要在两台电脑上分别设置其IPv4的配置 第一台电脑的设置步骤如下 打开网络和共享中心 点击更改设配器设置 在以太网那里右键属性 双击Internet 协议版本4 TCP
  • logstash多任务多管道pipeline配置启动,方案分析

    文章目录 6 0以下方案 6 0以下方案分析 启动方式 6 0以上方案 启动方式 6 0以下方案 logstash处理多个输入输出源方案 没有使用多管道 两个任务 jdbc demo 手写自定义mysql conf input stdin
  • keil调试GD32E23系列芯片找不到 j-link问题解决

    背景 今年因为疫情 下半年芯片疯涨 公司各个产品的芯片都比较紧缺 原来使用的芯片都为st和华大公司的芯片 价格还好 都不超过五块 现在拿货 st芯片价格已经涨了30块左右 吃不消 遂开始加紧开发国内的芯片 目录 一 问题 二 问题可能的根源
  • redis教程

    Redis和tp使用 类型 支持多种数据结构类型 包括string 字符串 hash 哈希 list 链表 set 无序集合 Zset 有序集合 Redis能读的速度是110000次 s 写的速度是81000次 s Redis所有单个命令的
  • AIX字体丢失——解决方案

    问题 图标中文显示为方框 报表工具FineReport 解决办法 拷贝中文字体到操作系统 1 将 WINDOWS Fonts 目录下SIMSUN TTC 宋体 拷贝到 AIX JDK安装目录 jre lib fonts 目录下 2 如果是j
  • Pixel手机电信4G破解(含解锁BL和root)

    Pixel电信4G破解 由于谷歌没有支持电信 因此若想使用电信的网络就需要破解 仅支持欧洲版 其它版的可以试试 本文分为两种电信破解方式 第二种不需要格式化 要想破解电信 必须root 首先需要下载电脑的驱动 下载完成后还需要安装 方法 安
  • 学习笔记借助ChatGPT自动制作PPT

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 一 两步实现自动制作PPT 二 步骤 1 通过ChatGPT生成文本文档 2 借助MINDSHOW生成PPT 总结 一 两步实现自动制作PPT 文本内容生成 cha
  • Git基础操作:合并某个分支的一个commit到另一个分支

    有的时候不小心在错误的分支A上开发了一点代码 也已经提交了 这个时候如果想把这部分代码移到正确的分支B上可以如下操作 使用git log命令找到错误提交的那次commitid git log commit 8b19200eed045d5be
  • QT布局

    布局管理 以下是Qt手册中的 布局管理 的译文 在一个Widget中 Qt布局管理系统提供了一个简单而有效的方式来自动组织子widget 以保证他们能够很好地利用可用空间 介绍 Qt包含一个布局管理类的集合 它们被用来描述widgets如何
  • JSON的编写规则

    JSON的规则很简单 对象是一个无序的 名称 值 对 集合 一个对象以 左括号 开始 右括号 结束 每个 名称 后跟一个 冒号 名称 值 对 之间使用 逗号 分隔 规则如下 1 映射用冒号 表示 名称 值 2 并列的数据之间用逗号 分隔 名
  • 敏感性、特异度、α、β、阳性预测值(PPV)、阴性预测值(NPV)等指标及置信区间计算(附R语言代码)

    这个虽然简单但老是被绕进去 所以整理一下方便查阅 首先画一个2 2的混淆矩阵confusion matrix TP True positive 真阳性 FP False positive 假阳性 FN False negative 假阴性
  • 微信小程序存在的风险_浅谈微信小程序会中病毒事件

    小程序其实是云端数据 不在软件里 所以小程序没有进入的端口 所以华为的管家也检测不出来 但是你按照腾讯的方法收索的话 就等于默认开通小程序 把你的数据放到云端 同时你拥有的账号就绑定了一大堆应用程序 这些程序你永远也别想删除掉 除非不用那个
  • C语言学习(四)——字符串处理函数

    字符串处理函数 17个 1 gets include

随机推荐

  • Jmeter(十五) - 从入门到精通 - JMeter导入自定义的Jar包(详解教程)

    1 简介 原计划这一篇是介绍前置处理器的基础知识的 结果由于许多小伙伴或者童鞋们在微信和博客园的短消息中留言问如何引入自己定义的Jar包呢 我一一回复告诉他们和引入插件的Jar包一样的道理 一通百通 但是感觉他们还是很迷糊很迷惘 因此在这里
  • powerdesigner 创建物理结构视图

    PowerDesigner系列产品提供了一个完整的建模解决方案 业务或系统分析人员 设计人员 数据库管理员DBA和开发人员可以对其裁剪以满足他们的特定的需要 本系列将简单介绍PowerDesigner入门使用操作 若有不足或需要补充之处 欢
  • 深度学习环境配置9——Ubuntu下的tensorflow-gpu==2.4.0环境配置

    深度学习环境配置9 Ubuntu下的tensorflow gpu 2 4 0环境配置 注意事项 一 2022 09 04更新 学习前言 各个版本tensorflow2的配置教程 环境内容 环境配置 一 Anaconda安装 1 Anacon
  • 股票获取最大利润

    1 题目背景 给定一个数组 prices 它的第i个元素prices i 表示一支给定股票第i天的价格 你只能选择某一天买入这只股票 并选择在未来的某一个不同的日子卖出该股票 设计一个算法来计算你所能获取的最大利润 返回你可以从这笔交易中获
  • 操作中 "Chinese_PRC_CI_AS" 和 "Chinese_PRC_CI_AI" 之间的排序规则冲突 的解决办法

    最主要就一句话 在条件中不同排序规则的列后面加上 collate Chinese PRC CI AS 即可解决 有个需求 要求数据库系统自动同步两个不同数据库中的人员信息 首先想到写一个存储过程然后由系统任务来自动处理 尝试性的写了下面的查
  • H5实现高德地图的uni.chooseLocation

    在uniapp中获取当前定位和选择当前位置都是做了兼容 在各个平台都可以使用 这篇文章讲解如何定位当前位置 搜索位置 点击进行定位在H5中实现uni chooseLocation 如下图所示 左侧微信小程序的选择位置 右侧为高德地图在H5中
  • 微信小程序 修改三方组件中的自带样式

    众所周知 微信小程序会引用诸如vant weiui等三方组件 当我们想要对组件自带样式进行修改的时候该怎么做呢 1 在调试器中找到想要修改样式的组件的class类名 在对应的wxss中添加样式 此时样式未生效 2 官方文档中提到可以在ext
  • python写的串口助手并连接腾讯云服务器数据库

    结合上一期的基于pyqt5开发的图书管理系统UI 带登录页面 文章做一个此章节的补充 因为老师说需要结合数据库实现登录系统 于是我就想起了自己在腾讯云上买的一个服务器 因此经过百度查询大量的资料 功夫不负有心人 在这个Pyqt5实现的可视化
  • three.js展示obj模型

    利用three js展示obj模型 环境 必须是在web服务器中 下载objShow js
  • 【UART】Verilog实现UART接收和发送模块

    目录 写在前面 UART 工作原理 UART 接收部分 UART RX 模块图 UART RX 时序图 Verilog 实现 UART RX 模块 UART 发送部分 UART TX 模块图 UART TX 时序图 Verilog 实现 U
  • linux如何同时执行两个命令,如何同时运行两个或者多个终端命令

    选项一 分号 运算符 分号 运算符允许你连续执行多个命令 而不管前面的每个命令是否成功 例如 打开终端窗口 在Ubuntu和Linux Mint中 Ctrl Alt T 然后 在一行中键入以下三个命令 用分号分隔 然后按Enter 这会列出
  • 09、用户、组(一):基本分类

    1 用户类别 管理员 普通用户 系统用户 登录用户 2 用户标识 UserID UID 16bits二进制数字 0 65535 管理员 0 普通用户 1 65635 系统用户 1 499 CentOS6 1 999 CentOS7 登录用户
  • springboot2.0 redis使用lettuce连接包实现分布式锁关键词setnx

    springboot升级到2 0之后 关联的spring data redis默认使用的连接包也从原本的jedis改为了性能更好 且线程安全的使用netty实现的lettuce连接包 鉴于spring data默认只提供了setnx不带过期
  • Unable to negotiate with XXXX port 22: no matching host key type found. Their offer: ssh-rsa,ssh-dss

    问题描述 代码仓库已经添加了ssh公钥之后 克隆代码到本地时就报了这个问题 执行命令 git clone git xxxxxxxxxxxxx git 不能正常clone代码 报错信息如下 Unable to negotiate with x
  • JVM 面试深入理解内存模型和垃圾回收(二)

    JVM 面试深入理解内存模型和垃圾回收 二 文章目录 JVM 面试深入理解内存模型和垃圾回收 二 1 运行时数据区域 1 1 The PC Register 1 2 Java Virtual Machine Stacks 1 2 1 Fra
  • MongoDB Replica Sets + Sharding 实战

    一 Replica Sets 复制集 MongoDB 支持在多个机器中通过异步复制达到故障转移和实现冗余 多机器中同一时刻只有一台是用于写操作 正是由于这个情况 为 MongoDB 提供了数据一致性的保障 担当Primary 角色的机器能把
  • image点击事件

    self headImage userInteractionEnabled YES UITapGestureRecognizer singleTap1 UITapGestureRecognizer alloc initWithTarget
  • 实验八 模板

    一 实验目的和要求 1 能够使用C 模板机制定义重载函数 2 能够实例化及使用模板函数 3 能够实例化和使用模板类 4 应用标准C 模板库 STL 通用算法和函数对象实现查找和排序 二 实验内容 1 分析并调试下列程序 了解函数模板的使用
  • GJM : 【技术干货】给The Lab Renderer for Unity中地形添加阴影

    感谢您的阅读 喜欢的 有用的就请大哥大嫂们高抬贵手 推荐一下 吧 你的精神支持是博主强大的写作动力以及转载收藏动力 欢迎转载 版权声明 本文原创发表于 请点击连接前往 未经作者同意必须保留此段声明 如有问题请联系我 侵立删 谢谢 我的博客
  • R4 STM32高级定时器笔记之PWM互补输出

    STM32高级定时器笔记之PWM互补输出 程序功能 通过两个GPIO 输出相反的PWM信号 带死区时间和刹车控制 PWM为50 要配置几个寄存器 CNT计数器 CCR输出比较寄存器器 输入捕获寄存器 ARR自动重装载寄存器 最大65535