typedef struct

{

uint16_t TIM_OCMode;  //PWM模式1或者模式2

uint16_t TIM_OutputState; //输出使能 OR失能

uint16_t TIM_OutputNState;

uint16_t TIM_Pulse; //比较值,写CCRx

uint16_t TIM_OCPolarity; //比较输出极性

uint16_t TIM_OCNPolarity;

uint16_t TIM_OCIdleState;

uint16_t TIM_OCNIdleState;

} TIM_OCInitTypeDef;

TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //PWM模式2

TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能

TIM_OCInitStructure. TIM_Pulse=100;

TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性:TIM输出比较极性高

TIM_OC2Init(TIM3, &TIM_OCInitStructure);  //根据T指定的参数初始化外设TIM3 OC2

PWM输出配置步骤流程:

l 使能定时器3和相关IO口时钟。

  n 使能定时器3时钟:RCC_APB1PeriphClockCmd();

  n 使能GPIOB时钟:RCC_APB2PeriphClockCmd();

l 初始化IO口为复用功能输出。函数:

  n GPIO_Init();

  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  推挽复用输出控制LED等

l 这里我们是要把PB5用作定时器的PWM输出引脚,所以要重映射配置,

  n 所以需要开启AFIO时钟。同时设置重映射。

   RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);

  GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3, ENABLE);

l 初始化定时器:ARR,PSC等:

  n TIM_TimeBaseInit();

l 初始化输出比较参数:

  n TIM_OC2Init();

l 使能预装载寄存器:

  n TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);

l 使能定时器。

  n TIM_Cmd();

l 不断改变比较值CCRx,达到不同的占空比效果:

  n TIM_SetCompare2();

l 源代码:

 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 = ; //ÉèÖÃʱÖÓ·Ö¸î: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
}
int main(void)
{
u16 led0pwmval=;
u8 dir=;
delay_init(); //ÑÓʱº¯Êý³õʼ»¯
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //ÉèÖÃNVICÖжϷÖ×é2:2λÇÀÕ¼ÓÅÏȼ¶£¬2λÏìÓ¦ÓÅÏȼ¶
uart_init(); //´®¿Ú³õʼ»¯Îª115200
LED_Init(); //LED¶Ë¿Ú³õʼ»¯
TIM3_PWM_Init(,); //²»·ÖƵ¡£PWMƵÂÊ=72000000/900=80Khz
while()
{
delay_ms();
if(dir)led0pwmval++;
else led0pwmval--; if(led0pwmval>)dir=;
if(led0pwmval==)dir=;
TIM_SetCompare2(TIM3,led0pwmval);
}
}

