历史上的今天
返回首页

历史上的今天

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

2020年02月03日 | 如何使用STM32单片机设置PWM输出

2020-02-03 来源:elecfans

环境:

主机:XP

开发环境:MDK4.23

MCU:STM32F103CBT6


说明:

使用内部8M晶振,倍频到64M供给TIM3定时器,PA6(通道1)上产生640K,50%方波


源代码:

初始化时钟:

//初始化RCC时钟

voidinit_rcc(void)

{

//将外设RCC寄存器重设为缺省值

RCC_DeInit();

//内部晶振使能

RCC_HSICmd(ENABLE);

//等待工作稳定

while(RCC_GetFlagStatus(RCC_FLAG_HSIRDY)==RESET);

//LSI的启动,提供给看门狗时钟

RCC_LSICmd(ENABLE);//打开LSI

while(RCC_GetFlagStatus(RCC_FLAG_LSIRDY)==RESET);//等待直到LSI稳定

if(1)

{

//使能预取指缓存

FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);

//设置FLASH存储器延时时钟周期数。(设置为延时2个时钟周期)

FLASH_SetLatency(FLASH_Latency_2);

//设置AHB时钟(HCLK)(这时设置为=系统时钟)

RCC_HCLKConfig(RCC_SYSCLK_Div1);

//设置SDIO的AHB时钟(HCLK2)(这时设置为=HCLK),64M

RCC_PCLK2Config(RCC_HCLK_Div1);

//设置APB1外设时钟(HCLK1)(这时设置为=HCLK/2),32M

RCC_PCLK1Config(RCC_HCLK_Div2);

//ADCCLK=PCLK2/8,1M

RCC_ADCCLKConfig(RCC_PCLK2_Div8);

//PLL的时钟来源及倍频的倍数,此处设置为64MHz

RCC_PLLConfig(RCC_PLLSource_HSI_Div2,RCC_PLLMul_16);

//使能PLL

RCC_PLLCmd(ENABLE);

//检测PLL是否就绪

while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)==RESET);

//设置PLL为系统时钟

RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);

//检测系统的时钟源是否是PLL

while(RCC_GetSYSCLKSource()!=0x08);

}

}

初始化IO口和定时器:

//设置IO口

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO,ENABLE);

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6;

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;

GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;

GPIO_Init(GPIOA,&GPIO_InitStructure);

//设置定时器3

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);

//重新将TImer设置为缺省值

TIM_DeInit(TIM3);

//采用内部时钟给TIM3提供时钟源

TIM_InternalClockConfig(TIM3);

timInitStruct.TIM_ClockDivision=TIM_CKD_DIV2;

timInitStruct.TIM_Prescaler=0;//计数频率为64M

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

timInitStruct.TIM_RepetitionCounter=0;

timInitStruct.TIM_Period=100;//这个值实际上就是TIMX-》ARR,延时开始时重新设定即可

TIM_TimeBaseInit(TIM3,&timInitStruct);

//设置PWM输出

TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1;

TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;

TIM_OCInitStructure.TIM_Pulse=50;

TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_High;

TIM_OC1Init(TIM3,&TIM_OCInitStructure);

TIM_OC1PreloadConfig(TIM3,TIM_OCPreload_Enable);

//ARR预装载缓冲器使能

TIM_ARRPreloadConfig(TIM3,ENABLE);

//开启定时器

TIM_Cmd(TIM3,ENABLE);

输出波形:

如何使用STM32单片机设置PWM输出

推荐阅读

史海拾趣

Hantronix公司的发展小趣事

HANBIT Electronics自成立以来,便致力于技术创新与产品研发。2005年,公司投入大量资源研发新一代高性能手机显示屏技术,成功推出了具有低能耗、高清晰度和广视角特性的OLED屏幕。这一创新不仅迅速获得了市场的认可,还使得HANBIT Electronics在手机零部件供应商中脱颖而出,与多家国际知名品牌建立了长期合作关系。该技术的成功不仅提升了公司的市场份额,也为其后续在高端显示技术领域的持续探索奠定了坚实基础。

American Technical Ceramics (ATC)公司的发展小趣事

HANBIT Electronics自成立以来,便致力于技术创新与产品研发。2005年,公司投入大量资源研发新一代高性能手机显示屏技术,成功推出了具有低能耗、高清晰度和广视角特性的OLED屏幕。这一创新不仅迅速获得了市场的认可,还使得HANBIT Electronics在手机零部件供应商中脱颖而出,与多家国际知名品牌建立了长期合作关系。该技术的成功不仅提升了公司的市场份额,也为其后续在高端显示技术领域的持续探索奠定了坚实基础。

