历史上的今天
返回首页

历史上的今天

今天是: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 ==============

推荐阅读

史海拾趣

AVX公司的发展小趣事

近年来,AVX在汽车领域的应用也取得了显著进展。随着汽车行业的快速发展,对电子元件的需求也日益增长。AVX凭借其卓越的技术和品质,成功为汽车安全性、发动机控制、信息娱乐和底盘控制技术的开发提供了关键支持。AVX的产品广泛应用于各类汽车中,为提升汽车性能和安全性做出了积极贡献。

以上五个故事展示了AVX公司在电子行业中的发展历程和取得的成就。从创立初期到如今的全球化布局,AVX始终坚持以技术创新和市场拓展为核心,不断推动公司的发展。同时,AVX也积极关注可持续发展和绿色技术,为行业的进步做出了积极贡献。

GSI Technology公司的发展小趣事

从财务表现来看,GSI Technology在过去几年中取得了不俗的成绩。尽管在某些季度受到宏观经济环境和市场需求波动的影响,但公司整体营收和净利润均保持了稳定增长。特别是在2023年Q3财报中,尽管营收略低于市场预期,但公司依然展现出了强劲的发展潜力和市场竞争力。展望未来,GSI Technology将继续秉承创新、务实、高效的发展理念,不断推出更多高性能、高品质的存储器产品,为全球电子行业的发展贡献自己的力量。

德艺隆(DEALON)公司的发展小趣事

为了拓展国际市场,德艺隆制定了国际化战略。他们积极参加国际展会,与全球客户建立联系;同时,公司还加大了对海外市场的投入,建立了海外销售网络和售后服务体系。通过多年的努力,德艺隆的产品已经出口到多个国家和地区,赢得了国际市场的认可。

华润微(CRMICRO)公司的发展小趣事

2001年,华润微成立矽科公司,开始涉足芯片设计业务。这一举措使公司能够为客户提供更加完整的解决方案,并进一步提升其市场竞争力。同时,华润微也意识到封装测试在半导体产业链中的重要性,于是在2003年成立安盛公司,开始进入封装测试领域。通过建立6英寸产线,华润微进一步巩固了其在半导体产业链中的地位。

千志电子(CCO)公司的发展小趣事

为了满足市场需求和扩大生产规模,千志电子不断加大投资力度。2014年,千志电子在湖北投资建设了千志电子科技(湖北)有限公司项目,总投资额达到5000万元人民币。该项目占地面积50亩,主要生产电阻等电子产品。预计项目建成后可实现年产值4000万元,年创利税350万元,安置劳动力120人左右。这一项目的投资建设不仅使千志电子的生产规模得到了进一步扩大,还为其未来的发展奠定了坚实基础。

台湾义隆电子(ELAN)公司的发展小趣事

作为一家有社会责任感的企业,义隆电子一直关注可持续发展问题。公司积极推广绿色生产理念,采取环保措施减少生产过程中的污染排放。同时,义隆电子还关注社会公益事业,积极参与各种慈善活动,回馈社会。这些举措不仅提升了公司的品牌形象,也为公司的长期发展奠定了坚实基础。

请注意,以上故事框架仅供参考,具体的故事内容需要根据义隆电子的实际情况进行撰写。

问答坊 | AI 解惑

keil学习(二)

二、工程的详细设置 图 4 重复加入文件的错误 工程建立好以后,还要对工程进行进一步的设置,以满足要求。 首先点击左边 Project 窗口的 Target 1,然后使用菜单“Project->Option for target ‘target1’” 即出现对工程设置的对话框,这个对 ...…

查看全部问答>

如何能编好单片机的程序(5)

1) 对malloc分配的内存进行memset清零操作。(可以使用calloc分配一块全零的内存)   2) 对一些栈上分配的struct或数组进行初始化。(最好也是清零) 不过话又说回来了,初始化也会造成系统运行时间有一定的开销,所以,也不要对所有的变量做初 ...…

查看全部问答>

飞旭科技PAM9200A ARM 开发板的烧录资料

使用说明资料全 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 请写:步进电机 或 嵌入式驱动程序 和任何和 ...…

查看全部问答>

2440 按键驱动问题

Mini2440的板子,WINCE 5.0,板子上有6个测试按键,并且BSP里自带了驱动。现在的问题是,板子上的6个按键只有三个是有效的,而另外三个按键没有任何反应。这几个无效按键所对应的IRQ分别为IRQ_EINT13,IRQ_EINT14,IRQ_EINT15。我搜了一下,似乎板 ...…

查看全部问答>

一直在关注渥瑞达,大家有知道的吗!

  一直在关注渥瑞达3G嵌入式培训,大家有谁知道的吗?一起讨论一下啊!…

查看全部问答>

winCE下进行FTP传输文件编程

如题:小弟想在winCE实现FTP给远程主机(是PC机)传输文件的功能,怎样编程呀,需要哪些函数呢?…

查看全部问答>

COM口怪现象求高手帮忙!

我用的是PC104前几天做了个串口的调试程序,可以和WIN32的COM调试软件通信,可是我又过了几天,在使的时候就不能通信了,104上插了几个卡公司做的卡。和这个有关系吗?还有其他的可能性吗?我的代码是从网上下的ARM的串口程序,我在EVC里编译到X86 ...…

查看全部问答>

救急!哪位有关于单片机的英文资料?

各位大虾:     现在小弟急用关于单片机的英文资料,在网上找了半天没找到! 希望大家帮帮忙啊!能有对应的中文翻译更好!英文大概5000字符的,多了当然更好! 谢谢了!! 我的邮箱:s1029384756@163.com      QQ:3052847 ...…

查看全部问答>