datasheet

STM32F407 关于TIM1输出PWM

2018-06-10来源: eefocus 关键字: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

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

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

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

推荐阅读

STM32F10x系列UART中断异常调试经历

硬件环境: STM32F105RCT6软件环境:FreeRTOSV8问题描述:采用中断方式接收数据,然后将收到的一帧数据放入消息队列,然后有专门的一个任务用来从消息队列中取数据并处理。jlink调试以及烧录运行都是可以的,但是当随着通信频率的增加以及运行时间的加长,系统会出现“死机”(即,不停的进入中断而致使主程序流程无法执行);问题分析:根据现象猜测   1、是否为堆栈溢出了呢?  2、是否频率太高了呢? 3、是否标志位忘记没有清除呢?然后逐项进行测试:1、查htm文件确定大概需要的堆栈,发现确实存在溢出的可能:而我分配的为:然后更改为0x00000800,烧录测试,还是存在同样问题,然后在调试串口
发表于 2018-12-03
STM32F10x系列UART中断异常调试经历

STM32F103做从机SPI通信SPI3中断异常

在做AM335D板子与STM32F103使用SPI通信时,需要用到STM32的从机模式,所以特别对于ST的从机模式进行了研究,由于硬件上使用的是STM32F103的SPI3,所以过程中遇到了一点麻烦,这里记录一下过程,以备查阅:使用SPI3通信时,从机时钟产生不了中断,经过查阅资料,是因为spi3的nss口与JTAG有共用引脚,所以配置错误会导致SPI3无法使用。需要注意以下两点就可以了:1.开启GPIO时钟的同时,开启AFIO时钟,如下:RCC_APB2PeriphClockCmd(    RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO, ENABLE ); 
发表于 2018-12-03

STM32F030使用RTC周期性唤醒STOP模式

首先,F030与F072的RTC唤醒功能是不一样的,在相关定义文件stm32f0xx_exti.h中有如下定义:#define EXTI_Line17      ((uint32_t)0x00020000)  /*!< Internal interrupt line 17                                            
发表于 2018-12-03

STM32F429之中断服务函数名

以下内容在startup_stm32f429_439xx.s文件内;******************** (C) COPYRIGHT 2015 STMicroelectronics ********************;* File Name          : startup_stm32f429_439xx.s;* Author             : MCD Application Team;* @version           
发表于 2018-12-03

STM32F407学习笔记——Systick中断

#include <stm32f4xx.h> GPIO_TypeDef* io_led=GPIOC;const u16 pin_led=GPIO_Pin_1; static __IO uint32_t TimingDelay; void Led_Init(){ GPIO_InitTypeDef GPIO_init_l; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE); GPIO_init_l.GPIO_Pin=GPIO_Pin_1; GPIO_init_l.GPIO_Mode=GPIO_Mode_OUT
发表于 2018-12-01

stm32f103 rcc时钟寄存器设置和usart寄存器

这几天把rcc时钟搞明白了。其实主要是流程 看错了计算器1到31位,结果是错位了,一直找不到原因。原来mac 自带编程计算器也是从0到31stm32中文手册讲得比较明白自己摸索下设置了串口发送数据自己用的是蓝色药丸 (blue pill )淘宝10块不到一小块 stm32f103c8t6led灯是portc 13脚本程序全部是用寄存器方式设置#include "stm32f10x_lib.h"#include#include "sys.h"//测试c++ class LED{public:  LED();  ~LED();  }; 
发表于 2018-11-30
stm32f103 rcc时钟寄存器设置和usart寄存器

小广播

何立民专栏

单片机及嵌入式宝典

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

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2018 EEWORLD.com.cn, Inc. All rights reserved
pt type="text/javascript" src="//v3.jiathis.com/code/jia.js?uid=2113614" charset="utf-8">