首页 > 其他分享 >2023版 STM32实战6 输出比较(PWM)包含F407/F103方式

2023版 STM32实战6 输出比较(PWM)包含F407/F103方式

时间:2023-11-24 09:15:39浏览次数:40  
标签:TIM3 STM32 TIM TimeBaseStructure InitStructure F407 2023 OCInitStructure GPIO

输出比较简介和特性

-1-只有通用/高级定时器才能输出PWM

-2-占空比就是高电平所占的比例

-3-输出比较就是输出不同占空比的信号

 

工作方式说明

 

-1-1- PWM工作模式

 

 

-1-2- 有效/无效电平

 

有效电平可以设置为高或低电平,是自己配置的

 

周期选择与计算

 

周期=重装载 * 预分频值 / 时钟频率

 

 

 

 

arr和psc是自己定义的 时钟频率可以查看时钟树,即下图中的84MHZ

 

 

F1和F4采用的时钟频率

F1通过72MHZ分频

F4通过84MHZ分频

HZ代表单位时间震荡次数,如1MHZ,就是一秒震荡1000000次

 

代码分享(一路PWM输出,F1可直接使用)

 

void TIM3_PWM_Init(u16 arr,u16 psc)
{  
    GPIO_InitTypeDef GPIO_InitStructure;
    TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
    TIM_OCInitTypeDef  TIM_OCInitStructure;
    

    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);    //使能定时器3时钟
     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB  | RCC_APB2Periph_AFIO, ENABLE);  //使能GPIO外设和AFIO复用功能模块时钟
    
    GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3, ENABLE); //Timer3部分重映射  TIM3_CH2->PB5    
 
   //设置该引脚为复用输出功能,输出TIM3 CH2的PWM脉冲波形    GPIOB.5
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; //TIM_CH2
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  //复用推挽输出
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化GPIO
 
   //初始化TIM3
    TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值
    TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值 
    TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS = Tck_tim
    TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上计数模式
    TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位
    
    //初始化TIM3 Channel2 PWM模式     
    TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //选择定时器模式:TIM脉冲宽度调制模式2
     TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能
    TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性:TIM输出比较极性高
    TIM_OC2Init(TIM3, &TIM_OCInitStructure);  //根据T指定的参数初始化外设TIM3 OC2

    TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);  //使能TIM3在CCR2上的预装载寄存器
 
    TIM_Cmd(TIM3, ENABLE);  //使能TIM3
    

}

 

代码分享(四路PWM输出,F4可直接使用)

 

#include "stm32f4xx.h"



TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
TIM_OCInitTypeDef  TIM_OCInitStructure;
uint16_t CCR1_Val = 333;
uint16_t CCR2_Val = 249;
uint16_t CCR3_Val = 166;
uint16_t CCR4_Val = 83;
uint16_t PrescalerValue = 0;


 void TIM_Config(void);
 void PWM_Config (void);
int main()
{

    TIM_Config();
    PWM_Config();
    while (1)
    {
        
    
    }



}




 void TIM_Config(void)
 {
    GPIO_InitTypeDef GPIO_InitStructure;

   /* TIM3 clock enable */
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
 
   /* GPIOC clock enable */
    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE);
  
   /* GPIOC Configuration: TIM3 CH1 (PC6), TIM3 CH2 (PC7), TIM3 CH3 (PC8) and TIM3 CH4 (PC9) */
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
    GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP ;
    GPIO_Init(GPIOC, &GPIO_InitStructure); 
 
   /* Connect TIM3 pins to AF2 */  
    GPIO_PinAFConfig(GPIOC, GPIO_PinSource6, GPIO_AF_TIM3);
    GPIO_PinAFConfig(GPIOC, GPIO_PinSource7, GPIO_AF_TIM3); 
    GPIO_PinAFConfig(GPIOC, GPIO_PinSource8, GPIO_AF_TIM3);
    GPIO_PinAFConfig(GPIOC, GPIO_PinSource9, GPIO_AF_TIM3); 
 }


void PWM_Config (void)
{
    PrescalerValue = (uint16_t) ((SystemCoreClock /2) / 21000000) - 1;
    
    /* Time base configuration */
    TIM_TimeBaseStructure.TIM_Period = 665;
    TIM_TimeBaseStructure.TIM_Prescaler = PrescalerValue;
    TIM_TimeBaseStructure.TIM_ClockDivision = 0;
    TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
    
    TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
    
    /* PWM1 Mode configuration: Channel1 */
    TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
    TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
    TIM_OCInitStructure.TIM_Pulse = CCR1_Val;
    TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
    
    TIM_OC1Init(TIM3, &TIM_OCInitStructure);
    
    TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable);
    
    /* PWM1 Mode configuration: Channel2 */
    TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
    TIM_OCInitStructure.TIM_Pulse = CCR2_Val;
    
    TIM_OC2Init(TIM3, &TIM_OCInitStructure);
    
    TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);
    
    /* PWM1 Mode configuration: Channel3 */
    TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
    TIM_OCInitStructure.TIM_Pulse = CCR3_Val;
    
    TIM_OC3Init(TIM3, &TIM_OCInitStructure);
    
    TIM_OC3PreloadConfig(TIM3, TIM_OCPreload_Enable);
    
    /* PWM1 Mode configuration: Channel4 */
    TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
    TIM_OCInitStructure.TIM_Pulse = CCR4_Val;
    
    TIM_OC4Init(TIM3, &TIM_OCInitStructure);
    
    TIM_OC4PreloadConfig(TIM3, TIM_OCPreload_Enable);
    
    TIM_ARRPreloadConfig(TIM3, ENABLE);
    
    /* TIM3 enable counter */
    TIM_Cmd(TIM3, ENABLE);



}
 
 

 

