开发平台
野火STM32F429开发板
使用标准库开发
高级定时器
高级定时器其实就是基本定时器加上输入捕获、输出比较和断路死区,所以有四个初始化函数:
定时器时基初始化函数
TIM_TimeBaseInit(TIM_TypeDef* TIMx, TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct);
输出比较初始化函数
TIM_OC1Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct);
输入捕获初始化函数
TIM_ICInit(TIM_TypeDef* TIMx, TIM_ICInitTypeDef* TIM_ICInitStruct);
死区初始化函数
TIM_BDTRConfig(TIM_TypeDef* TIMx, TIM_BDTRInitTypeDef *TIM_BDTRInitStruct);
编程思路
初始化RGB灯的引脚
驱动DHT11(上一篇)
定时器时基初始
定时器输出比较初始化
配置基本定时器:
void BASE_Tim_Config (void)
{
TIM5_CLK_ENABLE();
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;
TIM_TimeBaseInitStruct.TIM_ClockDivision=TIM_CKD_DIV1;
TIM_TimeBaseInitStruct.TIM_CounterMode=TIM_CounterMode_Up;
TIM_TimeBaseInitStruct.TIM_Period=100-1;(定时器周期,实际上就是ARR重装载值)
TIM_TimeBaseInitStruct.TIM_Prescaler=90-1;
TIM_TimeBaseInitStruct.TIM_RepetitionCounter=0;
TIM_TimeBaseInit(TIMX,&TIM_TimeBaseInitStruct);
TIM_Cmd(TIMX,ENABLE);
}
(1) 基本定时器只有向上计数
(2) 配置ARR的值
(3) 配置分频系数
(4) 基本定时器没有重复计数器
(5)使能定时器
配置高级定时器的输出比较:
void TIM_OC_Config(void)
{
TIM_OCInitTypeDef TIM_OCInitStruct;
TIM_OCInitStruct.TIM_OCMode=TIM_OCMode_PWM1;
TIM_OCInitStruct.TIM_Pulse=0;
TIM_OCInitStruct.TIM_OutputState=TIM_OutputState_Enable;
TIM_OCInitStruct.TIM_OCPolarity=TIM_OCPolarity_Low;
TIM_OC3Init(TIMX,&TIM_OCInitStruct);
TIM_CtrlPWMOutputs(TIMX,ENABLE);
TIM_ARRPreloadConfig(TIMX,ENABLE);
TIM_Cmd(TIMX,ENABLE);
}
(1) 选择PWM模式
(2) 脉宽初始化为0,是决定占空比
(3) 设置极性决定定时器通道有效电平
(4) 比较输出使能
(5) 主动输出使能
(6) 使能ARR重装载
(7)使能定时器
补充:
初始化输出比较函数有四个,每个定时器的通道不一样,所要选择的初始化函数也不一样,要查看手册(这里用的是TIM5,通道为CH3)
定时器周期:T=(ARR+1)*(PSC+1)/TCK
占空比:脉宽/ARR重装载的值
代码如下:
PWM.h
#ifndef __PWM__H
#define __PWM__H
#include "stm32f4xx.h"
#include "DHT11.h"
#define GPIOH_CLK_ENABLE() RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOH,ENABLE)
#define TIM5_CLK_ENABLE() RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5,ENABLE)
#define LED_R_PIN GPIO_Pin_10
#define LED_G_PIN GPIO_Pin_11
#define LED_B_PIN GPIO_Pin_12
#define LED_R_S_PIN GPIO_PinSource10
#define LED_G_S_PIN GPIO_PinSource11
#define LED_B_S_PIN GPIO_PinSource12
#define LED_R_PORT GPIOH
#define LED_G_PORT GPIOH
#define LED_B_PORT GPIOH
#define TIMX TIM5
void GPIO_Config(void);
void BASE_Tim_Config (void);
void TIM_OC_Config(void);
void TIMx_Config(void);
#endif
PWM.c
#include "PWM.h"
void GPIO_Config(void)
{
GPIOH_CLK_ENABLE();
//GPIO_PinAFConfig(LED_R_PORT,LED_R_S_PIN,GPIO_AF_TIM5); GPIO_PinAFConfig(LED_G_PORT,LED_G_PIN,GPIO_AF_TIM5);
GPIO_PinAFConfig(LED_B_PORT,LED_B_S_PIN,GPIO_AF_TIM5);
GPIO_InitTypeDef GPIO_InitStruct;
GPIO_InitStruct.GPIO_Mode=GPIO_Mode_AF;
GPIO_InitStruct.GPIO_OType=GPIO_OType_PP;
GPIO_InitStruct.GPIO_PuPd=GPIO_PuPd_NOPULL;
GPIO_InitStruct.GPIO_Speed=GPIO_Speed_100MHz;
//GPIO_InitStruct.GPIO_Pin=LED_R_PIN;
//GPIO_Init(LED_R_PORT,&GPIO_InitStruct);
//GPIO_InitStruct.GPIO_Pin=LED_G_PIN;
//GPIO_Init(LED_G_PORT,&GPIO_InitStruct);
GPIO_InitStruct.GPIO_Pin=LED_B_PIN;
GPIO_Init(LED_B_PORT,&GPIO_InitStruct);
}
void BASE_Tim_Config (void)
{
TIM5_CLK_ENABLE();
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;
TIM_TimeBaseInitStruct.TIM_ClockDivision=TIM_CKD_DIV1;
TIM_TimeBaseInitStruct.TIM_CounterMode=TIM_CounterMode_Up;
TIM_TimeBaseInitStruct.TIM_Period=100-1;
TIM_TimeBaseInitStruct.TIM_Prescaler=90-1;
TIM_TimeBaseInitStruct.TIM_RepetitionCounter=0;
TIM_TimeBaseInit(TIMX,&TIM_TimeBaseInitStruct);
TIM_Cmd(TIMX,ENABLE);
}
void TIM_OC_Config(void)
{
TIM_OCInitTypeDef TIM_OCInitStruct;
TIM_OCInitStruct.TIM_OCMode=TIM_OCMode_PWM1;
TIM_OCInitStruct.TIM_Pulse=0;
TIM_OCInitStruct.TIM_OutputState=TIM_OutputState_Enable;
TIM_OCInitStruct.TIM_OCPolarity=TIM_OCPolarity_Low;
TIM_OC3Init(TIMX,&TIM_OCInitStruct);
//TIM_OC3PreloadConfig(TIMX,TIM_OCPreload_Enable);
TIM_CtrlPWMOutputs(TIMX,ENABLE);
TIM_ARRPreloadConfig(TIMX,ENABLE);
TIM_Cmd(TIMX,ENABLE);
}
void TIMx_Config(void)
{
BASE_Tim_Config ();
TIM_OC_Config();
}
main.c
#include "stm32f4xx.h"
#include "DHT11.h"
#include "USART.h"
#include "stdio.h"
#include "systick.h"
#include "PWM.h"
int main(void)
{
GPIO_Config();
USART_config();
Systick_Init ();
TIMx_Config();
printf("温度传感器控制led亮灭n");
while(1)
{
TIM_SetCompare3(TIMX,(DHT11_Data()-25)*6);
DELAY_us(1500000);
}
}
上一篇:RCC—使用HSE配置系统时钟
下一篇:硬件I2C驱动MPU6050
推荐阅读最新更新时间:2024-11-16 19:58
推荐帖子
- “全数控、积木式TI方案电源”分工,期待你加入!
- “全数控、积木式TI方案电源”的项目,现在需要大量人员参与开发,对每一部分的电路拓扑、元器件选择及定型作一下实验,需要第一手的数据。希望大家多协助,踊跃参加。现把整个项目分为几个部分,由不同人员分别调试,最后将调试数据(包括中间数据和最终数据)汇总整理。其划分如下:一、PFC部分。指标:输入AC160V~230V,输出DC390V+10V-20V;功率250W;频率100KHz~150KHz电路拓扑:受CP
- dontium DIY/开源硬件专区
- 机器人编程设计与实现
- 《机器人编程设计与实现》由浅入深、由简单到复杂地讲述机器人编程设计与实现方法相关内容,共5篇,23章,主要内容包括:RobotBASICIDE使用方法,常用基本运动控制算法的程序编制,真实机器人的组装及控制,RobotBASIC语言中的常用指令等。以丰富典型的实例及其对应的详细程序,引导读者一步步走进快乐而又富有成就感的机器人编程世界。每章最后附有的思考练习题可以用来检验读者的学习效果,帮助读者复习、巩固和提高所学知识。《机器人编程设计与实现》适合机器人爱好者和准备参加机器人竞赛的读者
- arui1999 下载中心专版
- 555+4017流水灯
- 比较久以前画的,可以改造下做个电子色子玩玩此内容由EEWORLD论坛网友xutong原创,如需转载或用于商业用途需征得作者同意并注明出处555+4017流水灯
- xutong PCB设计
- 请教运行EVC时的一个错误,麻烦大家帮帮忙
- 我在运行一个简单的HELLO程序,该程序无错误,我选的是EMULATOR模式,就是在XP上模拟,编译无错,运行是出现如下错误oneormorefilesfromtheemulatorforwindowsCEinstallationismissing,我电脑上没装platformbuilders,有关系吗是不是我有什么没设置好呢请教运行EVC时的一个错误,麻烦大家帮帮忙解决了ToresolvethisproblemandtorunWindow
- houge 嵌入式系统
- Brightsign 核心板HS124,HS144硬件软件开发. Brightsign播放器
- 群里有哪位大神会Brightsign核心板HS124,HS144硬件软件开发.Brightsign播放器软件开发,或者配套的电路板定制开发。急需急需急需Brightsign核心板HS124,HS144硬件软件开发.Brightsign播放器你是需要核心板的外围开发还是?软件的话也可以开发的可以加我微信13732579405
- qsx123456 测评中心专版
- 求汽车MBD开发资料
- 现在正在做有关4轮独驱的电动车辆,向各位坛友求推荐与汽车相关的MBD开发资料或书籍求汽车MBD开发资料《汽车MBD开发入门、技巧和实战》 可以发下资料的相关链接吗?
- grarrow 嵌入式系统
设计资源 培训 开发板 精华推荐
- LTC3859AHUHF 双路输出、降压/降压/升压同步控制器的典型应用电路,具有改进的突发模式操作
- art扩展板
- MIC5387 超小型三路 150mA 输出 LDO 的典型应用
- LTC1536 的典型应用 - 用于 PCI 应用的精密三路电源监视器
- R1283K001 应用电路,CCD/OLED显示电源的2CH DC/DC转换器
- WIFI手机遥控飞机
- 【训练营】陪伴是最长情的告白
- LTC2636-HMI12 演示板,12 位八路 SPI DAC(4.096V 内部参考模式,复位至中等量程)
- DC1740A-A,演示板采用 LTC3880EUJ 多相降压型 DC/DC 转换器,具有数字电源系统管理,7V VIN 14V,VOUT0:0.5V 至 4.1V @ 80A,PMBU 受控
- LT3663HMS8E-3.3、1.2V 降压转换器的典型应用