#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学习之路五(代码实现UITableView)

    先展示一下运行结果: 代码实现: 1.先创建一个空项目: 2.创建一个Controller:(TableViewController) 在AppDelegate.h中声明属性: //  AppDele ...

  2. ”Metro UI之磁贴(二)

    也来“玩”Metro UI之磁贴(二) 继昨天的“也来“玩”Metro UI之磁贴(一)”之后,还不过瘾,今天继续“玩”吧——今天把单选的功能加进来,还有磁贴的内容,还加了发光效果(CSS3,IE9+ ...

  3. C++内存中的封装、继承、多态(上)

    C++内存中的封装.继承.多态(上) 继我的上一篇文章:浅谈学习C++时用到的[封装继承多态]三个概念 此篇我们从C++对象内存布局和构造过程来具体分析C++中的封装.继承.多态. 一.封装模型的内存 ...

  4. .net调用Outlook 批量发送邮件,可指定Outlook中的账号来发送邮件

    .net调用Outlook 批量发送邮件,可指定Outlook中的账号来发送邮件 源码可以在我的资源列表中下载: MPOEMail http://download.csdn.net/my VS2012 ...

  5. jQuery幻灯片插件Skippr

    Skippr是一款带左右箭头,索引按钮,滑动切换效果并且轻量.快速的幻灯片 设置 引入jquery.skippr.css.jquery.js.jquery.skippr.js 注意jQuery必须在j ...

  6. PHP:执行模型和内存模型

    PHP:执行模型和内存模型 背景 对于任何一种语言,了解其执行模型和内存模型都是有意义的,本文中的内容不见得正确,请多批评. 执行模型 每个请求都是一个独立的PHP进程,两个请求之间会完全隔离,会话和 ...

  7. SQL删除重复数据,保留一条

    例如: id           name         value 1               a                 pp 2               a           ...

  8. Python学习入门基础教程(learning Python)--5.7 Python文件数据记录存储与处理

    本节主要讨论Python下如何通过文件操作实现对数据记录集的存储与处理的操作方法. 在Python里和其他高级语言一样可以通过文件读写将一些记录集写入文件或者通过文件读操作从文件里读取一条或多条和数据 ...

  9. sphinx2.8.8的配置文件

    # # Sphinx configuration file sample # # WARNING! While this sample file mentions all available opti ...

  10. SVN不同图标的不同意义

    黄色感叹号(有冲突):--这是有冲突了,冲突就是说你对某个文件进行了修改,别人也对这个文件进行了修改,别人抢在你提交之前先提交了,这时你再提交就会被提示发生冲突,而不允许你提交,防止你的提交覆盖了别人 ...