<STM32>STM32F103ZET6-可调参数定时器1互补PWM输出

<STM32>STM32F103ZET6-可调参数定时器1互补PWM输出

一 基础工程

本例基础工程以正点原子战舰V3开发板配套 库函数 开发例程《实验9 PWM输出实验》;
在此例程基础上进行 定时器1互补PWM输出。

二 代码修改

基于例程,只需修改main.c即可,修改后内容如下:

#include "led.h"
#include "delay.h"
#include "key.h"
#include "sys.h"
#include "usart.h"
#include "timer.h"void GPIO_TIM1_Init(void)
{GPIO_InitTypeDef GPIO_InitStructure;TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;TIM_OCInitTypeDef  TIM_OCInitStructure;TIM_BDTRInitTypeDef TIM_BDTRInitStructure;/* GPIOA and GPIOB clock enable */RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE);/* GPIOA Configuration: Channel 1 and 2 as alternate function push-pull */GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStructure);/* GPIOB Configuration: Channel 1N and 2N as alternate function push-pull */GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_14;GPIO_Init(GPIOB, &GPIO_InitStructure);/* TIM1 clock enable */RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1 , ENABLE);/* Time base configuration */TIM_TimeBaseStructure.TIM_Period = 0;TIM_TimeBaseStructure.TIM_Prescaler = 0;TIM_TimeBaseStructure.TIM_ClockDivision = 0;TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);/* PWM1 Mode configuration: Channel1 */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 = 0;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_OCIdleState_Reset;TIM_OC1Init(TIM1, &TIM_OCInitStructure);TIM_OC2Init(TIM1, &TIM_OCInitStructure);/* Automatic Output enable, Break, dead time and lock configuration */TIM_BDTRInitStructure.TIM_OSSRState = TIM_OSSRState_Enable;TIM_BDTRInitStructure.TIM_OSSIState = TIM_OSSIState_Enable;TIM_BDTRInitStructure.TIM_LOCKLevel = TIM_LOCKLevel_OFF;TIM_BDTRInitStructure.TIM_DeadTime = 0;TIM_BDTRInitStructure.TIM_Break = TIM_Break_Disable;TIM_BDTRInitStructure.TIM_BreakPolarity = TIM_BreakPolarity_High;TIM_BDTRInitStructure.TIM_AutomaticOutput = TIM_AutomaticOutput_Enable;TIM_BDTRConfig(TIM1, &TIM_BDTRInitStructure);TIM_Cmd(TIM1, ENABLE);TIM_CtrlPWMOutputs(TIM1, ENABLE);
}void Adjust_TIM1(uint16_t freq, uint16_t deadTime, uint16_t dutyCycle)
{uint16_t period = (SystemCoreClock / freq) - 1;uint16_t pulse = (period + 1) * dutyCycle / 100;TIM1->ARR = period;TIM1->CCR1 = pulse;TIM1->CCR2 = pulse;TIM1->BDTR &= ~TIM_BDTR_DTG;TIM1->BDTR |= deadTime;
}int main(void){		u16 led0pwmval=0;u8 dir=1;	delay_init();	    	 //延时函数初始化	  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); 	 //设置NVIC中断分组2:2位抢占优先级,2位响应优先级uart_init(115200);	 //串口初始化为115200LED_Init();			     //LED端口初始化TIM3_PWM_Init(8990,0);	 //不分频。PWM频率=72000000/900=80Khz PB5GPIO_TIM1_Init(); //pa8  pb7  如何 使用 keil5 logic analyzer 查看GPIOA8的信号波形Adjust_TIM1(7200,20,60);while(1){delay_ms(10);	 if(dir)led0pwmval++;else led0pwmval--;if(led0pwmval>300)dir=0;if(led0pwmval==0)dir=1;										 TIM_SetCompare2(TIM3,led0pwmval);		   }	 }

其中函数 void GPIO_TIM1_Init(void) 和void Adjust_TIM1(uint16_t freq, uint16_t deadTime, uint16_t dutyCycle) 是新增 内容。

GPIO_TIM1_Init():用以初始化定时器 互补输出;
Adjust_TIM1():用以修改定时器1的输出频率、占空比 以及死区时间。

三 查看波形

3.1 配置

在这里插入图片描述

3.2 debug

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.3 运行

在这里插入图片描述

四 结论

配置完成TIM1的PWM输出后 可看到两路PWM为互补输出波形。

五 拓展

在上述代码中其实以及配置了 第二组的PWM互补输出。分别是GPIOA9 和 GPIOB14,以及 使用 TIM_OC2Init(TIM1, &TIM_OCInitStructure);初始化;并通过TIM1->CCR2 = pulse;配置占空比。
拓展查看波形如下:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/57280.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

返回一组数据中出现频率最多的元素(众数),可能是一个或多个statistics.multimode()

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 返回一组数据中出现频率最多的 元素(众数),可能是一个或多个 statistics.multimode() 选择题 下列说法错误的是? import statistics data [0, 1, 1, 2, 2, 3] print(【显示】d…

侯捷 C++面向对象编程笔记——10 继承与虚函数

10 继承与虚函数 10.1 Inheritance 继承 语法::public base_class_name public 只是一种继承的方式,还有protect,private 子类会拥有自己的以及父类的数据 10.1.1 继承下的构造和析构 与复合下的构造和析构相似 构造是由内而外 Container …

Jenkins 使用

Jenkins 使用 文章目录 Jenkins 使用一、jenkins 任务执行二、 Jenkins 连接gitee三、Jenkins 部署静态网站 一、jenkins 任务执行 jenkins 创建 job job的名字最好是有意义的 restart_web_backend restart_web_mysql[rootjenkins ~]# ls /var/lib/jenkins/ config.xml …

小研究 - MySQL 分区技术在海量系统日志中的应用

随着信息技术的飞速发展,系统的业务功能不断扩大,产生的日志与日俱增,导致应用软件的运行速度越来越慢,不能很好地满足用户对软件性能的需求。基于此,重点研究了 MySQL 分区技术在大数据量软件日志中的应用&#xff0c…

MySQL的常用函数大全

一、字符串函数 常用函数: 函数功能CONCAT(s1, s2, …, sn)字符串拼接,将s1, s2, …, sn拼接成一个字符串LOWER(str)将字符串全部转为小写UPPER(str)将字符串全部转为大写LPAD(str, n, pad)左填充,用字符串pad对str的左边进行填充&#xff0…

Transformer学习笔记

Transformer学习笔记 前言前提条件相关介绍Transformer总体架构编码器(Encoder)位置编码(Positional Encoding)get_attn_pad_mask函数(Padding Mask)EncoderLayerMultiHeadAttentionScaledDotProductAttent…

K8S系列文章之 Kind 部署K8S的 服务发布

安装kind 下载 https://github.com/kubernetes-sigs/kind/releases/download/0.17.0/kind-linux-amd64 执行以下命令: mv kind-linux-amd64 /usr/local/bin/kind chmod 777 /usr/local/bin/kind 之前需要先在本地主机安装好docker yum -y install yum-utils d…

【ArcGIS Pro二次开发】(58):数据的本地化存储

在做村规工具的过程中,需要设置一些参数,比如说导图的DPI,需要导出的图名等等。 每次导图前都需要设置参数,虽然有默认值,但还是需要不时的修改。 在使用的过程中,可能会有一些常用的参数,希望…

将整数,结构体,结构体数组,链表写到文件

在之前的学习中,忘文件中写的内容都是字符串或字符,本节学习如何写入其他各种类型的数据。 回看write和read函数的形式: ssize_t write(int fd, const void *buf, size_t count); ssize_t read(int fd, void *buf, size_t count); 其中&a…

decimal类型在MySQL中的正确使用 (长度和小数点)

1. MySQL(decimal) 对应 Java(BigDecimal) 2. decimal(16,2) MySQL中类型的设置, 长度16, 保留2位小数 3. 如果长度小于14, 则会出现没小数位的情况

html 计算器界面

其他链接&#xff1a; https://www.freecodecamp.org/news/how-to-build-an-html-calculator-app-from-scratch-using-javascript-4454b8714b98/ https://codepen.io/pen/tour/welcome/start 下面展示一些 内联代码片。 <!DOCTYPE html> <html lang"en">…

Docker 快速安装 MinIO

概述 MinIO 是一款基于Go语言的高性能对象存储服务&#xff0c;非常适合于存储大容量非结构化的数据&#xff0c;例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等。 拉取docker镜像 docker pull minio/minio创建宿主机数据目录&#xff08;共享数据卷&#xff09; 此…