CLANDELL公司的发展小趣事

在电子产品市场日益同质化的背景下,CLANDELL公司意识到技术创新的重要性。公司投入大量资源研发新型电子元件,通过优化设计和材料选择,成功推出了具有更高性能、更低能耗的电子产品。这一创新不仅提升了CLANDELL公司的市场竞争力,也为整个行业带来了技术进步的推动力。

3D PLUS公司的发展小趣事

面对日新月异的电子行业,3D PLUS公司始终保持创新精神,不断推动3D技术的升级。公司研发团队成功研发出全方位彩色人体扫描仪,这一设备能够在极短的时间内实现360度人像扫描,且清晰度极高,为互联网人体应用提供了强有力的支持。此外,公司还不断在软件、算法等方面进行优化,提升3D技术的精度和效率,满足市场的不断需求。

鸿展光电(GPO)公司的发展小趣事

为了更好地满足客户需求,3D PLUS公司不仅提供硬件设备,还积极构建3D生态圈。公司推出了一系列3D个性化产品,包括3D全彩婚纱人像、3D梦幻水晶摆件等,这些产品独具潮流气息,深受市场欢迎。同时,公司还提供软件开发、定制开发等服务,帮助客户在移动端构建感性的3D商业场景,实现O2O移动营销的有效联动。这些举措不仅丰富了公司的产品线,也为客户提供了全方位的3D解决方案。

Frequency Sources公司的发展小趣事

Frequency Sources公司深知质量是企业生存和发展的基石。因此,公司始终将质量控制放在首位,建立了完善的质量管理体系和检测机制。从原材料采购到生产加工、成品检验等各个环节都严格把关,确保产品质量符合客户要求和行业标准。同时,公司还注重品牌建设和客户服务体验的提升,通过提供优质的售前咨询、售中支持和售后服务赢得了客户的信赖和好评。这些努力使得公司的品牌形象深入人心,成为了行业内的佼佼者。

问答坊 | AI 解惑

反激型开关电源的软缓冲技术

摘要:提出一种有别于 RC缓冲电路的软缓冲电路新技术 ,它结合电流型 PWM 控制 ,利用反激型变换器中的 耦合电感器与外加小容量电容器构成LC谐振电路 ,能以高性价比完成关断感性负载的暂态缓冲 ,并能消除二极管 的反向恢复不良特性。对此电路进行的 ...…

查看全部问答>

芯片集成的未来趋势

芯片集成的未来趋势…

查看全部问答>

新手请教vs2008如何给wince4.2写程序。

我们应用一种wince4.2系统的人机界面,我想应该可以用vs.net来给他写程序,于是写了个很简单的程序,选的项目类型是智能设备.net framework2.0 ,目标平台是windows ce,.net compact framework version2.0 写了简单的程序后生成工程,然后把生成的可 ...…

查看全部问答>

led 灯于频率问题

编写好的程序通过U-BOOT下载到SDRAM中运行或者下载到Nand flash中运行。流水灯的时间竟然不一样,请问这是怎么回事? SDRAM中时要快很多,从flash引导时要慢很多。有人遇到这个情况吗?…

查看全部问答>

关于ARM的方向

请问ARM方面大概分什么方向?我想学习偏硬的,但不知从何开始 我大二的,论理基础不多,请问还要求掌握什么课程的知识么?希望高人指导!…

查看全部问答>

lm3s9b96使用JLINK无法连接,请指点

上拉电阻使用10K。 连接提示: could not find supported cpu core on jtag chain bad jtag communication:write to ir:expected 0x1,got 0x7(tap command:2)@0f ...…

查看全部问答>

EPM7064S应用问题

1.CPLD EPM7064S上电后有一个端口的电平输出总是先变为高电平为1s后才恢复正常输出,断电前也是先变为高电平才断电,其它端口没有发现这种情况,都是一直输出低电平,是不是芯片坏了还是上电后CPLD端口的电压不稳定所致呢?我换过另一个片子,同样 ...…

查看全部问答>

msp430程序IAR中怎么计算延时的?

以前用KEIL会有时间显示,现在IAR中找不到唉 for(unsigned int i = 0; i …

查看全部问答>

备考中……

这段日子在忙着嵌入式系统设计师考试,也不知道这个证以后用的用不上,先把他搞定在说!嘿嘿………

查看全部问答>

乘法器型DAC求教

乘法器型DAC 参数中乘法带宽(Multiplying Bandwidth)是什么意思??…

查看全部问答>