Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "stm32f10x.h"
- #include "stm32f10x_exti.h"
- #define SysTick_Frequency 9000000 //9MHz
- volatile unsigned long counter = 0;
- int mode = 2;
- int frequency = 25000;
- void NVIC_Config(void);
- void NVIC_ConfigUp(void);
- void NVIC_ConfigDown(void);
- void NVIC_ConfigLow(void);
- void NVIC_ConfigHigh(void);
- void RCC_Config(void) {//konfigurowanie sygnalow taktujacych
- ErrorStatus HSEStartUpStatus; //zmienna opisujaca rezultat uruchomienia HSE
- RCC_DeInit(); //Reset ustawien RCC
- RCC_HSEConfig(RCC_HSE_ON); //Wlaczenie HSE
- HSEStartUpStatus = RCC_WaitForHSEStartUp(); //Odczekaj az HSE bedzie gotowy
- if (HSEStartUpStatus == SUCCESS) {
- FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); //
- FLASH_SetLatency(FLASH_Latency_2);
- RCC_HCLKConfig(RCC_SYSCLK_Div1); //ustaw HCLK=SYSCLK
- RCC_PCLK2Config(RCC_HCLK_Div1); //ustaw PCLK2=HCLK
- RCC_PCLK1Config(RCC_HCLK_Div2); //ustaw PCLK1=HCLK/2
- RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9); //ustaw PLLCLK = HSE*9 czyli 8MHz * 9 = 72MHz
- RCC_PLLCmd(ENABLE); //wlacz PLL
- while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET); //odczekaj na poprawne uruchomienie PLL
- RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); //ustaw PLL jako zrodlo sygnalu zegarowego
- while (RCC_GetSYSCLKSource() != 0x08); //odczekaj az PLL bedzie sygnalem zegarowym systemu
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE);
- }
- }
- void GPIO_Config(void) {
- GPIO_InitTypeDef GPIO_InitStructure;
- GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 |
- GPIO_Pin_5;
- GPIO_Init(GPIOA, & GPIO_InitStructure);
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 |
- GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;
- GPIO_Init(GPIOB, & GPIO_InitStructure);
- }
- uint8_t button_state = 0xFF, temp = 0, port_data;
- int przycisk, joyLeft, joyRight;
- void changeState() {
- if (mode == 3) {
- mode = 1;
- } else {
- mode++;
- }
- }
- void changeFrequency(int val) {
- frequency += val;
- if (frequency < 1000)
- frequency = 1000;
- else if (frequency > 4000) {
- frequency = 4000;
- }
- }
- int main(void)
- //konfiguracja systemu
- {
- RCC_Config();
- GPIO_Config();
- NVIC_ConfigHigh();
- NVIC_ConfigLow();
- while (1) {
- /*Tu nalezy umiescic glowny kod programu*/
- };
- return 0;
- }
- void NVIC_ConfigHigh(void) {
- //Konfigurowanie kontrolera przerwan NVIC
- NVIC_InitTypeDef NVIC_InitStructure;
- EXTI_InitTypeDef EXTI_InitStructure;
- #ifdef VECT_TAB_RAM
- // Jezeli tablica wektorow w RAM, to ustaw jej adres na 0x2000000 0
- NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);
- #else // VECT_TAB_FLASH
- // W przeciwnym wypadku ustaw na 0x08000000
- NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);
- #endif
- //Konfiguracja NVIC - ustawienia priorytetow przerwania EXTI 0
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1); //Wybo r modelu grupowania przerwan
- NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn; //Wybo r konfigurowanego IRQ
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //Prioryte t grupowy
- NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
- //Podpriorytet
- NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //Wlaczeni e obslugi IRQ
- NVIC_Init( & NVIC_InitStructure);
- GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0); //Ustawieni e zrodla przerwania
- //Konfiguracja przerwania EXTI0 na linie 0
- EXTI_InitStructure.EXTI_Line = EXTI_Line0; //Wybo r linii
- EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; //Ustawieni e generowania przerwania(a nie zdarzenia)
- EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; //Wyzwalani e zboczem opadajacym(wcisniecie przycisku)
- EXTI_InitStructure.EXTI_LineCmd = ENABLE; //Wlaczeni e przerwania
- EXTI_Init( & EXTI_InitStructure);
- }
- void NVIC_ConfigLow(void) {
- NVIC_InitTypeDef NVIC_InitStructure;
- EXTI_InitTypeDef EXTI_InitStructure;
- NVIC_InitStructure.NVIC_IRQChannel = EXTI1_IRQn; //Wybo r konfigurowanego IRQ
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; //Prioryte t grupowy
- NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
- //Podpriorytet
- NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //Wlaczeni e obslugi IRQ
- NVIC_Init( & NVIC_InitStructure);
- GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource1); //Ustawieni e zrodla przerwania
- //Konfiguracja przerwania EXTI0 na linie 0
- EXTI_InitStructure.EXTI_Line = EXTI_Line1; //Wybo r linii
- EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; //Ustawienie generowania przerwania(a nie zdarzenia)
- EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; //Wyzwalanie zboczem opadajacym(wcisniecie przycisku)
- EXTI_InitStructure.EXTI_LineCmd = ENABLE;
- EXTI_Init( & EXTI_InitStructure);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement