历史上的今天
返回首页

历史上的今天

今天是:2024年10月09日(星期三)

正在发生

2019年10月09日 | stm32 time4 pwm

2019-10-09 来源:eefocus

pwm.h

#ifndef _PWM_H
#define _PWM_H
#include "sys.h"


void TIM14_PWM_Init(u32 arr,u32 psc);
#endif



pwm.c

#include "pwm.h"


//TIM4 PWM部份初始化
//PWM 输出初始化arr:自动重装值 psc:时钟预分频系数


void TIM14_PWM_Init(u32 arr,u32 psc)
{
GPIO_InitTypeDef GPIO_InitStructure;
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM14,ENABLE);//time14时钟使能
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF,ENABLE);//TIME14在PF9上,使能gpioF


GPIO_PinAFConfig(GPIOF,GPIO_PinSource9,GPIO_AF_TIM14);//GPF9复用为tim14


GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9; //GPIOF9
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF; //复用
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_100MHz; //高速
GPIO_InitStructure.GPIO_OType=GPIO_OType_PP; //推挽复用
GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_UP; //上拉
GPIO_Init(GPIOF,&GPIO_InitStructure); //初始化GPIOF9

TIM_TimeBaseStructure.TIM_Prescaler=psc; //定时器分频
TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; //向上计数模式
TIM_TimeBaseStructure.TIM_Period=arr; //自动重装载值
TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1; //


TIM_TimeBaseInit(TIM14,&TIM_TimeBaseStructure); //初始化定时器14

//初始化tim14 channel1 PWM模式
//PWM 调制模式1只要 TIMx_CNT < TIMx_CCR1,通道 1 便为有效状态,否则为无效状态。
//可以理解为 if TIMx_CNT < TIMx_CCR1 输出否则不输出 计数cnt//ccr1为捕获/比较寄存器

TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1;
TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;//比较输出使能
TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_Low;//输出极性低,因为PF9连接的LED0低电平才会亮
TIM_OC1Init(TIM14,&TIM_OCInitStructure); //初始化外设TIM1_40C1


TIM_OC1PreloadConfig(TIM14,TIM_OCPreload_Enable);//使能预装载寄存器

TIM_ARRPreloadConfig(TIM14,ENABLE);//CT1寄存器的位7 ARPE=1,这样ARR寄存器的内容在更新事件UEV发生时
//传送到影子寄存器


TIM_Cmd(TIM14,ENABLE);//使能tim14



main.c

#include "sys.h"
#include "delay.h"


#include "pwm.h"


int main(void)

u16 led0pwmval=0;
u8 dir=1;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//系统优先级分组2
delay_init(168);//168 MHz

TIM14_PWM_Init(500-1,84-1);//

//定时器的频率为84Mhz,分频系数为84,84000000/84=1Mhz 0.000001秒 1us;
//自动重装载值为500,定时器的周期=0.000001*500=0.0005s=500us=0.5ms,所以频率为1000ms/0.5ms=2khz
//定时器的频率为2Khz已经固定了
//
while(1)
{
delay_ms(10);
if(dir)
led0pwmval++;
else
led0pwmval--;
if(led0pwmval>300)dir=0; //3秒 到达300后,方向为递减
if(led0pwmval == 0)dir=1; //到达0后,方向为递增
TIM_SetCompare1(TIM14,led0pwmval); //修改比较值,修改占空比 此处修改CCR1为捕获/比较寄存器的值

}
}


/*
TIM_SetCompare1(TIM14,led0pwmval)每10ms设置了CCR1寄存器的值,
计算寄存器CNT的值为0~500这个不变(上面初始化时设了)  比较寄存器CCR1的值在变
通过前面设置只要CNT在2khz也就是0.5ms内,如果CCR1为100,那么0.1ms的时间灯是亮的,如果CCR1=300,那么0.3ms灯是亮的
又led0pwmval从0-300然后双从300到0,所以灯的亮度也是从低到高然后再从高到低

*/


推荐阅读

史海拾趣

FOX [Fox Electronics]公司的发展小趣事

面对物联网、5G通信和汽车电子等新兴技术的快速发展,Fox Electronics敏锐地洞察到未来市场的变革趋势。公司加大了对高频、低抖动和高精度时钟解决方案的研发力度,以满足新兴应用对时钟源的高要求。同时,Fox Electronics还积极布局汽车电子市场,开发适应汽车自动驾驶和车联网需求的专用时钟产品。通过不断创新和布局未来市场,Fox Electronics为自身的持续发展奠定了坚实基础。

请注意,以上故事均为虚构内容,旨在展示电子行业发展的某些方面和可能的趋势。实际上,Fox Electronics的具体发展历程和成就可能有所不同。

European Crystal Org公司的发展小趣事

随着公司的发展,ECO逐渐在晶体技术领域取得了突破。研发团队成功开发出一种新型的高精度晶体振荡器,具有更高的稳定性和更低的功耗。这一创新产品迅速在市场上获得了广泛认可,ECO的订单量激增。同时,公司还加大了对研发的投入,不断推出新产品,满足了客户日益增长的需求。

Dialog公司的发展小趣事

