精华内容
下载资源
问答
  • 如何用定时器产生pwm
    万次阅读
    2018-08-12 20:19:40

    /* ----------------   PWM信号 周期 占空比的计算--------------- */
    // ARR :自动重装载寄存器的值
    // CLK_cnt:计数器的时钟等于 Fck_int / (psc+1) = 72M/(psc+1)
    // PWM 信号的周期 T = ARR * (1/CLK_cnt) = ARR*(PSC+1) / 72M
    // 占空比P=CCR/(ARR+1)
    void PWM_Config(uint16_t arr,uint16_t psc)
    {
        GPIO_InitTypeDef GPIO_InitStructure;            //端口初始化结构体定义
        TIM_TimeBaseInitTypeDef TIM_InitStructure;        //定时器初始化结构体定义
        TIM_OCInitTypeDef TIM_OCInitStructure;            //输出比较初始化结构体定义
        
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
        
        GPIO_InitStructure.GPIO_Pin = PWM_Pin;            //TIM_CH1 
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;        //复用推挽输出
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(PWM_GPIO, &GPIO_InitStructure);
        
        TIM_InitStructure.TIM_Period = arr;            //不分频,PWM 频率=72000/1894=38Khz//设置自动重装载寄存器周期的值
        TIM_InitStructure.TIM_Prescaler = psc;        //设置用来作为TIMx时钟频率除数的预分频值  不分频
        TIM_InitStructure.TIM_CounterMode = TIM_CounterMode_Up;        //设置时钟分割:TDTS = Tck_tim
        TIM_InitStructure.TIM_ClockDivision = TIM_CKD_DIV1;            //TIM向上计数模式
        //TIM_InitStructure.TIM_RepetitionCounter            //没有使用
        TIM_TimeBaseInit(PWM_TIM, &TIM_InitStructure);            //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx
        
        TIM_OCInitStructure.TIM_Pulse = 839;        //设置待装入捕获比较寄存器的脉冲值
        TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;    //选择定时器模式:TIM脉冲宽度调制模式1
        TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;    //输出极性:TIM输出比较极性高
        TIM_OCInitStructure.TIM_OutputState    = TIM_OutputState_Enable;    //比较输出使能
        
        TIM_OC1Init(PWM_TIM, &TIM_OCInitStructure);    //根据TIM_OCInitStruct中指定的参数初始化外设TIM1通道1
        
        TIM_CtrlPWMOutputs(PWM_TIM, ENABLE);    //MOE 主输出使能
        
        TIM_OC1PreloadConfig(PWM_TIM, TIM_OCPreload_Enable);    //CH1预装载使能
        
        TIM_ARRPreloadConfig(PWM_TIM, ENABLE);    //使能TIMx在ARR上的预装载寄存器
        
        TIM_Cmd(PWM_TIM, ENABLE);    //使能TIM1
    }

    以上就是了,在定时器引脚上就可以直接生成PWM方波了!改变捕获比较寄存器的值就可以控制占空比!

    更多相关内容
  • 我们可以通过改变PWM 信号的占空比来调节设备的通电时间,例如在LED 小灯的控制上,我们在LED的引脚上产生一个PWM 信号,那么通过改变PWM信号的占空比,则可以改变小灯一个周期内的通电时间,从而使小灯产生不同的亮

    一、PWM

    PWM,英文名Pulse Width Modulation,是脉冲宽度调制缩写,它是通过对一系列脉冲的宽度进行调制,等效出所需要的波形(包含形状以及幅值),对模拟信号电平进行数字编码,也就是说通过调节占空比的变化来调节信号、能量等的变化。
    占空比就是指在一个周期内,高电平所占整个周期的比例。
    我们可以通过改变PWM 信号的占空比来调节设备的通电时间,例如在LED 小灯的控制上,我们在LED的引脚上产生一个PWM 信号,那么通过改变PWM信号的占空比,则可以改变小灯一个周期内的通电时间,从而使小灯产生不同的亮度

    在这里插入图片描述

    二、题目+分析

    1.PWM脉宽信号的频率为100Hz。
    2.系统上电后L1指示灯处在熄灭状态。
    3. L1指示灯有4种亮度模式,分别是完全熄灭、10%的亮度、50%的亮度和90%的亮度。
    4.按下S7按键,循环切换L1指示灯的四种亮度模式。

    1.51单片机中我们可以通过定时器来实现PWM信号,通过定时器来控制PWM信号的周期,把每个周期分成n等份,设高电平所占每个周期的时间为t,则t/n*100即为占空比
    2.要想实现LED小灯的不同亮度,则可以通过改变LED引脚的占空比来实现。

    三、详细代码

    //@mzw
    /*1.PWM脉宽信号的频率为100Hz。
      2.系统上电后L1指示灯处在熄灭状态。
      3. L1指示灯有4种亮度模式,分别是完全熄灭、10%的亮度、50%的亮度和90%的亮度。
      4.按下S7按键,循环切换L1指示灯的四种亮度模式。*/
    #include <reg52.h>
    #include <intrins.h>
    
    sbit hc138_A=P2^5;
    sbit hc138_B=P2^6;
    sbit hc138_C=P2^7;
    
    sbit LED1 = P0^0;
    sbit S7 = P3^0;
    
    unsigned char key_value = 0;//按键值
    unsigned int count = 0;	//PWM占空比,小灯点亮的时间,10为满
    //正常情况下占空比为高电平所占总周期的时间比,但这里因为LED为低电平点亮,所以相反
    /*****配置138译码器*****/
    void HC138(unsigned int n)
    {
        switch(n)
        {
            case 4:
            hc138_A=0 ; hc138_B=0 ; hc138_C=1; break;
            case 5:
            hc138_A=1 ; hc138_B=0 ; hc138_C=1; break;
            case 6:
            hc138_A=0 ; hc138_B=1 ; hc138_C=1; break;
            case 7:
            hc138_A=1 ; hc138_B=1 ; hc138_C=1; break;
        }
    }
    /*****延时函数*****/
    void delay(unsigned int k)
    {
        while(k--);
    }
    
    /*****定时器TIM0初始化*****/
    void TIM0_Init()
    {
    	TMOD = 0x01;
    	TH0 = (65535 - 1000)/256;	//设置定时器初值,高八位放在TH0中,定时时间1000us = 1ms
    	TL0 = (65535 - 1000)%256;	//设置定时器初值,低八位放在TL0中
    	TR0 = 1;	//启动T0
    	ET0 = 1;	//开T0中断
    	EA = 1;		//开总中断
    }
    /*****定时器0中断服务函数*****/
    unsigned int time = 0;	//设置计时标志,每产生一次中断则+1
    void TIM0_work()	interrupt 1	//定时器0的中断号为1
    {
    	TH0 = (65535 - 1000)/256;	//设置定时器初值,高八位放在TH0中,
    	TL0 = (65535 - 1000)%256;	//设置定时器初值,低八位放在TL0中,
    	time++;
    	if(time < count)
    		LED1 = 0;	//点亮
    	else 
    		LED1 = 1;
    	
    	if(time == 10)//周期为10ms//频率为100HZ
    		time = 0;	//清零
    }
    
    void key_scan()	//按键扫描函数
    {
    	if(S7 == 0)
    	{
    		delay(100);
    		if(S7 == 0)
    			key_value = 7;
    		while(!S7);
    	}
    }
    
    void main()
    {
    	char i = 0;
    	HC138(5);
    	P0=0x00;	//蜂鸣器和继电器初始化、、全关
    	HC138(4);
    	P0= 0xff;	//LED小灯初始化、、全关
    	TIM0_Init();
    	while(1)
    	{
    		key_scan();
    		if(key_value == 7)
    		{
    			switch(i)
    			{
    				case 0 : count = 1; i = 1; break;
    				case 1 : count = 5; i = 2; break;
    				case 2 : count = 9; i = 0; break;
    			}
    			key_value = 0;
    		}
    	}
    }
    
    
    
    
    展开全文
  • 使用STM32自带PWM脚实现定时器中断发出PWM功能

    【STM32Cube笔记】系列文章目录

    1-基于STM32的VSCode入门级教程前言
    2-STM32Cube安装教程
    3-STM32CubeIDE汉化
    4-STM32Cube配置时钟设置
    5-跑马灯引脚配置
    6-Cortex-M7内核基本配置
    7-新建用于储存代码的文件夹以及c/h文件
    8-STM32CubeIDE点亮跑马灯
    9-STLink调试
    10-异步串口收发USART
    11-中断控制器NVIC
    12-配置外部中断
    13-使用定时器产生PWM输出
    14-使用定时器捕获上升/下降沿
    15-数模转换AD/DA
    16-STM32Cube个性化定制


    7.4 使用定时器产生PWM输出

    7.4.1 配置PWM输出通道
    返回到引脚配置系统中,这次我们选用TIM3作为PWM的产生定时器,在“TIM3”界面将“Clock Source”设为“Internal Clock”内部时钟,再将通道4设为“PWM Genration CH4”。
    选用定时器3通道4的原因是它与开发板LED相连,方便查看PWM情况。
    在这里插入图片描述

    接着进入TIM3的配置设置中(没显示出来的注意去刷新系统时钟)
    在这里插入图片描述

    将系统分频设为480,得到1KHZ频率,将计数设为1000得到1000us的PWM周期。
    频率 = 定时器时钟 / (Prescaler 预分频 + 1) / (Counter Period 计数值 + 1) Hz
    占空比 = Pulse ( 对比值) / (C ounter Period 计数值) %
    同时开启自动重载防止定时器溢出。点击保存并生成代码。
    7.4.2 PWM输出开启
    在“NVIC.c”中,为中断函数初始化分别添加定时器3开启以及PWM占空比的代码即可。
    在这里插入图片描述

    由于开发板是串联红色LED接电源的方式连接,高电平时电流不导通LED为灭,又因为红色LED发出的光强较强,因此需要高占空比才能用肉眼看出差距。因此这里将“HAL_TIM_SET_CMPARE”值设为990,相较于1000的计数值占空比即为99%,使得大部分时间IO口输出为高电平。
    实际效果:

    在这里插入图片描述

    附上程序:

    /** Configure pins
         PB0   ------> IO_LED0_Pin
         PB1   ------> &htim3,TIM_CHANNEL_4
    */
    #include "NVIC.h"
    void NVIC_Init(){
    	HAL_TIM_Base_Start_IT(&htim1);			//HAL库开启定时器1
    	HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_4);//HAL库开启定时器3,并使用通道4输出PWM
    	__HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_4, 990);//HAL库修改占空比至99%
    
    }
    void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) {	//中断回调函数
    if (htim->Instance == htim1.Instance) {					//判断是哪个定时器产生中断
    	HAL_GPIO_TogglePin(IO_LED0_GPIO_Port, IO_LED0_Pin);	//HAL库控制IO_LED0电平反转
    }
    }
    
    
    展开全文
  • 通用定时器产生PWM

    千次阅读 2020-01-07 23:16:30
    STM32F1除了基本定时器TIM6和TIM7,其他定时器都可以产生PWM输出:其中高级定时器 TIM1 和 TIM8 可以同时产生多达 7 路的 PWM 输出,而通用定时器也能同时产生多达 4路的 PWM 输出。 PWM的输出其实就是对外输出脉宽...

    一、STM32F103 PWM介绍
    STM32F1除了基本定时器TIM6和TIM7,其他定时器都可以产生PWM输出:其中高级定时器 TIM1 和 TIM8 可以同时产生多达 7 路的 PWM 输出,而通用定时器也能同时产生多达 4路的 PWM 输出。
    PWM的输出其实就是对外输出脉宽可调(即占空比调节)的方波信号,信号频率是由自动重装寄存器ARR的值决定,占空比由比较寄存器CCR的值决定。
    PWM输出比较模式总共有8种,具体由寄存器 CCMRx 的位 OCxM[2:0]配置。这里只讲解最常用的两种PWM输出模式:PWM1和PWM2。PWM1和PWM2这两种模式用法差不多,区别之处就是输出电平的极性不同。
    在这里插入图片描述
    二、PWM输出配置步骤
    (1)使能定时器及端口时钟,并设置引脚复用器映射

    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);	//使能定时器时钟
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);	//使能引脚复用时钟
    GPIO_PinRemapConfig(GPIO_FullRemap_TIM3,ENABLE);	//TIM3完全重映射
    

    在这里插入图片描述
    (2)初始化相应的GPIO,模式选复用推挽输出
    (3)初始化定时器参数,包含自动重装值,分频系数,计数方式等

    void TIM_TimeBaseInit(TIM_TypeDef*  TIMx, TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct);  //TIMx为对应的定时器,TIM_TimeBaseInitStruct为配置结构体
    

    (4)初始化PWM输出参数,包含PWM模式、输出极性,使能等

    void TIM_OCxInit(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct);	//TIM_OCInitStruct为配置结构体
    //TIM_OCInitTypeDef的部分成员
    typedef struct{
    	uint16_t TIM_OCMode;        //比较输出模式
    	uint16_t TIM_OutputState;   //比较输出使能
    	uint16_t TIM_OCPolarity;    //输出极性
    }TIM_OCInitTypeDef; 	
    
    TIM_OCMode描述
    TIM_OCMode_PWM1TIM脉宽宽度调制模式1
    TIM_OCMode_PWM2TIM脉宽宽度调制模式2
    TIM_OutputState比较输出使能/失能
    TIM_OutputState_Enable使能
    TIM_OutputState_Disable失能
    TIM_OCCPolarity输出极性
    TIM_OCPlarity_High高电平有效
    TIM_OCPlarity_Low低电平有效

    (5)开启定时器

    TIM_Cmd(TIM3,ENABLE); //开启定时器
    

    (6)使能TIMx在CCRx上的预装载寄存器

    //第一个参数用于选择定时器,第二个参数用于选择使能还是失能输出比较预装载寄存器,可选择为TIM_OCPreload_Enable、TIM_OCPreload_Disable。
    void TIM_OCxPreloadConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPreload);
    

    (7)使能 TIMx 在 ARR 上的预装载寄存器允许位

    //第一个参数用于选择定时器,第二个参数用于选择使能还是失能。
    void TIM_ARRPreloadConfig(TIM_TypeDef* TIMx, FunctionalState NewState);
    

    (8)修改TIMx_CCRx的值控制占空比

    //第一个参数用于选择定时器,第二个参数用于控制占空比
    void TIM_SetCompare1(TIM_TypeDef* TIMx, uint32_t Compare1); 
    

    三、总结写法如下

    /******************************
    函数名:void TIM3_PWM_Init(u16 pre,u16 psc);
    参数:pre为周期,psc为预分频
    功能:使用通用定时器TIM3产生四路pwm,因使用完全重映射,故输出引脚分别为PC6、PC7、PC8、PC9
    *******************************/
    void TIM3_PWM_Init(u16 pre,u16 psc){
    	GPIO_InitTypeDef GPIO_initStructure;			//GPIO配置结构体
    	TIM_TimeBaseInitTypeDef TIM_InitStructure;		//定时器配置结构体
    	TIM_OCInitTypeDef TIM_OCInitTypeDefStructure;		//PWM输出参数配置结构体
    	
    	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);	//使能定时器时钟
    	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);	//使能GPIOC时钟
    	RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);	//使能复用功能时钟
    	
    	GPIO_initStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9;
    	GPIO_initStructure.GPIO_Mode = GPIO_Mode_AF_PP;		//复用推挽输出
    	GPIO_initStructure.GPIO_Speed = GPIO_Speed_50MHz;
    	GPIO_Init(GPIOC,&GPIO_initStructure);			//初始化GPIO
    	
    	GPIO_PinRemapConfig(GPIO_FullRemap_TIM3,ENABLE);	//复用使能,完全重映射
    	
    	TIM_InitStructure.TIM_Period = pre;			//定时器周期
    	TIM_InitStructure.TIM_Prescaler = psc;			//定时器预分频器
    	TIM_InitStructure.TIM_ClockDivision = TIM_CKD_DIV1;	//时钟分频
    	TIM_InitStructure.TIM_CounterMode = TIM_CounterMode_Up;	//计数模式
    	TIM_TimeBaseInit(TIM3,&TIM_InitStructure);		//初始化TIM3
    	
    	TIM_OCInitTypeDefStructure.TIM_OCMode = TIM_OCMode_PWM1;		//PWM输出模式
    	TIM_OCInitTypeDefStructure.TIM_OCPolarity = TIM_OCPolarity_High;		//输出极性,根据实际需要更改
    	TIM_OCInitTypeDefStructure.TIM_OutputState = TIM_OutputState_Enable;	//使能比较输出
    	
    	TIM_OC1Init(TIM3,&TIM_OCInitTypeDefStructure);		//初始化通道1PWM输出
    	TIM_OC2Init(TIM3,&TIM_OCInitTypeDefStructure);  	//初始化通道2PWM输出
    	TIM_OC3Init(TIM3,&TIM_OCInitTypeDefStructure);  	//初始化通道3PWM输出
    	TIM_OC4Init(TIM3,&TIM_OCInitTypeDefStructure);  	//初始化通道4PWM输出
    	
    	TIM_OC1PreloadConfig(TIM3,TIM_OCPreload_Enable);	//使能TIM3在CCR1上的预装载寄存器
    	TIM_OC2PreloadConfig(TIM3,TIM_OCPreload_Enable);	//使能TIM3在CCR2上的预装载寄存器
    	TIM_OC3PreloadConfig(TIM3,TIM_OCPreload_Enable); 	//使能TIM3在CCR3上的预装载寄存器
    	TIM_OC4PreloadConfig(TIM3,TIM_OCPreload_Enable); 	//使能TIM3在CCR4上的预装载寄存器
    	TIM_ARRPreloadConfig(TIM3,ENABLE); 			//使能 TIMx 在 ARR 上的预装载寄存器允许位
    	
    	TIM_Cmd(TIM3,ENABLE);					//开启定时器
    }	
    
    //在main中调用函数修改占空比
    void TIM_SetCompare1(TIM_TypeDef* TIMx, uint32_t Compare1);	//修改通道1占空比
    void TIM_SetCompare2(TIM_TypeDef* TIMx, uint32_t Compare2); 	//修改通道2占空比
    void TIM_SetCompare3(TIM_TypeDef* TIMx, uint32_t Compare3); 	//修改通道3占空比
    void TIM_SetCompare4(TIM_TypeDef* TIMx, uint32_t Compare4); 	//修改通道4占空比
    

    占空比计算: 占空比 = Compare1 / pre * 100%

    展开全文
  • 利用 51 定时器生成 PWM

    千次阅读 2021-12-14 18:55:19
    利用 51 定时器生成 PWM 1 PWM 简介 PWM(Pulse Width Modulation,脉冲宽度调制)是按一定规律改变脉冲序列的脉冲宽度,以调节输出量和波形的一种调制方式。 在控制系统中最常用的是矩形波 PWM 信号,在控制时需要...
  • 在STM32中应用定时器产生PWM波,定时器的配置,PWM波占空比的设置等的简单模拟。
  • 只需一路定时器的输入捕获即可精确地测量 PWM 频率和占空比,测试精度与定时器的频率有关,测试结果使用串口1打印出来,单位为 us
  • STM32F4的定时器产生PWM

    千次阅读 2018-03-19 20:48:38
    1、PWM原理简介2、相关寄存器
  • 由于51单片机没有PWM的功能,所以控制舵机等旋转旋转固定角度相对困难,本程序利用定时器模拟一个PWM产生的周期和频率较为准确。
  • 定时器输出PWM原理

    2021-11-23 14:59:45
    模式 //结构体初始化:init1、2、3、4表示不同通道,通道1234。 //设置比较值,一般情况下可以在结构体内设置,特殊情况下也可以调用这个函数设置来...//配置修改极性:很少,因为在结构体已经配置完成。 ...
  • stm32F4单片机高级定时器TIM8产生4路独立的不同频率和占空比的PWM信号输出,重要的环节已经加了详细注释,方便大家项目中应用,避免比较坑的地方。
  • PWM捕获(一路定时器通道),定时器产生pwm原理,C,C++源码.rar
  • PWM捕获(一路定时器通道),定时器产生pwm原理,C,C++源码.zip
  • 基于STM32定时器产生PWM的研究.doc
  • 函数功能:定时器1通道1 4产生PWM波 函数参数:无 函数返回值:无 函数描述:无 */ void Dingshiqi1_PWM_Init(void) { TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct; //时间基 结构体变量 GPIO_InitTypeDef ...
  • 基于-STM32定时器产生PWM的研究.doc
  • 基于STM32定时器产生PWM的研究报告.doc
  • 任务要求:使用定时器输出两路不同占空比的PWM波形。 #include <stdint.h> #include <stdbool.h> #include "inc/tm4c123gh6pm.h" #include "inc/hw_memmap.h" #include "inc/hw_types.h" #include ...
  • STM32F103C8T6使用定时器产生PWM的相关讲解
  • 简介:   STM32 的定时器除了 TIM6 和 7。其他的定时器都可以用来...1:定时器产生PWM原理 在PWM输出模式下,除了CNT(计数器当前值)、ARR(自动重装载值)之外,还多了一个值CCRx(捕获/比较寄存器值)。 当CN
  • 本文介绍如何通过定时器产生PWM来驱动电机。 void RCC_Configuration() { /*GPIO*/ RCC_APB2PeriphClockCmd(RCC_APB2PERIPH_GPIOA, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2PERIPH_GPIOB, ENABLE); /*TMR*/ ...
  • STC系列51单片机利用PCA定时器产生PWM信号例程,使用STC系列单片机自带PWM功能
  • PWM的工作原理

    2020-11-13 02:54:43
    PWM定时器的计数缓冲寄存器TCNTBn的值是当定时器使能时装载到减法计数器上的初始值,定时器比较缓冲寄存器TCMPBn的值,将装载到比较寄存器并与减法计数器的值比较。TCNTBn和TCMPBn双重缓冲的特性使定时器在频率和...
  • 定时器PWM脉冲

    2021-08-09 18:51:15
    其他的定时器都可以用来产生 PWM 输出。 高级定时器 TIM1 和 TIM8 可以同时产生多达 7 路的 PWM 输出。 通用定时器也能同时产生多达 4路的 PWM 输出, PWM 寄存器与功能原理 TIMx_CCR1~4,捕获/比较寄存器 该...
  • STM32CubeMX-定时器产生PWM驱动舵机

    千次阅读 多人点赞 2021-05-03 19:42:18
    STM32CubeMX-使用cube配置定时器产生PWM驱动舵机
  • 只需一路定时器的输入捕获即可精确地测量 PWM 频率和占空比,测试精度与定时器的频率有关,测试结果使用串口1打印出来,单位为 us
  • 简要说明定时器产生pwm
  • 1.初始化 1.定义相关变量 GPIO_InitTypeDef GPIO_InitStructure;...2.打开定时器和GPIO时钟 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM14, ENABLE); RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF,
  • STM32定时器2PWM输出

    2019-08-12 11:56:51
    pwm输出实验 经过验证 TIM2定时器输出 输出4通道 通道1 PA0 通道2 PA1 通道3 PA2 通道4 PA3 可通过TIM_SetCompare1(TIM1, PWM);对PA1进行输出PWM 谢谢

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 11,144
精华内容 4,457
关键字:

如何用定时器产生pwm