历史上的今天
今天是:2024年08月29日(星期四)
2019年08月29日 | STM32F429 >> 14. TIM_(二)_高级定时器 (Code)
2019-08-29 来源:eefocus
基本定时器输出PWM 信号
在该例程中,我将PWM 信号输出管脚连接至LED 管脚,以此观察PWM 信号输出是否正常。
注意:若要对LED 管脚进行初始化配置,对应LED 不能设置为熄灭,否则PWM 信号不能点亮LED
bsp_tim_advanced.h
/**
******************************************************************************
* @file bsp_tim_advanced.h
* @author Waao
* @version V1.0.0
* @date 30-Jan-2019
* @brief This file contains some board support package's definitions for the advanced TIM.
*
******************************************************************************
* @attention
*
* None
*
******************************************************************************
*/
#ifndef __BSP_TIM_ADVANCED_H_
#define __BSP_TIM_ADVANCED_H_
#include
extern u16 Channel_Pulse;
//============== TIM ================
#define Specified_TIM_ TIM8
#define TIM_CLK RCC_APB2Periph_TIM8
//============== GPIO ================
#define TIM_OCPWM_GPIO_PORT GPIOC
#define TIM_OCPWM_GPIO_PIN GPIO_Pin_6
#define TIM_OCPWM_GPIO_CLK RCC_AHB1Periph_GPIOC
#define TIM_OCPWM_GPIO_PINSOURCE GPIO_PinSource6
#define TIM_OCPWM_GPIO_AF GPIO_AF_TIM8
#define TIM_OCNPWM_GPIO_PORT GPIOA
#define TIM_OCNPWM_GPIO_PIN GPIO_Pin_5
#define TIM_OCNPWM_GPIO_CLK RCC_AHB1Periph_GPIOA
#define TIM_OCNPWM_GPIO_PINSOURCE GPIO_PinSource5
#define TIM_OCNPWM_GPIO_AF GPIO_AF_TIM8
#define TIM_BKIN_GPIO_PORT GPIOA
#define TIM_BKIN_GPIO_PIN GPIO_Pin_6
#define TIM_BKIN_GPIO_CLK RCC_AHB1Periph_GPIOA
#define TIM_BKIN_GPIO_PINSOURCE GPIO_PinSource6
#define TIM_BKIN_GPIO_AF GPIO_AF_TIM8
void TIM_GPIO_Config(void);
void TIM_Config(void);
#endif
bsp_tim_advanced.c
/**
******************************************************************************
* @file bsp_tim_advanced.c
* @author Waao
* @version V1.0.0
* @date 30-Jan-2019
* @brief This file contains some board support package's functions for the TIM.
*
******************************************************************************
* @attention
*
* None
*
******************************************************************************
*/
#include
u16 Channel_Pulse = 130;
/**
* @brief Initialize the gpio.
* @param None
* @retval None
*/
void TIM_GPIO_Config(void)
{
GPIO_InitTypeDef OCPWM_GPIO_InitStructure;
GPIO_InitTypeDef OCNPWM_GPIO_InitStructure;
GPIO_InitTypeDef BKIN_GPIO_InitStructure;
//============= OCPWM ===============
RCC_AHB1PeriphClockCmd(TIM_OCPWM_GPIO_CLK, ENABLE);
OCPWM_GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
OCPWM_GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
OCPWM_GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
OCPWM_GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
OCPWM_GPIO_InitStructure.GPIO_Pin = TIM_OCPWM_GPIO_PIN;
GPIO_PinAFConfig(TIM_OCPWM_GPIO_PORT, TIM_OCPWM_GPIO_PINSOURCE, TIM_OCPWM_GPIO_AF);
GPIO_Init(TIM_OCPWM_GPIO_PORT, &OCPWM_GPIO_InitStructure);
//============= OCNPWM ===============
RCC_AHB1PeriphClockCmd(TIM_OCNPWM_GPIO_CLK, ENABLE);
OCNPWM_GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
OCNPWM_GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
OCNPWM_GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
OCNPWM_GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
OCNPWM_GPIO_InitStructure.GPIO_Pin = TIM_OCNPWM_GPIO_PIN;
GPIO_PinAFConfig(TIM_OCNPWM_GPIO_PORT, TIM_OCNPWM_GPIO_PINSOURCE, TIM_OCNPWM_GPIO_AF);
GPIO_Init(TIM_OCNPWM_GPIO_PORT, &OCNPWM_GPIO_InitStructure);
//============= BKIN ===============
RCC_AHB1PeriphClockCmd(TIM_BKIN_GPIO_CLK, ENABLE);
BKIN_GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
BKIN_GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
BKIN_GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
BKIN_GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
BKIN_GPIO_InitStructure.GPIO_Pin = TIM_BKIN_GPIO_PIN;
GPIO_PinAFConfig(TIM_BKIN_GPIO_PORT, TIM_BKIN_GPIO_PINSOURCE, TIM_BKIN_GPIO_AF);
GPIO_Init(TIM_BKIN_GPIO_PORT, &BKIN_GPIO_InitStructure);
}
/**
* @brief Initialize the advanced TIM.
* @param None
* @retval None
*/
void TIM_Config(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBase_InitStructure;
TIM_OCInitTypeDef TIM_OC_InitStructure;
TIM_BDTRInitTypeDef TIM_BDTR_InitStructure;
RCC_APB2PeriphClockCmd(TIM_CLK, ENABLE);
//=================== TIM_TimeBase_InitStructure =================
TIM_TimeBase_InitStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBase_InitStructure.TIM_Prescaler = 1800-1;
TIM_TimeBase_InitStructure.TIM_Period = 1024-1;
TIM_TimeBase_InitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
TIM_TimeBase_InitStructure.TIM_RepetitionCounter = 0;
TIM_TimeBaseInit(Specified_TIM_, &TIM_TimeBase_InitStructure);
//====================== TIM_OC_InitStructure ====================
TIM_OC_InitStructure.TIM_OCMode = TIM_OCMode_PWM1;
TIM_OC_InitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OC_InitStructure.TIM_OutputNState = TIM_OutputNState_Enable;
TIM_OC_InitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
TIM_OC_InitStructure.TIM_OCNPolarity = TIM_OCNPolarity_High;
TIM_OC_InitStructure.TIM_OCIdleState = TIM_OCIdleState_Set;
TIM_OC_InitStructure.TIM_OCNIdleState = TIM_OCNIdleState_Reset;
TIM_OC_InitStructure.TIM_Pulse = Channel_Pulse;
TIM_OC1Init(Specified_TIM_, &TIM_OC_InitStructure);
TIM_OC1PreloadConfig(Specified_TIM_, TIM_OCPreload_Enable);
//===================== TIM_BDTR_InitStructure ===================
TIM_BDTR_InitStructure.TIM_OSSRState = TIM_OSSRState_Enable;
TIM_BDTR_InitStructure.TIM_OSSIState = TIM_OSSIState_Enable;
TIM_BDTR_InitStructure.TIM_LOCKLevel = TIM_LOCKLevel_1;
TIM_BDTR_InitStructure.TIM_AutomaticOutput = TIM_AutomaticOutput_Enable;
TIM_BDTR_InitStructure.TIM_Break = TIM_Break_Enable;
TIM_BDTR_InitStructure.TIM_BreakPolarity = TIM_BreakPolarity_Low;
TIM_BDTR_InitStructure.TIM_DeadTime = 11;
TIM_BDTRConfig(Specified_TIM_, &TIM_BDTR_InitStructure);
TIM_Cmd(Specified_TIM_, ENABLE);
TIM_CtrlPWMOutputs(Specified_TIM_, ENABLE);
}
main.c
#include
#include
#include
int main(void)
{
u32 TEMP = 10;
TIM_GPIO_Config();
TIM_Config();
SysTick_Init();
while(1)
{
Delay(1200);
Channel_Pulse -= TEMP;
TIM_SetCompare1(Specified_TIM_, Channel_Pulse);
if(Channel_Pulse <= 0)
{
while(Channel_Pulse <= 1200)
{
Delay(1200);
Channel_Pulse += TEMP;
TIM_SetCompare1(Specified_TIM_, Channel_Pulse);
}
}
}
}
通用计时器输出PWM 信号(按键可控PWM 占空比)
在该例程中,我将PWM 信号输出管脚连接至LED 管脚,以此观察PWM 信号输出是否正常。
注意:若要对LED 管脚进行初始化配置,对应LED 不能设置为熄灭,否则PWM 信号不能点亮LED
tim.h
/**
******************************************************************************
* @file tim.h
* @author Waao
* @version V1.0.0
* @date 1-Feb-2019
* @brief This file contains some board support package's definition for the TIM.
*
******************************************************************************
* @attention
*
* None
*
******************************************************************************
*/
#ifndef __TIM_H_
#define __TIM_H_
#include
extern __IO u32 Channel_Pulse;
//============= General_TIM =============
#define Specified_General_TIM_ TIM2
#define General_TIM_CLK RCC_APB1Periph_TIM2
//================ GPIO =================
#define General_TIM_OCPWM_GPIO_PORT GPIOA
#define General_TIM_OCPWM_GPIO_PIN GPIO_Pin_5
#define General_TIM_OCPWM_GPIO_PINSOURCE GPIO_PinSource5
#define General_TIM_OCPWM_GPIO_AF GPIO_AF_TIM2
#define General_TIM_OCPWM_GPIO_CLK RCC_AHB1Periph_GPIOA
void All_TIM_Config(void);
#endif
tim.c
/**
******************************************************************************
* @file tim.c
* @author Waao
* @version V1.0.0
* @date 1-Feb-2019
* @brief This file contains some board support package's functions for the TIM.
*
******************************************************************************
* @attention
*
* None
*
******************************************************************************
*/
#include "tim.h"
__IO u32 Channel_Pulse = 1300;
/**
* @brief Initialize the General_TIM GPIO.
* @param None
* @retval None
*/
void General_GPIO_Config(void)
{
GPIO_InitTypeDef GENERAL_GPIO_InitStructure;
RCC_AHB1PeriphClockCmd(General_TIM_OCPWM_GPIO_CLK, ENABLE);
GENERAL_GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GENERAL_GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GENERAL_GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GENERAL_GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GENERAL_GPIO_InitStructure.GPIO_Pin = General_TIM_OCPWM_GPIO_PIN;
GPIO_PinAFConfig(General_TIM_OCPWM_GPIO_PORT, General_TIM_OCPWM_GPIO_PINSOURCE, General_TIM_OCPWM_GPIO_AF);
GPIO_Init(General_TIM_OCPWM_GPIO_PORT, &GENERAL_GPIO_InitStructure);
}
/**
* @brief Initialize the General_TIM.
* @param None
* @retval None
*/
void General_TIM_Config(void)
{
TIM_TimeBaseInitTypeDef General_TIM_TimeBase_InitStructure;
TIM_OCInitTypeDef General_TIM_OC_InitStructure;
RCC_APB1PeriphClockCmd(General_TIM_CLK, ENABLE);
//=========== General_TIM_TimeBase_InitStructure ===========
General_TIM_TimeBase_InitStructure.TIM_CounterMode = TIM_CounterMode_Up;
General_TIM_TimeBase_InitStructure.TIM_Prescaler = 1800-1;
General_TIM_TimeBase_InitStructure.TIM_Period = 1024-1;
General_TIM_TimeBase_InitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
TIM_TimeBaseInit(Specified_General_TIM_, &General_TIM_TimeBase_InitStructure);
//============== General_TIM_OC_InitStructure ==============
史海拾趣
|
1) 对malloc分配的内存进行memset清零操作。(可以使用calloc分配一块全零的内存) 2) 对一些栈上分配的struct或数组进行初始化。(最好也是清零) 不过话又说回来了,初始化也会造成系统运行时间有一定的开销,所以,也不要对所有的变量做初 ...… 查看全部问答> |
|
使用说明资料全 FS-PAM2410E嵌入式 ARM 计算机主板的配置说明 http://bbs.gongso.com/attachment.aspx?attachmentid=2892 FS-PAM2410EARM开发板在Windows下核心板中的软件烧录方法 http://bbs.gongso.com/attachment.aspx?attachmentid=2891 & ...… 查看全部问答> |
|
跪求eeworld的朋友们给我一个步进电机的嵌入式驱动程序,或者给我一个可以学习和参考的内容.我的一个设计是关于步进电机的嵌入式驱动程序的.请赐教. 电子邮件:blueink_200451@hotmail.com qq:279697361 请写:步进电机 或 嵌入式驱动程序 和任何和 ...… 查看全部问答> |
|
Mini2440的板子,WINCE 5.0,板子上有6个测试按键,并且BSP里自带了驱动。现在的问题是,板子上的6个按键只有三个是有效的,而另外三个按键没有任何反应。这几个无效按键所对应的IRQ分别为IRQ_EINT13,IRQ_EINT14,IRQ_EINT15。我搜了一下,似乎板 ...… 查看全部问答> |
|
我用的是PC104前几天做了个串口的调试程序,可以和WIN32的COM调试软件通信,可是我又过了几天,在使的时候就不能通信了,104上插了几个卡公司做的卡。和这个有关系吗?还有其他的可能性吗?我的代码是从网上下的ARM的串口程序,我在EVC里编译到X86 ...… 查看全部问答> |
|
各位大虾: 现在小弟急用关于单片机的英文资料,在网上找了半天没找到! 希望大家帮帮忙啊!能有对应的中文翻译更好!英文大概5000字符的,多了当然更好! 谢谢了!! 我的邮箱:s1029384756@163.com QQ:3052847 ...… 查看全部问答> |




