PWM
#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的更多相关文章
- STM32之PWM君
PWM..英语好的人估计又知道这三个大写字母代表哪三个英语单词了.小弟不才,就说中文意思好了:脉冲宽度调制,玩过飞思卡尔的人估计对PWM非常的不陌生吧.电机驱动需要PWM,控制舵机的转向需要PWM,总 ...
- [nRF51822] 12、基础实验代码解析大全 · 实验19 - PWM
一.PWM概述: PWM(Pulse Width Modulation):脉冲宽度调制技术,通过对一系列脉冲的宽度进行调制,来等效地获得所需要波形. PWM 的几个基本概念: 1) 占空比:占空比是指 ...
- Windows on Device 项目实践 1 - PWM调光灯制作
在前一篇文章<Wintel物联网平台-Windows IoT新手入门指南>中,我们讲解了Windows on Device硬件准备和软件开发环境的搭建,以及Hello Blinky项目的演 ...
- 用Arduino剖析PWM脉宽调制
PWM(Pulse Width Modulation)简介 PWM,也就是脉冲宽度调制,用于将一段信号编码为脉冲信号,也就是方波信号.多用于在数字电路中驱动负载随时间变化的电子元件,如LED,电机等. ...
- Arduino学习经验(一)之解决舵机库和pwm输出冲突
一.前言 最近在公司学习Arduino uno ,用它实现小车超声波避障功能.实现的功能很简单,就是在小车前方挂一个超声波模块,当碰到障碍物时,会通过舵机进行摆头,判断两边的距离,进行左右转弯.但是碰 ...
- stm8s103 PWM
stm8s103 PWM的设置不难,但是很多人不注意选项字节这个问题,PWM是IO口的第二功能,要用ST Visual Programmer 修改选项字节. 只需要修改AFR0的功能就可以了
- 驱动实现led,pwm和中断基础知识
2015.4.8星期三 晴天 今天老师讲的内容是内核编写led和pwm驱动,实现花样灯和放歌的功能.理解应用和驱动的对接,最后自己实现了在放歌的时候根据歌曲的节奏亮灭一个小灯,应为两个独立的驱动都已经 ...
- STM32中的PWM的频率和占空比的设置
转于http://blog.csdn.net/liming0931/article/details/8491468 下面的这个是stm32的定时器逻辑图,上来有助于理解: TIM3的ARR寄存器和 ...
- PWM波控制舵机总结
文章转自:http://www.geek-workshop.com/thread-70-1-1.html 一.关于舵机: 舵机(英文叫Servo):它由直流电机.减速齿轮组.传感器和控制电路组成的一套 ...
- STM32之PWM波形输出配置总结
一. TIMER分类: STM32中一共有11个定时器,其中TIM6.TIM7是基本定时器:TIM2.TIM3.TIM4.TIM5是通用定时器:TIM1和TIM8是高级定时器,以及2个看门狗定时器 ...
随机推荐
- PHP实现一个简单url路由功能
如果一个页面的内容呈现,需要根据url上传递的参数来进行渲染.很多时候可能是这样子写:xxx.com/xx?c=x&m=x& t=..,而我们看到的url往往是这样子的(以新浪微游戏的 ...
- 致青春——IT之路
我的IT青春献给了笔试.面试.人事. 笔试 如果去问一个学生最怕的是什么,或许是考试.参加过高考的都知道,高三过的是什么日子,三天一大考,一天一小考. 当时没觉得什么,因为已经麻木了. 走入职场依然要 ...
- SSH整合之_架构的历史序列图
只用jsp最原始的架构 jsp+DB的2层架构 jsp+DB+_Entity的2层架构 jsp+DB+_Entity3_+Service的三层架构 jsp+DB+_Entity3_+Service_H ...
- WP自定义字体
IOS7的数字真的很好看啊,于是想放在自己的应用中.在网上找了下,发现这个字体叫HelveticaNeueLTPro-UltLt,于是随便在某个字体网站下了这个字体.拖到项目里换字体,但是,悲剧开始了 ...
- d指针在Qt上的应用及实现
Qt为了使其动态库最大程度上实现二进制兼容,引入了d指针的概念.那么为什么d指针能实现二进制兼容呢?为了回答这个问题,首先弄清楚什么是二进制兼容?所谓二进制兼容动态库,指的是一个在老版本库下运行的程序 ...
- HTML5 拖放及排序的简单实现
HTML5 拖放及排序的简单实现 之前写过个类似的例子,看这里. 但想再深入一步,希望能通过拖放,来交换二个元素的位置.最好有应用到手机平台上. 作了个简单的例子,在手机上测试的时候不成功..查了好多 ...
- Nhibernate1
Nhibernate随手记(1) 学习Nhibernate的萌芽 今早有群里有人问Nhibernate的问题,没学过,刚好来了兴趣,无意很快在园子里下载到了一本Nhibernate3.0的电子书,内容 ...
- Enlightenment笔记
Enlightenment是一个文件管理器(曾经), 随着发展, 现在的目标已经是创建一个跟xfce, kde等一样的桌面环境. 作为一个用的人不多, 兼容性一般般, bug还不少的桌面环境, E的最 ...
- WPF界面设计
WPF仿360卫士9.0界面设计 Chrome插件——一键保存网页为PDF1.0 http://www.cnblogs.com/bdstjk/p/3163723.html 仿照网上的一个代码写的, ...
- poj 2378 树型dp
和poj1655那道求树的重心基本上一样的,代码也没多大改动. 详情请见 #include<cstdio> #include<algorithm> #include<cs ...