11. Таймеры общего назначения



Pdf көрінісі
бет2/3
Дата27.05.2023
өлшемі260,79 Kb.
#177827
1   2   3
Байланысты:
ЛК11 - Таймеры общего назначения

11.2 Листинг кода программы

#
i
nclude "stm32f10x.h" 
#include "stm32f10x_gpio.h" 
#
i
nclude "stm32f10x_rcc.h" 
#include "stm32f10x_tim.h" 
#include "misc.h" 
void 
SetSysClockToHSE
(void) 



ErrorStatus HSEStartUpStatus; 
/* SYSCLK, HCLK, PCLK2 and PCLK1 configuration -----------------------------*/ 
/* RCC system reset(for debug purpose) */ 
RCC_DeInit(); 
/* Enable HSE */ 
RCC_HSEConfig( RCC_HSE_ON); 
/* Wait till HSE is ready */ 
HSEStartUpStatus = RCC_WaitForHSEStartUp(); 
if
(HSEStartUpStatus == SUCCESS) 

/* HCLK = SYSCLK */ 
RCC_HCLKConfig( RCC_SYSCLK_Div1); 
/* PCLK2 = HCLK */ 
RCC_PCLK2Config( RCC_HCLK_Div1); 
/* PCLK1 = HCLK */ 
RCC_PCLK1Config(RCC_HCLK_Div1); 
/* Select HSE as system clock source */ 
RCC_SYSCLKConfig( RCC_SYSCLKSource_HSE); 
/* Wait till PLL is used as system clock source */ 
while
(RCC_GetSYSCLKSource() != 
0x04




else 
{ /* If HSE fails to start-up, the application will have wrong clock configuration. 
User can add here some code to deal with this error */ 
/* Go to infinite loop */ 
while (
1





void TIM4_IRQHandler(
void


if
(TIM_GetITStatus(TIM4, TIM_IT_Update) != RESET) 

// Обязательно сбрасываем флаг 
TIM_ClearITPendingBit(TIM4, TIM_IT_Update); 
GPIOC->ODR ^= GPIO_Pin_13; 


int 
main
(void) 



SetSysClockToHSE(); 
/* Initialize LED which connected to PC13 */ 
GPIO_InitTypeDef GPIO_InitStructure; 
// Enable PORTC Clock 
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); 
/* Configure the GPIO_LED pin */ 
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13; 
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 
GPIO_Init(GPIOC, &GPIO_InitStructure); 
GPIO_ResetBits(GPIOC, GPIO_Pin_13); // Set C13 to Low level ("0") 
// TIMER4 
TIM_TimeBaseInitTypeDef TIMER_InitStructure; 
NVIC_InitTypeDef NVIC_InitStructure; 
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE); 
TIM_TimeBaseStructInit(&TIMER_InitStructure); 
TIMER_InitStructure.TIM_CounterMode = TIM_CounterMode_Up; 
TIMER_InitStructure.TIM_Prescaler = 
8000

TIMER_InitStructure.TIM_Period = 
500

TIM_TimeBaseInit(TIM4, &TIMER_InitStructure); 
TIM_ITConfig(TIM4, TIM_IT_Update, ENABLE); 
TIM_Cmd(TIM4, ENABLE); 
/* NVIC Configuration */ 
/* Enable the TIM4_IRQn Interrupt */ 
NVIC_InitStructure.NVIC_IRQChannel = TIM4_IRQn; 
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 
0

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 
0

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; 
NVIC_Init(&NVIC_InitStructure); 
while(
1


// В главном цикле делаем что хотим
.


Теперь в главном цикле можем делать что нам надо, а светодиод будет 
переключаться по таймеру. 


Достарыңызбен бөлісу:
1   2   3




©engime.org 2024
әкімшілігінің қараңыз

    Басты бет