#include "sys.h"
#include "beep.h" //tim5 定时器 /*
tim4 定时器 定时10分钟 控制LED1
*/ void my_tim5_init()
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStruct;
NVIC_InitTypeDef NVIC_InitStruct;
//1.打开时钟
RCC_APB1Peri phClockCmd(RCC_APB1Periph_TIM5, ENABLE); //2.TIM_TimeBaseInit
// 配置定时器
/*
void TIM_TimeBaseInit(TIM_TypeDef* TIMx, TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct)
TIM_TypeDef 控制器基地址 TIM1~14 TIM_TimeBaseInitTypeDef
uint16_t TIM_Prescaler; 分频系数
功能:用于分频
范围:数字
寄存器:PSC uint16_t TIM_CounterMode; 计数模式
范围:TIM_CounterMode_Up TIM_CounterMode_Down
寄存器:CR1 4 5 6 三位 uint32_t TIM_Period; 自动重载寄存器
范围:
寄存器:ARR uint16_t TIM_ClockDivision; uint8_t TIM_RepetitionCounter; 2s 42MHz *2 = 84MHz
*/
TIM_TimeBaseStruct.TIM_CounterMode = TIM_CounterMode_Up;
//16位 防止溢出
TIM_TimeBaseStruct.TIM_Period = -;
TIM_TimeBaseStruct.TIM_Prescaler= -;
TIM_TimeBaseInit(TIM5, &TIM_TimeBaseStruct); //打开中断
/*
void TIM_ITConfig(TIM_TypeDef* TIMx, uint16_t TIM_IT, FunctionalState NewState) TIM_IT 中断的标志
TIM_IT_Update 更新中断 NewState 状态
ENABLE DISABLE
*/
TIM_ITConfig(TIM5, TIM_IT_Update, ENABLE); NVIC_InitStruct.NVIC_IRQChannel = TIM5_IRQn;
NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;
NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 0x2;
NVIC_InitStruct.NVIC_IRQChannelSubPriority = 0x2;
NVIC_Init(&NVIC_InitStruct); } extern u32 jfees;
//2S 一次 如何产生10分钟的定时
void TIM5_IRQHandler(void)
{
if(TIM_GetITStatus(TIM5,TIM_IT_Update)==SET) {
// BEEP = !BEEP;
jfees++; TIM_ClearITPendingBit(TIM5,TIM_IT_Update);
}
} //占空比:一个时钟周期高电平所占的比例
//PWM 外设 需要一个特定的波形
//外设需要不同的电压来控制
//BEEP PF8 通过production_data.pdf TIM13_CH1
//PF8 可以 TIM13 的第一个通道 //tim13 控制器
void timer13_init()
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStruct;
GPIO_InitTypeDef GPIO_InitStruct;
TIM_OCInitTypeDef TIM_OCInitStruct; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM13, ENABLE); //PF8 配置成复用模式
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_8;
GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_DOWN;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_100MHz;
GPIO_Init(GPIOF, &GPIO_InitStruct); //把PF8 复用为TIM13功能,就可以把PF8作为 TIM13的一个通道
GPIO_PinAFConfig(GPIOF,GPIO_PinSource8,GPIO_AF_TIM13 ); TIM_TimeBaseStruct.TIM_CounterMode = TIM_CounterMode_Up;
//16位 防止 溢出
TIM_TimeBaseStruct.TIM_Period = -;
TIM_TimeBaseStruct.TIM_Prescaler= -;
TIM_TimeBaseInit(TIM13, &TIM_TimeBaseStruct); //PWM的配置
//CCMR1 OC1M 4~6
//111 PWM2 CNT > CCR1 输出有效电平
//110 PWM1 CNT < CCR1 输出有效电平 //CCER 1位 配置有效电平
/*
void TIM_OCnInit(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct);
使用不同的通道需要调用不同的函数
通道1 TIM_OC1Init uint16_t TIM_OCMode;
功能:配置PWM的模式
范围:TIM_OCMode_PWM1 TIM_OCMode_PWM2 uint16_t TIM_OutputState;
功能:PWM通道使能 开关
范围:TIM_OutputState_Disable TIM_OutputState_Enable
寄存器:CCER 0位 uint16_t TIM_OCPolarity;
功能:有效电平
范围:TIM_OCPolarity_High TIM_OCPolarity_Low
寄存器:CCER 1位 */
TIM_OCInitStruct.TIM_OCMode = TIM_OCMode_PWM1;
TIM_OCInitStruct.TIM_OCPolarity = TIM_OCPolarity_High;
TIM_OCInitStruct.TIM_OutputState = TIM_OutputState_Enable;
TIM_OC1Init(TIM13, &TIM_OCInitStruct); /*
void TIM_OC1PreloadConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPreload);
x 1~4
只有调用该函数 那么才能修改CCR1的值 void TIM_ARRPreloadConfig(TIM_TypeDef* TIMx, FunctionalState NewState);
*/
TIM_OC1PreloadConfig(TIM13, TIM_OCPreload_Enable);
TIM_ARRPreloadConfig(TIM13, ENABLE); TIM_Cmd(TIM13, ENABLE);
} //tim14 控制器
void timer14_init()
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStruct;
GPIO_InitTypeDef GPIO_InitStruct;
TIM_OCInitTypeDef TIM_OCInitStruct; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM14, ENABLE); //PF9 配置成复用模式
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_9;
GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_100MHz; GPIO_Init(GPIOF, &GPIO_InitStruct); //把PF9 复用为TIM14功能,就可以把PF9 作为TIM14的一个通道
GPIO_PinAFConfig(GPIOF,GPIO_PinSource9,GPIO_AF_TIM14 ); TIM_TimeBaseStruct.TIM_CounterMode = TIM_CounterMode_Up;
//16位 防止 溢出
TIM_TimeBaseStruct.TIM_Period = -;
TIM_TimeBaseStruct.TIM_Prescaler= -;
TIM_TimeBaseInit(TIM14, &TIM_TimeBaseStruct); //PWM的配置
//CCMR1 OC1M 4~6
//111 PWM2 CNT > CCR1 输出有效电平
//110 PWM1 CNT < CCR1 输出有效电平 //CCER 1位 有效电平
/*
void TIM_OCnInit(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct);
使用不同的通道需要调用不同的函数
通道1 TIM_OC1Init uint16_t TIM_OCMode;
功能:配置 PWM的模式
范围TIM_OCMode_PWM1 TIM_OCMode_PWM2 uint16_t TIM_OutputState;
功能:PWM通道使能 开关
范围:TIM_OutputState_Disable TIM_OutputState_Enable
寄存器:CCER 0位 uint16_t TIM_OCPolarity;
功能:有效电平
范围:TIM_OCPolarity_High TIM_OCPolarity_Low
寄存器:CCER 1位 */
TIM_OCInitStruct.TIM_OCMode = TIM_OCMode_PWM1;
TIM_OCInitStruct.TIM_OCPolarity = TIM_OCPolarity_High;
TIM_OCInitStruct.TIM_OutputState = TIM_OutputState_Enable;
TIM_OC1Init(TIM14, &TIM_OCInitStruct); /*
void TIM_OC1PreloadConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPreload);
x 1~4
只有调用该函数 那么才能修改CCR1的值 void TIM_ARRPreloadConfig(TIM_TypeDef* TIMx, FunctionalState NewState);
*/
TIM_OC1PreloadConfig(TIM14, TIM_OCPreload_Enable);
TIM_ARRPreloadConfig(TIM14, ENABLE); TIM_Cmd(TIM14, ENABLE);
}
    while()
{ // if(jfees >= time + 5)
// {
// BEEP = !BEEP;
// time = jfees;
// }
if(dir==) val++;
else if(dir==) val--; if(val==) dir=;
else if(val==)dir=; //TIM_SetComparen
//设置 CCR1 比较寄存器的值
TIM_SetCompare1(TIM14, val); delay_ms();
}

