Вы находитесь на странице: 1из 2

#include "cmsis_lib/include/stm32f30x_gpio.

h"
#include "cmsis_lib/include/stm32f30x_rcc.h"
#include "cmsis_lib/include/stm32f30x_usart.h"

void delay_s(int s)
{
RCC -> APB1ENR |= 0x1 << 4; //TIM6
TIM6 -> PSC = 36000-1;
TIM6 -> ARR = (s*2000-1);
TIM6 -> CNT = 0;
TIM6 -> EGR |= 0x1;
TIM6 -> SR &= ~(0x1);
TIM6 -> CR1 |= 0x1; //Vkluci tajmerot
while((TIM6 -> SR & 0x1) == 0);
TIM6 -> SR &= ~(0x1);
TIM6 -> CR1 &= ~(0x1);
RCC -> APB1ENR &= ~(0x1 << 4); //Iskluci clock za TIM6
}

void EXTI1_IRQHandler() //Interrupt handler za EXTI1


{
GPIOE -> ODR |= (0x1 << 8);
GPIOB -> ODR |= 0x1;
delay_s(3);
GPIOE -> ODR &= ~(0x1 << 8);
GPIOB -> ODR &= ~(0x1);

EXTI -> PR |= (0x1 << 1); //Resetiraj pending bit za EXTI1 interrupt-ot
}

void EXTI0_IRQHandler() //Interrupt handler za EXTI0


{
GPIOE -> ODR &= ~(0x1 << 8);
GPIOB -> ODR &= ~(0x1);

EXTI -> PR |= 0x1; //Resetiraj pending bit za EXTI0 interrupt-ot


}

//PB0 relay signal


//PortA0 motion sensor
int main(void)
{
RCC -> AHBENR |= (0x1 << 19); //Bit 19 IOPCEN: I/O port C clock enable
GPIOC -> MODER &= ~(0x3); // PortC input mode
RCC -> AHBENR |= (0x1 << 18); //Bit 21 IOPFEN: I/O port B clock enable
GPIOB -> MODER |= (0x1);

RCC -> AHBENR |= (0x1 << 21);


GPIOE -> MODER |= (0x1 << 16);

//motion sensor:
RCC -> AHBENR |= (0x1 << 17); //PortA
GPIOA -> MODER &= ~(0x3 << 2); //PA1
//motion sensor INTERRUPT
RCC -> APB2ENR |= 0x1; //SYSCFGR
SYSCFG -> EXTICR[0] &= ~(0x7 << 4); //Mapiranje na PA1 na linija EXTI1
EXTI -> IMR |= (0x1 << 1); //Postavi linija EXTI1 kako not masked
EXTI -> RTSR |= (0x1 << 1); //Postavi aktivna ivica na rastecka
SCB -> AIRCR = 0x05FA0000 | (0x5 << 8); //2 bita group, 2 bita sub priority
NVIC -> IP[7] = 0xA << 4; //1010b = (2,2) prioritet
NVIC -> ISER[0] |= (0x1 << 7); //Ovozmozi go interrupt EXTI1

//kopce
GPIOA -> MODER &= ~(0x3); //PA0 input
GPIOA -> OSPEEDR |= 0x3; //Postavuvanje na brzinata na pin PA0 (Button B1) na
high speed
GPIOA -> PUPDR |= 0x2; //pull-down
//kopce INTERRUPT
SYSCFG -> EXTICR[0] &= ~(0x7); //Mapiranje na PA0 na linija EXTI0
EXTI -> IMR |= (0x1); //Postavi linija EXTI0 kako not masked
EXTI -> RTSR |= (0x1); //Postavi aktivna ivica na rastecka
NVIC -> IP[6] = 0x5 << 4; // 0101 = (1,1) prioritet
NVIC -> ISER[0] |= (0x1 << 6);

while(1)
{
}
}

Вам также может понравиться