STM32F407 关于TIM1输出PWM

2018-06-10 12:35:07编辑:什么鱼 关键字:STM32F407  TIM1  输出PWM

通过 CCxE、 CCxNE、 MOE、 OSSI 和 OSSR 位(TIMx_CCER 和TIMx_BDTR 寄存器)的组合使能 OCx 输出。实际上,需要将TIMx_BDTR 寄存器的 MOE和AOE位置1。这就是和普通配置PWM输出的不同点。代码如下↓

/*******************************************************************
* 功  能:   
* 作  者:   Jahol Fan  
* 参  数:  
* 返回值:   
* 其  他:   PA9 PWM输出控制转速,PA9的复用功能1是TIM1_CH2,
             TIM1:168MHZ
*******************************************************************/
void TIM1_PwmInit(u16 psc,u16 arr)
{
    GPIO_Init(GPIOA,PIN9,GPIO_MODE_AF,GPIO_OTYPE_PP,GPIO_SPEED_100M,GPIO_PUPD_PU);
    GPIO_AFSet(GPIOA,9,1);  //PA9,AF1 
    RCC->APB2ENR |= 1<<0;//使能定时器1的时钟
    TIM1->CR1 |= 1<<7;//使用 TIM1_ARR 寄存器的影子寄存器
    TIM1->CR1 &=~(1<<3);//选择定时模式:循环定时
    TIM1->CR1 &=~(1<<2);//选择更新事件源:计数器上溢或者UG位置一都可生成更新事件
    TIM1->CR1 &=~(1<<1);//使能更新事件生成
    TIM1->PSC = psc-1;//设置预分频值
    TIM1->ARR = arr-1;//设置ARR自动重装载值(上限值)。
    TIM1->CCMR1 &=~(7<<12); //清零
    TIM1->CCMR1 |= 6<<12;//设置为PWM模式1
    TIM1->CCMR1 |=(1<<11);//使能TIM1_CCR2 的影子寄存器
    TIM1->CCMR1 &=~(3<<8);//定时器通道配置为输出。
    TIM1->CCER |=(1<<5);//配置定时器通道的有效电平为低电平
    TIM1->CCR2  = arr/2;//设置CCR2的值。
    TIM1->BDTR |= 1<<15;//主输出使能
    TIM1->BDTR |= 1<<14;//MOE 可由软件置 1,也可在发生下一更新事件时自动置 1(如果断路输入无效)
    //TIM1->BDTR |= 1<<10;
    //TIM1->BDTR |= 1<<11;
    TIM1->EGR |= 1<<0;//UG位置1,主动生成更新事件,目的:初始化寄存器包括更新影子寄存器。
    TIM1->SR = 0;//将状态标志位清零
    TIM1->CCER|=1<<4;//开启PWM输出
    TIM1->CR1 |= 1<<0;//使能计数器
}

关键字:STM32F407  TIM1  输出PWM

来源: eefocus 引用地址:http://www.eeworld.com.cn/mcu/article_2018061039734.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:基于stm32串口环形缓冲队列处理机制—入门级(单字节)
下一篇:STM32局部变量的数组最大能到多少?

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

STM32F407学习笔记——GPIO_按键控制LED亮灭

#include <stm32f4xx.h>#include "stm32f4xx_conf.h"#include "delay.h" GPIO_TypeDef* io_led=GPIOC;//定义一个指向结构体GPIO_TypeDef的io_led  const u16 pin_led=GPIO_Pin_1;//引脚GPIO_TypeDef* io_key=GPIOC;const u16 pin_key=GPIO_Pin_0; void Led_Init(){ GPIO_InitTypeDef GPIO_init_l;//用于初始化的结构体
发表于 2018-07-21 11:07:23

【stm32f407】外部中断实现按键中断方式

一.外部中断STM32F4的每个IO都可以作为外部中断的中断输入口,这点也是STM32F4的强大之处。STM32F407的中断控制器支持22个外部中断/事件请求。每个中断设有状态位,每个中断/事件都有独立的触发和屏蔽设置。STM32F407的22个外部中断为:EXTI线0~15:对应外部IO口的输入中断。EXTI线16:连接到PVD输出。EXTI线17:连接到RTC闹钟事件。EXTI线18:连接到USB OTG FS唤醒事件。EXTI线19:连接到以太网唤醒事件。EXTI线20:连接到USB OTG HS(在FS中配置)唤醒事件。EXTI线21:连接到RTC入侵和时间戳事件。EXTI线22:连接到RTC唤醒事件。从上面可以看出
发表于 2018-07-20 21:14:56

STM32F103的SysTick使用方法

写下来,方便以后用。void SysTick_Configuration(void){  /* Setup SysTick Timer for 10 msec interrupts  */  if (SysTick_Config(SystemCoreClock / 100))                //SysTick配置函数  {     /* Capture error */ 
发表于 2018-07-20 21:06:43

STM32F407ZGT6使用Systic定时器实现延时

;  18-June-2018  * @brief   这个头文件包含了STM32F407ZGT6开发板的延时相关的函数.   ******************************************************************************  * @attention  * 官方库文件里有参考代码  * 为保证延时系统的精准,要求系统主频率越高越好  * 为保证延时系统的完整支持,系统主频率至少8MHz  * 使用CM4系统定时器,中断优先级最低  *  * @更新
发表于 2018-07-20 20:21:48

STM32F072在8M下的软件延时

    使用定时器产生的延时精度确实是高,但是也相对麻烦,软件延时虽然精度不高,但也相对简单,使用方便,在精度要求不高的情况的可以使用。                使用的是STM32F032 Nucleo开发板,为内部8M晶振。    以下延时函数用示波器测得,精度小于1us。//STM32F072RB Nucleo//在内部晶振为8M的情况下 void delay3us()//3us{ int i; for(i=0;i<1;i++);} void delay10us()//10us
发表于 2018-07-20 20:21:10

Stm32f01x_SysTick定时器_延时功能

;stm32f10x.h>#include <sys.h>//配置systick 寄存器void SysTick_Configuration(void) { SysTick->VAL = 0;  SysTick->LOAD = (72000000/8000000)*1000;//´ú±íÿ¸ömsÐèÒªµÄ9000¸ösystickʱÖÓÊý SysTick->CTRL |= 0x06;  } //中断处理函数void SysTick_Handler(void) //???? { extern unsigned
发表于 2018-07-20 20:01:49

小广播

何立民专栏

单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2018 EEWORLD.com.cn, Inc. All rights reserved