PWM的更多相关文章

  1. STM32之PWM君

    PWM..英语好的人估计又知道这三个大写字母代表哪三个英语单词了.小弟不才,就说中文意思好了:脉冲宽度调制,玩过飞思卡尔的人估计对PWM非常的不陌生吧.电机驱动需要PWM,控制舵机的转向需要PWM,总 ...

  2. [nRF51822] 12、基础实验代码解析大全 · 实验19 - PWM

    一.PWM概述: PWM(Pulse Width Modulation):脉冲宽度调制技术,通过对一系列脉冲的宽度进行调制,来等效地获得所需要波形. PWM 的几个基本概念: 1) 占空比:占空比是指 ...

  3. Windows on Device 项目实践 1 - PWM调光灯制作

    在前一篇文章<Wintel物联网平台-Windows IoT新手入门指南>中,我们讲解了Windows on Device硬件准备和软件开发环境的搭建,以及Hello Blinky项目的演 ...

  4. 用Arduino剖析PWM脉宽调制

    PWM(Pulse Width Modulation)简介 PWM,也就是脉冲宽度调制,用于将一段信号编码为脉冲信号,也就是方波信号.多用于在数字电路中驱动负载随时间变化的电子元件,如LED,电机等. ...

  5. Arduino学习经验(一)之解决舵机库和pwm输出冲突

    一.前言 最近在公司学习Arduino uno ,用它实现小车超声波避障功能.实现的功能很简单,就是在小车前方挂一个超声波模块,当碰到障碍物时,会通过舵机进行摆头,判断两边的距离,进行左右转弯.但是碰 ...

  6. stm8s103 PWM

    stm8s103 PWM的设置不难,但是很多人不注意选项字节这个问题,PWM是IO口的第二功能,要用ST Visual Programmer 修改选项字节. 只需要修改AFR0的功能就可以了

  7. 驱动实现led,pwm和中断基础知识

    2015.4.8星期三 晴天 今天老师讲的内容是内核编写led和pwm驱动,实现花样灯和放歌的功能.理解应用和驱动的对接,最后自己实现了在放歌的时候根据歌曲的节奏亮灭一个小灯,应为两个独立的驱动都已经 ...

  8. STM32中的PWM的频率和占空比的设置

    转于http://blog.csdn.net/liming0931/article/details/8491468 下面的这个是stm32的定时器逻辑图,上来有助于理解:   TIM3的ARR寄存器和 ...

  9. PWM波控制舵机总结

    文章转自:http://www.geek-workshop.com/thread-70-1-1.html 一.关于舵机: 舵机(英文叫Servo):它由直流电机.减速齿轮组.传感器和控制电路组成的一套 ...

  10. STM32之PWM波形输出配置总结

    一.   TIMER分类: STM32中一共有11个定时器,其中TIM6.TIM7是基本定时器:TIM2.TIM3.TIM4.TIM5是通用定时器:TIM1和TIM8是高级定时器,以及2个看门狗定时器 ...

