Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "stm32f4xx.h" /* tilz0R: HSE_VALUE je bil popravljen na 8000000 */
- #include "STM32F4_Discovery.h"
- #include <stm32f4xx_tim.h>
- #include <stm32f4xx_rtc.h>
- #define LEDS_GPIO_CLK RCC_AHB1Periph_GPIOD //v knjižnici e nekaj shranjeno pod imeno RCC_AHB1... mi damo svoje ime LED...
- #define RED_LED GPIO_Pin_14 //imena so pobrana izknjižnic,tako so definirani pini
- #define BLUE_LED GPIO_Pin_15
- #define ORANGE_LED GPIO_Pin_13
- #define GREEN_LED GPIO_Pin_12
- #define USER_BUTTON GPIO_Pin_0 //ime USER_BUTTON povežemo z pinom 0
- #define ALL_EXTERNAL_LEDS (RED_LED | BLUE_LED | ORANGE_LED | GREEN_LED); //vsa imena shranimo v eno skupno spremenljivko
- #define LEDS_GPIO_PORT GPIOD
- #define USER_BUTTON_PORT GPIOA //definicija za gumb
- #define USER_BUTTON_CLK RCC_AHB1Periph_GPIOA //definicija da enablamo uro na portu A kjer je gumb
- uint64_t TimerOverflow;
- void Delayms(uint64_t ticks) //simulacija delay funkcije
- {
- /* tilz0R: spremenjen delay */
- TimerOverflow = 0;
- while(ticks > TimerOverflow);
- }
- void TIM7_IRQHandler(void)
- {
- if(TIM_GetITStatus(TIM7, TIM_IT_Update) != RESET)
- {
- GPIO_ToggleBits(GPIOD, RED_LED);
- TimerOverflow++;
- TIM_ClearITPendingBit(TIM7, TIM_IT_Update);
- }
- }
- void EXTI0_IRQHandler(void) {
- if (EXTI_GetITStatus(EXTI_Line0) != RESET) {
- GPIO_ToggleBits(GPIOD, BLUE_LED);
- EXTI_ClearITPendingBit(EXTI_Line0);
- }
- }
- int main(void) {
- RCC_AHB1PeriphClockCmd (LEDS_GPIO_CLK, ENABLE); //na portu D enablamo uro
- RCC_AHB1PeriphClockCmd (USER_BUTTON_CLK, ENABLE); //enablamo uro na portu kjer je gumb
- GPIO_InitTypeDef GPIO_InitStructure; //ocitno s tem komaj dolocimo, da lahko uporabljamo tiste funkcije
- GPIO_InitStructure.GPIO_Pin = ALL_EXTERNAL_LEDS;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
- GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
- GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
- GPIO_Init(LEDS_GPIO_PORT, &GPIO_InitStructure);
- GPIO_InitStructure.GPIO_Pin = USER_BUTTON; //inicializacija vhodne tipke
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
- GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
- GPIO_Init(USER_BUTTON_PORT, &GPIO_InitStructure);
- //----------------INICIALIZACIJA PREKINITVE-----------------------
- SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA, EXTI_PinSource0); //bi znali biti problemi z imeni porta
- EXTI_InitTypeDef EXTI_InitStructure;
- EXTI_InitStructure.EXTI_Line = EXTI_Line0;
- EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
- EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
- EXTI_InitStructure.EXTI_LineCmd = ENABLE;
- EXTI_Init(&EXTI_InitStructure); //ta vrstica spremeni vredost v registru
- NVIC_InitTypeDef NVIC_InitStructure;
- NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x01;
- NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x01;
- NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
- NVIC_Init(&NVIC_InitStructure);
- //------------------------INICIALIZACIJA CASOVNIKA--------------------
- RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM7, ENABLE);
- TIM_TimeBaseInitTypeDef TIM_Time_Base_Structure;
- RCC_ClocksTypeDef RCC_Clocks;
- /* tilz0R: Najprej je treba prebrati vrednosti, da bo RCC_Clocks postala veljavna! */
- RCC_GetClocksFreq(&RCC_Clocks);
- /* tilz0R starts */
- /*
- * PCLK1 = 42MHz, tvoj timer dela z frekvenco 84MHz
- *
- * Ti bi rad imel 1ms interrupte, torej mora biti prescaler * perioda = 84k
- *
- * Lahko narediš: prescaler = 84
- * Perioda = 1000
- *
- * */
- /* tilz0R ends */
- TIM_Time_Base_Structure.TIM_Period = 1000 - 1;
- TIM_Time_Base_Structure.TIM_Prescaler = 84 - 1;
- TIM_Time_Base_Structure.TIM_ClockDivision = TIM_CKD_DIV1;
- TIM_Time_Base_Structure.TIM_CounterMode = TIM_CounterMode_Up;
- TIM_TimeBaseInit(TIM7, &TIM_Time_Base_Structure);
- TIM_Cmd(TIM7, ENABLE);
- //--------------------------DOLOCITEV, DA TIM7 IZVAJA INTERRRUPT------------
- NVIC_InitStructure.NVIC_IRQChannel = TIM7_IRQn;
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
- NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
- NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
- NVIC_Init(&NVIC_InitStructure);
- TIM_ITConfig(TIM7, TIM_IT_Update, ENABLE);
- while(1) {
- GPIO_ToggleBits(LEDS_GPIO_PORT, GREEN_LED); //togla izhod
- Delayms(1000);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement