小白跟做江科大32单片机之定时器输出比较

原理部分

背景

GPIO口是数字输出端口,只能输出1和0。但是通过PWM,可以使其控制LED呼吸灯亮灭的程度

1.通过CNT和CCR进行比较,可以输出一定频率和占空比的PWM波形

2.通用定时器有4个CCR,可同时输出4路PWM波形,但只有一个CNT

输出比较部分,通过比较CNT和CCR的值,CNT计数自增,CCR是我们给定的一个值,这样就可以输出一定占空比的输出波形

3.PWM波形

惯性系统就是断电之后不会立刻停止运行的器件,eg:LED

4.如何输出PWM波形

外部比较->输出oc1ref->极性选择->CCIP写0代表不翻转,写1代表翻转->输出使能->OC1->CPIO

本实验只用PWM模式1

5.

时钟源选择->时基单元->输出比较->CNT、CCR比较

我们可以设定CCR为固定值

6.

7.STM32外设

推挽输出示意图:

上管导通,输出高电压,下关导通,输出低电压。

H桥电路,两个推挽电路组成,这是电流从右边流向左边


代码部分

思路

  1. 开启PWM时钟,TIM外设,GPIO外设
  2. 时基单元配置
  3. 配置输出比较单元:CCR值,比较模式,极性选择,输出使能
  4. GPIO配置:复用推挽输出GPIO口
  5. 运行控制配置:计数器

实现

实验一

1.复制上一小节的定时器项目,改名为自己想取的名字,在hardware下新建PWM._LED.c和PWM._LED.h文件,并按照江科大老师所给的电路图进行连接

2.PWM._LED.c

#include "stm32f10x.h"                  // Device header

/**
  * 函    数:定时初始化
  * 参    数:无
  * 返 回 值:无
  * 注意事项:此函数配置为外部时钟,定时器相当于计数器
  */
void PWM_Init(void)
{
    /*开启时钟*/
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);            //开启TIM2的时钟
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);            //开启GPIOA的时钟
    
    /*GPIO初始化P0口*/
    GPIO_InitTypeDef GPIO_InitStructure;
    GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;;
    GPIO_InitStructure.GPIO_Pin= GPIO_Pin_0;
    GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
    GPIO_Init(GPIOA, &GPIO_InitStructure);    
    
    /*配置时钟源*/
    TIM_InternalClockConfig(TIM2);        //选择TIM2为内部时钟,若不调用此函数,TIM默认也为内部时钟
    
    /*时基单元初始化*/
    TIM_TimeBaseInitTypeDef TIM_TimeBaseIn

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值