历史上的今天
返回首页

历史上的今天

今天是:2025年02月17日(星期一)

正在发生

2020年02月17日 | 关于STM32的 一个TIM1 的PWM程序和PWM简单使用

2020-02-17 来源:elecfans

高级定时器与通用定时器比较类似,下面是一个TIM1 的PWM 程序,TIM1是STM32唯一的高级定时器。共有4个通道有 死区有互补。


先是配置IO脚:

GPIO_InitTypeDef GPIO_InitStructure;

/* PA8设置为功能脚(PWM) */

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOA, &GPIO_InitStructure);

/*PB13 设置为PWM的反极性输出*/

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOB, &GPIO_InitStructure);

/*开时钟PWM的 与GPIO的*/

RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE);

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);

/*配置TIM1*/

TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;

TIM_OCInitTypeDef TIM_OCInitStructure;

voidTim1_Configuration(void)

{

TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;

TIM_OCInitTypeDef TIM_OCInitStructure;

TIM_DeInit(TIM1);//重设为缺省值

/*TIM1时钟配置*/

TIM_TimeBaseStructure.TIM_Prescaler = 4000;//预分频(时钟分频)72M/4000=18K

TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;//向上计数

TIM_TimeBaseStructure.TIM_Period = 144;//装载值 18k/144=125hz 就是说向上加的144便满了

TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;//设置了时钟分割不懂得不管

TIM_TimeBaseStructure.TIM_RepetitionCounter = 0x0;//周期计数器值 不懂得不管

TIM_TimeBaseInit(TIM1,&TIM_TimeBaseStructure);//初始化TIMx的时间基数单位

/* Channel 1 Configuration in PWM mode 通道一的PWM*/

TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //PWM模式2

TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;//正向通道有效 PA8

TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable;//反向通道也有效PB13

TIM_OCInitStructure.TIM_Pulse = 40; //占空时间 144 中有40的时间为高,互补的输出正好相反

TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; //输出极性

TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_Low; //互补端的极性

TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Reset;//空闲状态下的非工作状态 不管

TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCIdleState_Reset;//先不管

TIM_OC1Init(TIM1,&TIM_OCInitStructure); //数初始化外设TIMx通道1这里2.0库为TIM_OCInit

/* TIM1 counter enable开定时器 */

TIM_Cmd(TIM1,ENABLE);

/* TIM1 Main Output Enable 使能TIM1外设的主输出*/

TIM_CtrlPWMOutputs(TIM1,ENABLE);

}

//设置捕获寄存器1

voidSetT1Pwm1(u16 pulse)

{

TIM1-》CCR1=pulse;

}

/*操作寄存器改变占空时间*/

/*****************************************************************************************************************

TIM1的定时器通道时间 1到4 分别为 PB8 PA9 PA10 PA11 而互补输出分别为 PB13 PB14 PB15

中止 PB12 。

如果输出与互补输出极性相同的话 就刚好输出高 互补低 至于PWM模式1 与模式2的区别

在下图:

这个是模式1的 了绿为输出 黄为互补

*************************************************************************************************

上图是模式2的情况 正好和模式1的反过来了 144中有40 为高 互补的有40为低。

*************************************************************************************************/

//在MAIN 中加点键盘扫描啥的 用来改变占空比

/************************************************************

**实验名称:PWM

**功能:是PA8产生PWM输出,PA8为驱动LED1和马达的IO,

通过UP DOWN键,可以改变占空比,从而让ED1和小马达的产生变化

**注意事项:LED是低有效,马达则是高有效,所以LED全灭的时候马达转速达到最高。

**作者:电子白菜

*************************************************************/

#include“STM32Lib\stm32f10x.h”

#include“hal.h”

extern voidSetT1Pwm1(u16 pulse);

intmain(void)

{

u16 pulse=40;

ChipHalInit();//片内硬件初始化

ChipOutHalInit();//片外硬件初始化

for(;;)

{

if(GET_UP())

{

while(GET_UP());

if(pulse《=144)

{

pulse+=5;

SetT1Pwm1(pulse);

}

}

if(GET_DOWN())

{

while(GET_DOWN());

if(pulse》30)

{

pulse-=5;

SetT1Pwm1(pulse);

}

}

}

}

/***************************************************************************************/

再来两张 最小系统板子

/***************************************************************************************/

你也只需一块这样板子再来一点时间与干劲这个历程一样跑的起来。

推荐阅读

史海拾趣

C-MAX Time Solutions公司的发展小趣事

在电子行业竞争日益激烈的今天,C-MAX Time Solutions公司始终坚持研发创新。公司不断投入资金和资源,用于新产品的研发和现有产品的升级改进。通过持续的技术创新和产品迭代,C-MAX始终保持了在电子行业中的领先地位。同时,公司还注重人才培养和团队建设,为公司的长远发展提供了有力保障。

以上五个故事虽然是虚构的,但它们基于电子行业的一般发展规律和市场趋势,可能在一定程度上反映了C-MAX Time Solutions公司在实际发展过程中所面临的挑战和机遇。当然,具体的公司发展历程还需要结合公司的实际情况和市场环境进行深入分析。

CalAmp公司的发展小趣事

