Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* Includes */
- #include <stddef.h>
- #include "stm32f10x.h"
- #include "stm32f10x_rcc.h"
- #include "stm32f10x_gpio.h"
- #include "stm32f10x_tim.h"
- volatile uint32_t millis;
- void initGPIO(void);
- void initTimer(void);
- void SysTick_Handler(void);
- void wait(uint32_t time);
- void led(int32_t br);
- int main(void) {
- //Varijabla u svrhu brojača
- volatile int32_t br=0;
- //Varijable u svrhu kontrole stanja tipkala
- volatile uint32_t con1=0,con2=0;
- //inizijalizacija
- initGPIO();
- initTimer();
- SysTick_Config(SystemCoreClock / 1000); // 1 ms
- //ciklicko ponavljanje
- led(br);
- while(1){
- con1 = GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_5);
- //Čitanje ulaza s tipkala spojena na pin B6
- con2 = GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_6);
- //Provjeravanje da li je tipkalo na pinu B5 stisnuto
- if(con2==1 && con1==0){
- //Povećavanje brojača
- br++;
- //Provjera da li je brojač veći od devet ako je vrati ga na nulu
- if(br>9) br=0;
- //Provjeravanje da li je tipkalo na pinu B6 stisnuto
- }else if(con1==1 && con2==0){
- //Smanjivanje brojača
- br--;
- //Provjera da li je brojač manji od 0 ako je vrati ga na devet
- if(br<0) br=9;
- }
- //Pozivanja funkcije led da bi se pokazalo trenutno stanje brojača
- led(br);
- wait(1000);
- }
- }
- void initGPIO(void) {
- //Deklariranje strukture
- GPIO_InitTypeDef GPIO_InitStructure;
- //Omogućuje pinove GPIOA i GPIOB
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
- //Inicijalizacija izlaznih pinova
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_12 | GPIO_Pin_11 | GPIO_Pin_10;
- //Postavljanje pinova od A0 do A3 te A10 do A12 da budu izlazni
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
- //Postavljanje brzine promjene logičke '0' u logičku '1'
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
- //Definiranje da se radi o pinovima s oznakom A
- GPIO_Init(GPIOA, &GPIO_InitStructure);
- //Inicijalizacija ulaznih pinova
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7;
- //Postavljanje pinova B5 i B6 da budu ulazni
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
- //Postavljanje brzine promjene logičke '0' u logičku '1'
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
- //Definiranje da se radi o pinovima s oznakom B
- GPIO_Init(GPIOB, &GPIO_InitStructure);
- }
- void initTimer(void) {
- TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;
- RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
- //inicijalizacija timera
- TIM_TimeBaseStructInit(&TIM_TimeBaseInitStruct);
- TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up;
- TIM_TimeBaseInitStruct.TIM_Period = 1000 - 1;
- TIM_TimeBaseInitStruct.TIM_Prescaler = SystemCoreClock / 100000 - 1; //100kHz
- TIM_TimeBaseInitStruct.TIM_ClockDivision = TIM_CKD_DIV1; //null
- TIM_TimeBaseInitStruct.TIM_RepetitionCounter = 0; //null
- TIM_TimeBaseInit(TIM2, &TIM_TimeBaseInitStruct);
- TIM_Cmd(TIM2, ENABLE);
- }
- void wait(uint32_t time) {
- millis = time;
- while(millis > 0);
- }
- void SysTick_Handler(void) {
- if(millis > 0) {
- millis--;
- }
- }
- void led(int32_t br){
- switch(br){
- case 0:
- GPIOA->BRR = GPIO_Pin_0;// LED PIN_0 ON
- GPIOA->BRR = GPIO_Pin_1;// LED PIN_1 ON
- GPIOA->BRR = GPIO_Pin_2;// LED PIN_2 ON
- GPIOA->BRR = GPIO_Pin_3;// LED PIN_3 ON
- GPIOA->BSRR = GPIO_Pin_10;// LED PIN_10 OFF
- GPIOA->BRR = GPIO_Pin_11;// LED PIN_11 ON
- GPIOA->BRR = GPIO_Pin_12;// LED PIN_12 ON
- break;
- case 1:
- GPIOA->BRR = GPIO_Pin_0;// LED PIN_0 ON
- GPIOA->BSRR = GPIO_Pin_1;// LED PIN_1 ON
- GPIOA->BSRR = GPIO_Pin_2;// LED PIN_2 OFF
- GPIOA->BRR = GPIO_Pin_3;// LED PIN_3 OFF
- GPIOA->BSRR = GPIO_Pin_10;// LED PIN_10 OFF
- GPIOA->BSRR = GPIO_Pin_11;// LED PIN_11 OFF
- GPIOA->BSRR = GPIO_Pin_12;// LED PIN_12 OFF
- break;
- case 2:
- GPIOA->BRR = GPIO_Pin_0;// LED PIN_0 ON
- GPIOA->BRR = GPIO_Pin_1;// LED PIN_1 OFF
- GPIOA->BRR = GPIO_Pin_2;// LED PIN_2 ON
- GPIOA->BSRR = GPIO_Pin_3;// LED PIN_3 ON
- GPIOA->BRR = GPIO_Pin_10;// LED PIN_10 ON
- GPIOA->BRR = GPIO_Pin_11;// LED PIN_11 ON
- GPIOA->BSRR = GPIO_Pin_12;// LED PIN_12 OFF
- break;
- case 3:
- GPIOA->BRR = GPIO_Pin_0;// LED PIN_0 ON
- GPIOA->BSRR = GPIO_Pin_1;// LED PIN_1 ON
- GPIOA->BRR = GPIO_Pin_2;// LED PIN_2 ON
- GPIOA->BRR = GPIO_Pin_3;// LED PIN_3 OFF
- GPIOA->BRR = GPIO_Pin_10;// LED PIN_10 ON
- GPIOA->BRR = GPIO_Pin_11;// LED PIN_11 ON
- GPIOA->BSRR = GPIO_Pin_12;// LED PIN_12 OFF
- break;
- case 4:
- GPIOA->BRR = GPIO_Pin_0;// LED PIN_0 ON
- GPIOA->BSRR = GPIO_Pin_1;// LED PIN_1 ON
- GPIOA->BSRR = GPIO_Pin_2;// LED PIN_2 OFF
- GPIOA->BRR = GPIO_Pin_3;// LED PIN_3 OFF
- GPIOA->BRR = GPIO_Pin_10;// LED PIN_10 ON
- GPIOA->BSRR = GPIO_Pin_11;// LED PIN_11 OFF
- GPIOA->BRR = GPIO_Pin_12;// LED PIN_12 ON
- break;
- case 5:
- GPIOA->BSRR = GPIO_Pin_0;// LED PIN_0 OFF
- GPIOA->BSRR = GPIO_Pin_1;// LED PIN_1 ON
- GPIOA->BRR = GPIO_Pin_2;// LED PIN_2 ON
- GPIOA->BRR = GPIO_Pin_3;// LED PIN_3 OFF
- GPIOA->BRR = GPIO_Pin_10;// LED PIN_10 ON
- GPIOA->BRR = GPIO_Pin_11;// LED PIN_11 ON
- GPIOA->BRR = GPIO_Pin_12;// LED PIN_12 ON
- break;
- case 6:
- GPIOA->BSRR = GPIO_Pin_0;// LED PIN_0 OFF
- GPIOA->BRR = GPIO_Pin_1;// LED PIN_1 ON
- GPIOA->BRR = GPIO_Pin_2;// LED PIN_2 ON
- GPIOA->BRR = GPIO_Pin_3;// LED PIN_3 ON
- GPIOA->BRR = GPIO_Pin_10;// LED PIN_10 ON
- GPIOA->BRR = GPIO_Pin_11;// LED PIN_11 ON
- GPIOA->BRR = GPIO_Pin_12;// LED PIN_12 ON
- break;
- case 7:
- GPIOA->BRR = GPIO_Pin_0;// LED PIN_0 ON
- GPIOA->BSRR = GPIO_Pin_1;// LED PIN_1 ON
- GPIOA->BSRR = GPIO_Pin_2;// LED PIN_2 OFF
- GPIOA->BRR = GPIO_Pin_3;// LED PIN_3 OFF
- GPIOA->BSRR = GPIO_Pin_10;// LED PIN_10 OFF
- GPIOA->BRR = GPIO_Pin_11;// LED PIN_11 ON
- GPIOA->BRR = GPIO_Pin_12;// LED PIN_12 ON
- break;
- case 8:
- GPIOA->BRR = GPIO_Pin_0;// LED PIN_0 ON
- GPIOA->BRR = GPIO_Pin_1;// LED PIN_1 ON
- GPIOA->BRR = GPIO_Pin_2;// LED PIN_2 ON
- GPIOA->BRR = GPIO_Pin_3;// LED PIN_3 ON
- GPIOA->BRR = GPIO_Pin_10;// LED PIN_10 ON
- GPIOA->BRR = GPIO_Pin_11;// LED PIN_11 ON
- GPIOA->BRR = GPIO_Pin_12;// LED PIN_12 ON
- break;
- case 9:
- GPIOA->BRR = GPIO_Pin_0;// LED PIN_0 ON
- GPIOA->BSRR = GPIO_Pin_1;// LED PIN_1 ON
- GPIOA->BRR = GPIO_Pin_2;// LED PIN_2 ON
- GPIOA->BRR = GPIO_Pin_3;// LED PIN_3 OFF
- GPIOA->BRR = GPIO_Pin_10;// LED PIN_10 ON
- GPIOA->BRR = GPIO_Pin_11;// LED PIN_11 ON
- GPIOA->BRR = GPIO_Pin_12;// LED PIN_12 ON
- break;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement