如果觉得不错就点个赞吧~
一 组装
1、需要准备元件:
32板,杜邦线,跳线,1个LED灯,1个电阻,ST-Link,面包板
2、连线:
跟点亮LED完全一样,不懂的同学请参考我写的另一篇[stm32] Start Tour-LED灯闪烁
二 具体代码
Timer
#include "stm32f10x.h"
void Timer_Init(void)
{
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);//开启时钟,Tim2使APB1总线的外设,第一步
TIM_InternalClockConfig(TIM2);//第二步选择时基单元的时钟源。tim.h的1073行,选择内部时钟
//时基单元配置
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;//在tim.h的第56行,选了向上计数
TIM_TimeBaseInitStructure.TIM_Period = 10000- 1;//因为预分频器和计数器都有1个数的偏差,故要-1.都要在0~65535的范围随便选
TIM_TimeBaseInitStructure.TIM_Prescaler = 7500- 1;
TIM_TimeBaseInitStructure.TIM_RepetitionCounter = 0;
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseInitStructure);//第三步配置时基单元,1055行
TIM_ClearFlag(TIM2, TIM_FLAG_Update);//使计数从0开始显示,而不是1
//开启更新中断到NVIC
TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);//tim.h的1069行
//配置NVIC
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;//指定所选通道的抢占优先级
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;//响应优先级
NVIC_Init(&NVIC_InitStructure);
//打开定时器
TIM_Cmd(TIM2, ENABLE);
}
main
#include "stm32f10x.h"
#include "Delay.h"
#include "LED.h"
#include "Timer.h"
int main(void)
{
LED_Init();
Timer_Init();
while(1)
{
}
}
void TIM2_IRQHandler(void)
{
if (TIM_GetITStatus(TIM2, TIM_IT_Update) == SET)
{
LED_Turn();
TIM_ClearITPendingBit(TIM2, TIM_IT_Update);
}
}
实现效果是LED差不多一秒亮一次,想要频率加快改10000-1和7500-1那里