成都高端模板建站,wordpress 管理页面,企业网站建设兴田德润实惠,软文广告的案例1.STM32的通用定时器是可编程预分频驱动的16位自动装载计数器。 STM32 的通用定时器可以被用于#xff1a;测量输入信号的脉冲长度 ( 输入捕获 ) 或者产生输出波 形 ( 输出比较和 PWM) 等。 使用定时器预分频器和 RCC 时钟控制器预分频器#xff0c;脉冲长度和波形 周…1.STM32的通用定时器是可编程预分频驱动的16位自动装载计数器。 STM32 的通用定时器可以被用于测量输入信号的脉冲长度 ( 输入捕获 ) 或者产生输出波 形 ( 输出比较和 PWM) 等。 使用定时器预分频器和 RCC 时钟控制器预分频器脉冲长度和波形 周期可以在几个微秒到几个毫秒间调整。 STM32 的每个通用定时器都是完全独立的没有互相 共享的任何资源。 2.相关寄存器 1控制寄存器TIMx_CR1本次实验中只使用到了最低位即计数器使能位。 2 DMA/ 中断使能寄存器 TIMx_DIER 本次实验中只使用到了最低位允许更新中断。 3预分频寄存器TIMx_PSC该寄存器用来设置对时钟的分频。 4自动重装载寄存器TIMx_ARR 5 状态寄存器TIMx_SR 3.设计思路通过设置设置通用定时器的中断并在定时器中断服务函数中反转LED灯。首先使能定时器的时钟。然后配置定时器的相关信息 和中断管理的相关信息。最后编写定时器中断的中断服务函数。
4.代码
1LED:
#ifndef __LED_H
#define __LED_H#include stm32f10x.hvoid LED_Init(void);#endif
#include led.hvoid LED_Init(void)
{//¶¨Òå¶Ë¿ÚµÄ½á¹¹Ìå:GPIO_InitTypeDef GPIO_InitStruct;//1.ʹÄÜʱÖÓ£ºRCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOA,ENABLE);//2.ÅäÖö˿ڽṹÌåµÄÏà¹ØÐÅÏ¢£º£¨LED1£©GPIO_InitStruct.GPIO_Pin GPIO_Pin_2;GPIO_InitStruct.GPIO_Mode GPIO_Mode_Out_PP;GPIO_InitStruct.GPIO_Speed GPIO_Speed_50MHz;GPIO_Init(GPIOD,GPIO_InitStruct);//ÅäÖÃLED0£ºGPIO_InitStruct.GPIO_Pin GPIO_Pin_8;GPIO_Init(GPIOA,GPIO_InitStruct);//³õʼʱ½«LEDµÄ¶Ë¿Ú¶¼ÖÃΪ1£¬¼´Ï¨ÃðGPIO_SetBits(GPIOA,GPIO_Pin_8);GPIO_SetBits(GPIOD,GPIO_Pin_2);
}
(2)TIME
#ifndef __TIME_H
#define __TIME_H#include stm32f10x.hvoid TIME_Init(u16 arr,u16 psc);#endif
#include time.hvoid TIME_Init(u16 arr,u16 psc)
{//¶¨Ò嶨ʱÆ÷ºÍÖжϽṹÌ壺TIM_TimeBaseInitTypeDef TIM_TimBaseStructure;NVIC_InitTypeDef NVIC_InitStructure;//1.ʹÄܶ¨Ê±Æ÷ʱÖÓ;RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);//2.³õʼ»¯time3£ºTIM_TimBaseStructure.TIM_Period arr; //ÉèÖÃ×Ô¶¯ÖØ×°ÔؼĴæÆ÷µÄÖµTIM_TimBaseStructure.TIM_Prescaler psc;TIM_TimBaseStructure.TIM_ClockDivision TIM_CKD_DIV1;TIM_TimBaseStructure.TIM_CounterMode TIM_CounterMode_Down;TIM_TimeBaseInit(TIM3,TIM_TimBaseStructure);TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE); //ÔÊÐí¸üÐÂÖжÏ//3.ÖжÏÅäÖãºNVIC_InitStructure.NVIC_IRQChannel TIM3_IRQn;NVIC_InitStructure.NVIC_IRQChannelCmd ENABLE;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority 2;NVIC_InitStructure.NVIC_IRQChannelSubPriority 1;NVIC_Init(NVIC_InitStructure);//4.ʹÄܶ¨Ê±Æ÷£ºTIM_Cmd(TIM3,ENABLE);
}
//ÖØÐ´time3µÄÖжϷþÎñº¯Êý£º
void TIM3_IRQHandler(void)
{static int i 0;//¼ì²éÊÇ·ñ·¢ÉúÖжϣºif(TIM_GetITStatus(TIM3,TIM_IT_Update) ! RESET){//Çå³ýtimeµÄ¸üÐÂÖжϱê־λTIM_ClearITPendingBit(TIM3,TIM_IT_Update);if(i){GPIO_SetBits(GPIOA,GPIO_Pin_8);i !i;}else{GPIO_ResetBits(GPIOA,GPIO_Pin_8);i !i;}}
}
3main:
#include stm32f10x.h
#include delay.h
#include led.h
#include time.hint main(void)
{NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);LED_Init();TIME_Init(4999,7199);while(1){delay_ms(1000);}}
5.运行结果 6.总结本次实验是通过STM32的通用定时器反转LED灯。在实验库函数编程的时候是比较方便的。但是为了打好基础应该去大概的了解一下相关寄存器的功能。