近年来,Dialog公司通过一系列收购活动实现了快速扩张。例如,Dialog公司收购了Adesto公司,进一步拓展了工业物联网市场。这次收购为Dialog公司带来了一系列新的智能楼宇自动化工业解决方案,为其现有的制造自动化产品提供了非常好的补充。此外,收购Adesto还为Dialog公司带来了近5,000家客户公司,这些公司中大部分对Dialog公司来说是新客户。

Free2Move公司的发展小趣事

近年来,Dialog公司通过一系列收购活动实现了快速扩张。例如,Dialog公司收购了Adesto公司,进一步拓展了工业物联网市场。这次收购为Dialog公司带来了一系列新的智能楼宇自动化工业解决方案,为其现有的制造自动化产品提供了非常好的补充。此外,收购Adesto还为Dialog公司带来了近5,000家客户公司,这些公司中大部分对Dialog公司来说是新客户。

ETRI公司的发展小趣事

随着人工智能的兴起,ETRI也将目光转向了这一领域。他们与首尔市政府合作,在首尔市The Seocho District区内安装了3000台AI摄像头,这些摄像头通过深度学习技术,能够预测犯罪发生的概率,并在必要时提醒警署采取行动。此外,他们还计划分析大量的法庭判决文件和犯罪录像,以优化AI软件的预测能力。

Brite-Led Optoelectronics Inc公司的发展小趣事

面对电子行业的快速变化和不断升级的技术需求,Brite-Led始终保持敏锐的洞察力和创新精神。公司不断投入研发资源,推出新产品和新技术,以满足市场的变化和客户的需求。同时,公司还注重人才培养和引进,建立了一支高素质的研发团队和管理团队。这些措施使得Brite-Led在激烈的市场竞争中始终保持领先地位,实现了持续发展。

以上是关于Brite-Led Optoelectronics Inc公司发展的5个虚构故事,虽然这些故事是基于虚构的,但它们可能反映了Brite-Led Optoelectronics Inc公司在实际发展中可能遇到的一些情况和挑战。

问答坊 | AI 解惑

PWM开关变换器的符号分析

PWM开关变换器的符号分析…

查看全部问答>

DSP芯片的应用

自从DSP芯片诞生以来,DSP芯片得到了飞速的发展。DSP芯片高速发展,一方面得益于集成电路的发展,另一方面也得益于巨大的市场。在短短的十多年时间,DSP芯片已经在信号处理、通信、雷达等许多领域得到广泛的应用。目前,DSP芯片的价格也越来越低, ...…

查看全部问答>

求助 tb6560步进电机驱动设计+单片机控制系统

想求求各位大虾帮帮忙     看看用单片机控制步进电机正反转 调速  怎么弄    步进电机驱动是   用tb6560做的   我买了    步进驱动器--tb6560ahq-v2.0(0.5-3A ,2、8、1 ...…

查看全部问答>

MFC背景绘制

   最近在弄透明static text控件,不是一般的那种,而是在对话框有背景图的情况下透明。基本上已经实现了,但是第一次显示的时候会有点闪,原因就是对话框绘制其背景图时,会空出子控件所在的区域,这样当子控件再绘制自己的背景时,就会 ...…

查看全部问答>

eboot 烧写问题

FLASH换成spansion S29GL了,可jtag无法写进去。好像不支持这片子。。用flash烧写器太麻烦。。 我应该怎么办?哪位高人有这片子的jtag烧写软件? 谢谢!· …

查看全部问答>

请教关于wince IE问题

需要写一个IE浏览器 请问怎么能检测到当前网络状态(应该是IE的状态)是否连上或者断开, 通过检测无线网卡的方式经过实验发现不行,因为无线网卡的驱动好象也不是时时检测这个连接状态的,我把AP断开,无线网卡的信号还很强, 现在想通过判断IE ...…

查看全部问答>

希望ST增强HSITRIM的功能。

USB 12Mbps的频率误差允许0.25%。而stm32f的HSI允许以40kHz左右的步长调节(改变HSITRIM的值)。40kHz/8MHz=0.5%,可惜呀。如果能以10kHz的步长调节HSI频率,同时保证HSI频率一定的稳定度,就可以用32768单晶振实现USB了!!!希望ST改进 ...…

查看全部问答>

STM32开源开发环境的搭建EclipseSourceryG++

中间有一段时间没来的及做,现在的进展是我用了3.4的固件库编译之类的都能通过,下载还没弄好,但是郁闷的是同样的程序烧进去却无法运行,哪位做过的给点提示,也欢迎大家讨论。 这两天在尝试着搭建Eclipse+ GNU ARM Eclipse Plug-in+ Sour ...…

查看全部问答>

关于中断几个小问题

这是一个用中断和计时器控制一个led灯循环闪烁的程序 #include sbit led1=P1^0; void main() {EA=1; ET0=1; TMOD=0x01; TH0=(65536-46083)/256; TH1=(65536-46083)%256; TR0=1; while(1); } void time() interrupt 1 { led1=~l ...…

查看全部问答>

基于stm8和rf905的无线通信程序

大神们急需啊!!!!!!!!!!!!!!…

查看全部问答>