全部工程获取

三联,关注后私信获取

 

标签:TIM3,STM32,TIM,TimeBaseStructure,InitStructure,F407,2023,OCInitStructure,GPIO
From: https://www.cnblogs.com/wm9-/p/17852923.html

相关文章

  • #2023-2024-1 20231308 《计算机基础与程序设计》第九周学习总结
    2023-2024-120231308《计算机基础与程序设计》第九周学习总结作业信息这个作业属于哪个课程2023-2024-1-计算机基础与程序设计这个作业要求在哪里2023-2024-1计算机基础与程序设计第九周作业这个作业的目标计算机科学概论第10,11章《C语言程序设计》第8章并完成......
  • 2023 CCPC 哈尔滨 BLM
    [2023CCPC哈尔滨](The2ndUniversalCup.Stage10:Harbin-Dashboard-Contest-UniversalCupJudgingSystem(ucup.ac))BLMB.Memory思路:由递推式:\(Mood(i)=\sum_{j=1}^{i}2^{j-i}\timesa_j\)可知,\(f[i]=f[i-1]/2+a[i]\)显然直接\(/2\)会有精度问题啦,怎么办......
  • 2023.11.20-2023.11.26 周记
    11.20星期一升旗仪式时间改到上午大课间了,前一节还正好是体育,之前太冷现在太热,真服了。与其说升旗仪式,到不如说是颁奖仪式。七年级年级前十:李泊璇、陈墨杋、黄耀民、周敬轩、牛文昊、张轩豪、秦子祺、时欣翔、徐颢扬、宋之萱。八年级年级前十:何家鼎、李承恩、朱鑫、陈亦飞、张......
  • 2023-11-23
    packagecn.alan.wms;importcn.alan.wms.async.Async;importcn.alan.wms.bean.User;importcn.alan.wms.listener.OnCompleteListener;importcn.alan.wms.tools.OperateSql;importcn.alan.wms.tools.Logger;importjava.util.ArrayList;importjava.util.List;......
  • 20231122
    2023/11/231798C-CandyStore只能说gcd,lcm的题目还是练少了,一些性质都不知道。对于一段可以用同一个标签的区间,我们知道他们的c是一样的,c=di*bi,每一个物品的bi固定,那么c就一定是lcm{bi..bn},因为c要能整除任何一个bi。然后我们来看可以自己决定的di,ai%di==0.而每一个物品的di=......
  • 20231123
    2023/11/231798C-CandyStore只能说gcd,lcm的题目还是练少了,一些性质都不知道。对于一段可以用同一个标签的区间,我们知道他们的c是一样的,c=di*bi,每一个物品的bi固定,那么c就一定是lcm{bi..bn},因为c要能整除任何一个bi。然后我们来看可以自己决定的di,ai%di==0.而每一个物品的di=......
  • 2023-2024 20232319《网络空间安全导论》第2周学习总结
    思维导图教材学习过程中的问题和解决过程问题一:sm2算法和sm4算法是对称算法还是非对称算法?答案:sm2属于非对称算法,sm4属于对称算法。问题一解决方案:询问chatgpt。问题二:区块链技术与密码学的关系答案:区块链技术与密码学有着密切的关系,密码学是区块链技术的基础之一。以下是......
  • 2023.11.23——每日总结
    学习所花时间(包括上课):9h代码量(行):0行博客量(篇):1篇今天,上午学习,下午学习;我了解到的知识点:1.JavaGUI2.会话跟踪技术明日计划:学习......
  • 2023-2024-1 20232421邓锴 《网络空间安全导论》 第2周学习总结
    教材学习总结了解密码的来源与发展ENIGMA机的构造以及机理信息论的基本观点了解现代密码学发展以及面临的挑战密码学理论基础(数学知识)密码学的新进展以及未来方向思维导图教材学习中的问题和解决问题问题1:ENIGMA机的构造以及机理了解不清问题1解决办法:查询图片→查找......
  • 20231123
    好久都没写过OI相关的东西了,累了。真的累了。刚刚lf给我说他明天会给我整一个容斥的单元小测。有点紧张,因为自己数学一直都很烂。还有容斥这么抽象的玩意,到时候估计会脑抽。累了。不能放弃啊。继续吧。今天和@Super_Cube吃饭的时候聊到了「关于力老师为什么只同意......