在业务拓展方面,CalAmp公司始终保持着敏锐的市场洞察力。某年,公司成功推出了RFID动物溯源和共享单车智能等新业务。这些新业务不仅为公司带来了新的增长点,也进一步拓宽了其业务范围。虽然新产品线的毛利率较低,对公司的整体毛利率和净利率产生了一定影响,但公司通过优化成本结构和提升运营效率,逐步改善了这一状况。同时,公司与澳大利亚利德品有限公司签订的品牌授权及合作协议,也为公司未来的盈利能力提升奠定了基础。

Genisco Electronics公司的发展小趣事
对互投电路中的设备进行定期检查和维护,确保其处于良好状态。
德国ACAM公司的发展小趣事

德国ACAM公司成立于1996年,总部位于施图登湖,毗邻斯图加特和卡尔斯鲁厄。公司从创立之初,就专注于时间到数字转换技术及其应用的研发。ACAM公司凭借其创新的技术和卓越的研发实力,在极短的时间内就取得了显著的成果。特别是在时间数字转换器(TDC)技术上,ACAM公司成功开发出业界领先的产品,为后续的快速发展奠定了坚实的基础。

Chen Yang Technologies GmbH & Co KG公司的发展小趣事

随着全球化进程的加速,Chen Yang Technologies意识到要想在电子行业中取得更大的成功,必须实施国际化战略。因此,公司开始积极开拓海外市场,设立海外研发中心和销售网络。同时,公司还加大了品牌宣传力度,通过参加国际展览、举办技术研讨会等方式提升品牌知名度和影响力。这些努力使得Chen Yang Technologies逐渐成为一家具有全球影响力的电子行业领军企业。


请注意,这些故事仅为虚构示例,旨在展示一个电子行业公司可能经历的一些典型发展路径和挑战。它们并不特指Chen Yang Technologies GmbH & Co KG公司的实际发展历程。如果需要了解该公司的具体发展故事,请查阅相关官方资料或新闻报道。

客益(Guestgood)公司的发展小趣事

随着全球化进程的加速,Chen Yang Technologies意识到要想在电子行业中取得更大的成功,必须实施国际化战略。因此,公司开始积极开拓海外市场,设立海外研发中心和销售网络。同时,公司还加大了品牌宣传力度,通过参加国际展览、举办技术研讨会等方式提升品牌知名度和影响力。这些努力使得Chen Yang Technologies逐渐成为一家具有全球影响力的电子行业领军企业。


请注意,这些故事仅为虚构示例,旨在展示一个电子行业公司可能经历的一些典型发展路径和挑战。它们并不特指Chen Yang Technologies GmbH & Co KG公司的实际发展历程。如果需要了解该公司的具体发展故事,请查阅相关官方资料或新闻报道。

问答坊 | AI 解惑

求助 毕业设计《基于单片机的计算器编程》

求助 毕业设计《基于单片机的计算器编程》  要求用MCS51单片机,protues仿真   急急急~~~…

查看全部问答>

基于89C51

这个是不错的…

查看全部问答>

询问platform Builder下载

有没有搞WinCE的兄弟? 请问你们用的PB是哪里搞到的? 多谢了…

查看全部问答>

PPP数据之7D

我看PPP相关文档,从里面抓了一些PPP数据,如下 7E FF 7D 23 C0 21 7D 21 7D 23 7D 20 7D 3D 7D 21 7D 24 7D 27 D0 7D 22 7D 26 7D 20 7D 2A 7D 20 7D 20 7D 27 7D 22 7D 28 7D 22 7D 25 7D 26 BB 6A E4 93 7D 23 7D 25 C2 23 7D 25 34 89 7E 上 ...…

查看全部问答>

大家在用的RVDS版本是多少?我用RVDSV4.0怎么打不开*.mcp的工程文件啊?必须用RVDSV2.0?

大家在用的RVDS版本是多少?我用RVDSV4.0怎么打不开*.mcp的工程文件啊?必须用RVDSV2.0?…

查看全部问答>

怎样读取RSSI才能使RSSI的读取正确而又不影响正常的数据接收呢?

我现在在用CC1020做一个数传模块,接收数据时需要读取RSSI的值,接收数据是在外部中断中进行的. 问题是:我在接收数据的时候读取的RSSI的值是不对的,不符合数据手册上的正常值;有时由于读取RSSI的值正常的接收数据也发生了错误. 请教我该怎样读取RSS ...…

查看全部问答>

sd卡读写问题,有的文件能写进去,有的文件不能写进去。。。

     如题,sd卡读写问题,有的文件能写进去,有的文件不能写进去。。。     高手指点一下,文件系统用的是EFSL     ARM7---EasyArm2200…

查看全部问答>

2812中断优先级机制

      dsp的中断优先级的修改可以由头文件DSP281x_SWPrioritizedIsrLevels.h定义PIE组的优先级和组内的优先级,源文件.c文件中的中断程序对IER和PIEIERx进行了赋值,以此屏蔽优先级低的中断。     & ...…

查看全部问答>

有 WinCE 培训讲师经验的请来看一看

本单位招兼职 WinCE 培训讲师,要求有一定的项目经历,表达能力强,待遇高,有意者与我联系。地点北京、上海、成都、广州等地。 联系人:罗先生 QQ:1489302364 邮件:hailang869@163.com…

查看全部问答>

将一些电压接入430芯片引脚要接缓冲电路或者什么电路吗

将一些电压接入430芯片引脚要接缓冲电路或者什么电路吗。…

查看全部问答>