[STM32F103]定时器PWM输入的更多相关文章

  1. 【GMT43智能液晶模块】例程七:定时器PWM实验——简易电子琴

    实验原理: STM32定时器有PWM功能,GMT43模块上带有一无源蜂鸣器,其 PWM输入控制信号接在STM32定时器输出接口上(PB4/TIM3_CH1),可 以通过定时器的PWM输出频率从而控制蜂 ...

  2. STM32(9)——通用定时器作为输入捕捉

    通用定时器作为输入捕获的使用.我们将用 TIM5 的通道 1 (PA0)来做输入捕获,捕获 PA0 上高电平的脉宽(用 WK_UP 按键输入高电平),通过串口打印高电平脉宽时间 输入捕获简介 输入捕获 ...

  3. STM32:TIMER PWM 输入检测

    PWM输入检测是输入捕获的一个特例,可以测量频率与占空比 与输入捕获不同的是PWM输入模式会将同一个输入信号(TI1或TI2)连接到两个捕获装置(IC1和IC2).这两个捕获装置一个捕获上升沿一个捕获 ...

  4. STM32F103ZET6通用定时器的输入捕获

    1.通用定时器输入捕获功能简介 通用定时器的输入捕获模式可以用来测量脉冲宽度或者测量频率. STM32的每个通用定时器都有4个输入捕获的通道,分别是TIMx_CH1.TIMx_CH2.TIMx_CH3 ...

  5. STM32F103定时器输出PWM波控制直流电机

    这个暑假没有回家,在学校准备九月份的电子设计竞赛.今天想给大家分享一下STM32高级定时器输出PWM波驱动直流电机的问题.. 要想用定时器输出的PWM控制直流电机,,首先要理解“通道”的概念..一个定 ...

  6. [STM32F103]PWM输入捕获配置

    l 初始化定时器和通道对应IO的时钟. l 初始化IO口,模式为输入: GPIO_Init(); GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; //PA0 ...

  7. (五)转载:通用定时器PWM输出

    1.     TIMER输出PWM基本概念 脉冲宽度调制(PWM),是英文“Pulse Width Modulation”的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有 ...

  8. 关于STM32 定时器 PWM 实时调节占空比时,预装载特性

    最近在调试项目的时候遇到一个奇怪的现象:在调试状态下,给定时器捕获比较寄存器赋不同值,能产生不同占空比的波形(图1).反映到器件上也有不同的电压显示,但是在设备运行的时候,就不行了(图2). 图1 图 ...

  9. 【iCore4 双核心板_ARM】例程八:定时器PWM实验——呼吸灯

    实验原理: STM32的定时器有PWM功能,iCore4的蓝色LED连接在定时器的输出接口上, 可以通过定时器的PWM输出控制LED的亮度,从而实验呼吸灯的功能. 核心代码: int main(voi ...

随机推荐

  1. 用http请求一直失败,用https开头就ok了

    今天晚上在调试新浪的程序,发现之前一直可以用的接口,有时候就会失败, 各项参数全部仔细核对,都没有发现任何不同之处,真是奇了怪了. 后来一看,post 的部分,之前是用 http:// 开头的,但是此 ...

  2. ros 使用笔记

    1. publishers/subscribers 常用指令    说明rosnode list    查看所有激活的节点rostopic list    查看所有激活的topicrostopic i ...

  3. ubuntu下编译小知识点

    #改变编译器选项 SET(CMAKE_C_COMPILER"g++") #出现如下错误:添加C++11特性 #error: #error This file requires co ...

  4. FixedUpdate()使用

    当MonoBehaviour启用时,其 FixedUpdate在每一帧被调用. 处理Rigidbody时,需要用FixedUpdate代替Update.例如:给刚体加一个作用力时,你必须应用作用力在F ...

  5. position(3rd week blog)

    static:静态的默认属性,上(top)下(bottom)左(left)右(right)等参数不会执行没有影响.relative:此属性会根据上(top)下(bottom)左(left)右(righ ...

  6. H3C_IRF_LACP配置

    IRF典型配置举例(LACP MAD检测方式)1. 组网需求 由于公司人员激增,接入层交换机提供的端口数目已经不能满足 PC 的接入需求.现需要在保护现有投资的基础上扩展端口接入数量,并要求网络易管理 ...

  7. [PYTHON]_ELVE_Python源代码文件编译成可执行文件(支持macOS High Sierra和window 10)

    #0x01 背景 这两天写了一个抽奖的Python脚本,要生成可执行文件,总不能一直在sublime上运行吧,或者运行前先安装Python,所以就查了一下怎么生成可执行文件,本篇包括mac下和win下 ...

  8. Python3字符串的操作

    红色字体代表必须记住 str.capitalize():把字符串的第一个字符大写 str.casefold():转换字符串中所有大写字符为小写,其他语言(非汉语或英文)中把大写转换为小写的情况只能用 ...

  9. Xshell5一打开就提示要使用该程序,请更新至最新版本

    网上有两种方法 方法一:临时 修改系统时间,修改为一年前的时间即可.但是你会发现修改回当前时间后,xshell又打不开了 方法二:替换xshell文件 找到xshell安装位置,如果是快捷方式,可以右 ...

  10. C++中的内部类

    1.内部类的概念 如果一个类定义在另一个类的内部,这个内部类就叫做内部类.注意此时这个内部类是一个独立的类,它不属于外部类,更不能通过外部类的对象去调用内部类.外部类对内部类没有任何优越的访问权限. ...