继上一次对Nucleo32-f042做了简单的介绍之后,这次,让我们来看看这款芯片的内部资源。
大家都知道,STM32的片内资源是相当丰富的,而这些资源里面,要数定时器功能最强大了,F042K6有1个16位高级控制定时器,1个32位4个16位通用定时器,共26通道PWM输出,用来控制电机是非常不错的,下面,让我们看看定时器的PWM输出功能。
看原理图:
板载LED连在了PB3上,而PB3正好是TIM2的CH2,那么,本篇将介绍如何使用定时器弄一个呼吸灯。
新建工程目录如图,并添加相应标准库文件
选择型号,建立工程
编写初始化代码如下:
- void TIM_Init(void)
- {
- GPIO_InitTypeDef GPIO_InitStructure;
- TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
- TIM_OCInitTypeDef TIM_OCInitStructure;
-
- RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);
- RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB,ENABLE);
-
- GPIO_InitStructure.GPIO_Pin=GPIO_Pin_3;
- GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
- GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
- GPIO_Init(GPIOB,&GPIO_InitStructure);
-
- GPIO_PinAFConfig(GPIOB,GPIO_PinSource3,GPIO_AF_2);
-
- TIM_TimeBaseInitStructure.TIM_ClockDivision = 0;
- TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Down;
- TIM_TimeBaseInitStructure.TIM_Period = 1000-1;
- TIM_TimeBaseInitStructure.TIM_Prescaler = 48-1;
- TIM_TimeBaseInit(TIM2,&TIM_TimeBaseInitStructure);
-
- TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM2;
- TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;
- TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_Low;
- TIM_OCInitStructure.TIM_Pulse = 0;
- TIM_OC2Init(TIM2,&TIM_OCInitStructure);
- TIM_CtrlPWMOutputs (TIM2,ENABLE);
-
- TIM_OC2PreloadConfig(TIM2, TIM_OCPreload_Enable); //CH2
- TIM_ARRPreloadConfig(TIM2, ENABLE);
-
- TIM_Cmd(TIM2,ENABLE);
- }
复制代码 然后编写呼吸灯相关代码
- i=0;
- while(i+=5)
- {
- TIM_SetCompare2(TIM2,i);
- delay_ms(10);
- if(i>=1000)
- break;
- }
- i=1000;
- while(i-=5)
- {
- TIM_SetCompare2(TIM2,i);
- delay_ms(10);
- if(i<=0)
- break;
- }
- delay_ms(1000);
- delay_ms(1000);
复制代码
写完,编译连接下载,便可以看到这颗绿色LED渐亮渐灭了。
å¼å¸ç¯.rar
(4.1 MB, 下载次数: 87)
|
麻烦问下我现在在使用STM32F042的板子,使用定制器TIM17 CH1输出5Mhz的PWM波,发现输出的波形为5.3MHZ,占空比为33%,但是输出1kHZ的就是正确的,麻烦帮忙分析下,附配置代码:
我在做使用STM32F042 定时器17通道1 输出5MHZ方波,占空比为50%时,输出的波形为5.336MHZ,占空比约为33%
但是输出较小频率是稳定,如2MHZ,示波器测量就正确,麻烦解答下
是否是超出输出上限了?
系统时钟为48M,HCLK、PCLK均未分频,为48M
附配置代码:
楼主,我下载了您的压缩包,但是编译的时候提示有27个错误
小白,勿喷
file:///C:/Users/Bling/AppData/Roaming/Tencent/QQ/Temp/H0Z@HXCF1$4A1J16%7BYL1Q1G.jpg