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个看门狗定时器 ...
随机推荐
- windows 服务器系统日志分析及安全
一.利用Windows自带的防火墙日志检测入侵 下面是一条防火墙日志记录 2005-01-1300:35:04OPENTCP61.145.129.13364.233.189.104495980 200 ...
- jquery mobile Checkbox动态添加刷新及事件绑定
jquery mobile Checkbox动态添加刷新及事件绑定 在微信项目中,涉及到一个多选功能.数据来自后台数据库,需要动态加载. 项目结构:微信api+web app.使用jquery mob ...
- 【NET】WebBrowser执行脚本以及一般操作代码
public class WebBrowserAssistant { System.Windows.Forms.WebBrowser wb; public WebBrowserAssistant(Sy ...
- unittest 框架
unittest 框架 学习unittest 很好的一个切入点就是从selenium IDE 录制导出脚本.相信不少新手学习selenium 也是从IED 开始的. IDE学习参考: 菜鸟学自动化测试 ...
- Spring Data Rest 支持Put请求
最近在用 Spring Data Rest 写WebApi 遇到Put请求后报415 Mieda Type 的错误,GG了下 找到个解决办法,下面是针对Put请求的过滤. 1 public class ...
- google 浏览器使用技巧(一)
google 浏览器使用技巧(一) google 浏览器使用技巧 1. 调整地址栏的宽度 当安装多个插件的时候,默认插件会隐藏,所以使用起来很麻烦.在chrome 浏览器的配置中没有找到相应的配置.一 ...
- Cocos2d-x--Box2D使用GLES-Render.h渲染查看刚体
分为两部分:文件拷贝和代码实现 1.文件拷贝: 在TestCpp下找到GLES-Render.h和GLES-Render.cpp两个文件 复制到G:\cocos2d-2.1rc0-x-2.1.3\co ...
- Java synchronized 详解
Java synchronized 详解 Java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码. 1.当两个并发线程访问同一个对象object ...
- oracle报表开发方案
PL/SQL也是一门语言,后台开发经常会用到. 目前做要到一个功能,关于"报表任务调度",说明白了就是做几张报表,每天统计一次新数据,用于在PC页面上显示,我苦思冥想了几天,总结出 ...
- java基础知识拾遗(四)
1.Runnable对象 启动线程:(new Thread(new MyRunnable()).start() 2.jsp中<%@ page language="java" ...