随机推荐

  1. iOS UWebView详解

    有时在项目中我们需要嵌入一些web相关的内容,这时你就要用到一个叫UIWebView的东西(UIWebView还可以打开一些文件等,如pdf等),在android和iOS中都有这个东西,使用起来也很方 ...

  2. Linq4j简明介绍

    Linq4j简明介绍 开发JAVA一段时间,面临的一大问题就是集合操作,习惯了LINQ的简洁语法,对JAVA的集合操作实在是无甚好感,只能通过C系的循环实现筛选等操作,由于没有延迟执行特性,内存占用实 ...

  3. Fluent Nhibernate code frist简单配置

    Fluent Nhibernate code frist简单配置   前言 在以前的项目开发过程中使用nhibernate做完orm映射工具需要编写大量的xml映射文件,项目过程中往往会因为一个字段等 ...

  4. MVC+Front Controller

    MVC+Front Controller 在我前面一篇博文<逃脱Asp.Net MVC框架的枷锁,使用Razor视图引擎>发表之后,很多人关心,脱离了之后怎么办?那么这可以说是它的续篇了. ...

  5. 一步一步深入spring(3)--spring的依赖注入方式

    对于spring配置一个bean时,如果需要给该bean提供一些初始化参数,则需要通过依赖注入方式,所谓的依赖注入就是通过spring将bean所需要的一些参数传递到bean实例对象的过程,sprin ...

  6. 微软必应借PK谷歌突围中国搜索市场

    Bing“必应”是微软2009年推出的搜索品牌(http://www.bing.com),它取代的是同门师兄Live Search.进入2013年,在国内及好莱坞的多部大片里面,我都看到了Bing搜索 ...

  7. gettimeofday(struct timeval *tv, struct timezone *tz)函数

    gettimeofday(struct timeval *tv, struct timezone *tz)函数 功能:获取当前精确时间(Unix时间) 其中: timeval为时间 truct tim ...

  8. [Android笔记1]Activity+Layout+Button

    线性布局(LinearLayout)是指view对象在父view中可按水平或垂直方向线性排列. 相对布局(RelativeLayout)是指view对象的排列依赖于各对象之间的相对位置. 下面是展示两 ...

  9. Java7新特性

    ① 新增了switch对字符串的支持,也就是说可以在switch之后直接使用字符串来进行判断,语法基本与Java7之前支持的语法一样. ② 对数值字面量的增强支持,首先是可以在源代码中直接使用二进制数 ...

  10. linux常见笔试题

    一.填空题: 1. 在Linux系统中,以 文件 方式访问设备 . 2. Linux内核引导时,从文件 /etc/fstab 中读取要加载的文件系统. 3. Linux文件系统中每个文件用 i节点 来 ...