Skocz do zawartości

argens

Użytkownicy
  • Zawartość

    4
  • Rejestracja

  • Ostatnio

Informacje

  • Płeć
    Mężczyzna
  • Lokalizacja
    Herford
  • Zawód
    Elektronik
  • Moje zainteresowania:
    modele RC

Ostatnio na profilu byli

Blok z ostatnio odwiedzającymi jest wyłączony i nie jest wyświetlany innym użytkownikom.

Osiągnięcia użytkownika argens

Młodszy odkrywca

Młodszy odkrywca (3/19)

  • To już rok!
  • To już 5 lat!

Odznaki

1

Reputacja

  1. Włącza diodę, jeśli pada za mało światła na fotorezystor. #include "stm32f10x.h" #include <stdio.h> void send_char(char c) { while (USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET); USART_SendData(USART2, c); } int __io_putchar(int c) { if (c=='\n') send_char('\r'); send_char(c); return c; } int main(void) { GPIO_InitTypeDef gpio; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE); GPIO_StructInit(&gpio); gpio.GPIO_Pin = GPIO_Pin_0; gpio.GPIO_Mode = GPIO_Mode_AIN; GPIO_Init(GPIOA, &gpio); gpio.GPIO_Pin = GPIO_Pin_2; gpio.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_Init(GPIOA, &gpio); gpio.GPIO_Pin = GPIO_Pin_3; gpio.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOA, &gpio); gpio.GPIO_Pin = GPIO_Pin_13; gpio.GPIO_Mode = GPIO_Mode_IPU; GPIO_Init(GPIOC, &gpio); GPIO_StructInit(&gpio); gpio.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_Pin_8|GPIO_Pin_9; gpio.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOC, &gpio); USART_InitTypeDef uart; USART_StructInit(&uart); uart.USART_BaudRate = 115200; USART_Init(USART2, &uart); USART_Cmd(USART2, ENABLE); ADC_InitTypeDef adc; RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE); RCC_ADCCLKConfig(RCC_PCLK2_Div6); //dzielnik napiecia, zeby zegar (64 MHz) zmniejszyc ponizej 14 MHz) ADC_StructInit(&adc); adc.ADC_ContinuousConvMode = ENABLE; adc.ADC_NbrOfChannel = 1; adc.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; ADC_Init(ADC1, &adc); ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_71Cycles5); //Ustawienie kanalu wejsciowego (kanal 0 multipleksera) ADC_Cmd(ADC1, ENABLE); ADC_ResetCalibration(ADC1); //autokalibracja przetwornika while (ADC_GetResetCalibrationStatus(ADC1)); ADC_StartCalibration(ADC1); while (ADC_GetCalibrationStatus(ADC1)); ADC_TempSensorVrefintCmd(ENABLE); //wlaczenie napiecia referencyjnego ADC_SoftwareStartConvCmd(ADC1, ENABLE); while (1) { uint16_t adc = ADC_GetConversionValue(ADC1); //wyslanie wyniku po UART printf("Adc = %d (%.3fV)\r\n", adc, adc * 3.3f / 4096.0f); if (adc <= 3000) //wlacza diode, jesli za malo swiatla pada { GPIO_SetBits(GPIOC, GPIO_Pin_0); } else { GPIO_ResetBits(GPIOC, GPIO_Pin_0); } } }
  2. Zad 8.1 #include <stdio.h> #include <stdint.h> #include <string.h> #include "stm32f10x.h" #define BUFFER_SIZE 32 uint8_t src_buffer[BUFFER_SIZE]; uint8_t dst_buffer[BUFFER_SIZE]; /*---------------------------------------------------------------*/ void copy_cpu() { int i; for (i = 0; i < BUFFER_SIZE;i++) dst_buffer[i] = src_buffer[i]; } void copy_dma() { DMA_Cmd(DMA1_Channel1, ENABLE); while (DMA_GetFlagStatus(DMA1_FLAG_TC1) == RESET); } /*---------------------------------------------------------------*/ void send_char(char c) { while (USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET); USART_SendData(USART2, c); } int __io_putchar(int c) { if (c=='\n') send_char('\r'); send_char(c); return c; } int main(void) { USART_InitTypeDef uart; GPIO_InitTypeDef gpio; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD, ENABLE); RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE); GPIO_StructInit(&gpio); gpio.GPIO_Pin = GPIO_Pin_2; gpio.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_Init(GPIOA, &gpio); gpio.GPIO_Pin = GPIO_Pin_3; gpio.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOA, &gpio); USART_StructInit(&uart); uart.USART_BaudRate = 115200; USART_Init(USART2, &uart); USART_Cmd(USART2, ENABLE); int i; DMA_InitTypeDef dma; DMA_StructInit(&dma); dma.DMA_PeripheralBaseAddr = (uint32_t)src_buffer; dma.DMA_PeripheralInc = DMA_PeripheralInc_Enable; dma.DMA_MemoryBaseAddr = (uint32_t)dst_buffer; dma.DMA_MemoryInc = DMA_MemoryInc_Enable; dma.DMA_BufferSize = BUFFER_SIZE; dma.DMA_M2M = DMA_M2M_Enable; DMA_Init(DMA1_Channel1, &dma); // wypelniamy bufor przykladowymi danymi for (i = 0; i < BUFFER_SIZE; i++) src_buffer[i] = 100 + i; //copy_cpu(); copy_dma(); printf("Hello World!\n"); if(strncmp ((const char*)src_buffer, (const char*)dst_buffer, BUFFER_SIZE) == 0) { printf("ALL OK\n"); } else { printf("try again\n"); } while(1) { } }
  3. Tutaj moja odpowiedź na zadanie 4.3 Ale z tego, co widzę, to i tak nikt już tutaj nie zagląda :/. #include "stm32f10x.h" int button = 0; volatile uint32_t timer_ms = 0; void SysTick_Handler() { if (timer_ms) { timer_ms--; } } void delay_ms(int time) { timer_ms = time; while (timer_ms) {}; } int main(void) { GPIO_InitTypeDef gpio; EXTI_InitTypeDef exti; NVIC_InitTypeDef nvic; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOC, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); gpio.GPIO_Pin = GPIO_Pin_13; gpio.GPIO_Mode = GPIO_Mode_IPU; GPIO_Init(GPIOC, &gpio); GPIO_StructInit(&gpio); gpio.GPIO_Pin = GPIO_Pin_5; gpio.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOA, &gpio); GPIO_StructInit(&gpio); gpio.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_Pin_8|GPIO_Pin_9; gpio.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOC, &gpio); GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource13); EXTI_StructInit(&exti); exti.EXTI_Line = EXTI_Line13; exti.EXTI_Mode = EXTI_Mode_Interrupt; exti.EXTI_Trigger = EXTI_Trigger_Rising_Falling; exti.EXTI_LineCmd = ENABLE; EXTI_Init(&exti); nvic.NVIC_IRQChannel = EXTI15_10_IRQn; nvic.NVIC_IRQChannelPreemptionPriority = 0x00; nvic.NVIC_IRQChannelSubPriority = 0x00; nvic.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&nvic); SysTick_Config(SystemCoreClock / 1000); uint32_t led = 0; while (1) { GPIO_SetBits(GPIOC, 1 << led); delay_ms(150); GPIO_ResetBits(GPIOC, 1 << led); if (++led >= 10) { led = 0; } } } void EXTI15_10_IRQHandler() { if (EXTI_GetITStatus(EXTI_Line13)) { if (GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_13) == 0) { GPIO_SetBits(GPIOA, GPIO_Pin_5); // zapalenie diody } if (GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_13) == 1) { GPIO_ResetBits(GPIOA, GPIO_Pin_5); // zgaszenie diody } EXTI_ClearITPendingBit(EXTI_Line13); } } /**********************************************************************/ [ Dodano: 29-11-2015, 20:20 ] Zadanie 4.4 rozwiązałem "łopatologicznie" raz jako zwykła pętla a raz przycisk (przerwanie): #include "stm32f10x.h" int button = 0; volatile uint32_t timer_ms = 0; void SysTick_Handler() { if (timer_ms) { timer_ms--; } } void delay_ms(int time) { timer_ms = time; while (timer_ms) {}; } int main(void) { GPIO_InitTypeDef gpio; EXTI_InitTypeDef exti; NVIC_InitTypeDef nvic; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOC, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); gpio.GPIO_Pin = GPIO_Pin_13; gpio.GPIO_Mode = GPIO_Mode_IPU; GPIO_Init(GPIOC, &gpio); GPIO_StructInit(&gpio); gpio.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_Pin_8|GPIO_Pin_9; gpio.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOC, &gpio); GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource13); EXTI_StructInit(&exti); exti.EXTI_Line = EXTI_Line13; exti.EXTI_Mode = EXTI_Mode_Interrupt; exti.EXTI_Trigger = EXTI_Trigger_Rising_Falling; exti.EXTI_LineCmd = ENABLE; EXTI_Init(&exti); nvic.NVIC_IRQChannel = EXTI15_10_IRQn; nvic.NVIC_IRQChannelPreemptionPriority = 0x00; nvic.NVIC_IRQChannelSubPriority = 0x00; nvic.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&nvic); // uint32_t led = 0; SysTick_Config(SystemCoreClock / 1000); while (1) { GPIO_SetBits(GPIOC, GPIO_Pin_0); //1 delay_ms(150); GPIO_ResetBits(GPIOC, GPIO_Pin_0); delay_ms(150); GPIO_SetBits(GPIOC, GPIO_Pin_0); //2 GPIO_SetBits(GPIOC, GPIO_Pin_1); delay_ms(150); GPIO_ResetBits(GPIOC, GPIO_Pin_0); GPIO_ResetBits(GPIOC, GPIO_Pin_1); delay_ms(150); GPIO_SetBits(GPIOC, GPIO_Pin_0); //3 GPIO_SetBits(GPIOC, GPIO_Pin_1); GPIO_SetBits(GPIOC, GPIO_Pin_2); delay_ms(150); GPIO_ResetBits(GPIOC, GPIO_Pin_0); GPIO_ResetBits(GPIOC, GPIO_Pin_1); GPIO_ResetBits(GPIOC, GPIO_Pin_2); delay_ms(150); GPIO_SetBits(GPIOC, GPIO_Pin_0); //4 GPIO_SetBits(GPIOC, GPIO_Pin_1); GPIO_SetBits(GPIOC, GPIO_Pin_2); GPIO_SetBits(GPIOC, GPIO_Pin_3); delay_ms(150); GPIO_ResetBits(GPIOC, GPIO_Pin_0); GPIO_ResetBits(GPIOC, GPIO_Pin_1); GPIO_ResetBits(GPIOC, GPIO_Pin_2); GPIO_ResetBits(GPIOC, GPIO_Pin_3); delay_ms(150); GPIO_SetBits(GPIOC, GPIO_Pin_0); //5 GPIO_SetBits(GPIOC, GPIO_Pin_1); GPIO_SetBits(GPIOC, GPIO_Pin_2); GPIO_SetBits(GPIOC, GPIO_Pin_3); GPIO_SetBits(GPIOC, GPIO_Pin_4); delay_ms(150); GPIO_ResetBits(GPIOC, GPIO_Pin_0); GPIO_ResetBits(GPIOC, GPIO_Pin_1); GPIO_ResetBits(GPIOC, GPIO_Pin_2); GPIO_ResetBits(GPIOC, GPIO_Pin_3); GPIO_ResetBits(GPIOC, GPIO_Pin_4); delay_ms(150); GPIO_SetBits(GPIOC, GPIO_Pin_0); //6 GPIO_SetBits(GPIOC, GPIO_Pin_1); GPIO_SetBits(GPIOC, GPIO_Pin_2); GPIO_SetBits(GPIOC, GPIO_Pin_3); GPIO_SetBits(GPIOC, GPIO_Pin_4); GPIO_SetBits(GPIOC, GPIO_Pin_5); delay_ms(150); GPIO_ResetBits(GPIOC, GPIO_Pin_0); GPIO_ResetBits(GPIOC, GPIO_Pin_1); GPIO_ResetBits(GPIOC, GPIO_Pin_2); GPIO_ResetBits(GPIOC, GPIO_Pin_3); GPIO_ResetBits(GPIOC, GPIO_Pin_4); GPIO_ResetBits(GPIOC, GPIO_Pin_5); delay_ms(150); GPIO_SetBits(GPIOC, GPIO_Pin_0); //7 GPIO_SetBits(GPIOC, GPIO_Pin_1); GPIO_SetBits(GPIOC, GPIO_Pin_2); GPIO_SetBits(GPIOC, GPIO_Pin_3); GPIO_SetBits(GPIOC, GPIO_Pin_4); GPIO_SetBits(GPIOC, GPIO_Pin_5); GPIO_SetBits(GPIOC, GPIO_Pin_6); delay_ms(150); GPIO_ResetBits(GPIOC, GPIO_Pin_0); GPIO_ResetBits(GPIOC, GPIO_Pin_1); GPIO_ResetBits(GPIOC, GPIO_Pin_2); GPIO_ResetBits(GPIOC, GPIO_Pin_3); GPIO_ResetBits(GPIOC, GPIO_Pin_4); GPIO_ResetBits(GPIOC, GPIO_Pin_5); GPIO_ResetBits(GPIOC, GPIO_Pin_6); delay_ms(150); GPIO_SetBits(GPIOC, GPIO_Pin_0); //8 GPIO_SetBits(GPIOC, GPIO_Pin_1); GPIO_SetBits(GPIOC, GPIO_Pin_2); GPIO_SetBits(GPIOC, GPIO_Pin_3); GPIO_SetBits(GPIOC, GPIO_Pin_4); GPIO_SetBits(GPIOC, GPIO_Pin_5); GPIO_SetBits(GPIOC, GPIO_Pin_6); GPIO_SetBits(GPIOC, GPIO_Pin_7); delay_ms(150); GPIO_ResetBits(GPIOC, GPIO_Pin_0); GPIO_ResetBits(GPIOC, GPIO_Pin_1); GPIO_ResetBits(GPIOC, GPIO_Pin_2); GPIO_ResetBits(GPIOC, GPIO_Pin_3); GPIO_ResetBits(GPIOC, GPIO_Pin_4); GPIO_ResetBits(GPIOC, GPIO_Pin_5); GPIO_ResetBits(GPIOC, GPIO_Pin_6); GPIO_ResetBits(GPIOC, GPIO_Pin_7); delay_ms(150); GPIO_SetBits(GPIOC, GPIO_Pin_0); //9 GPIO_SetBits(GPIOC, GPIO_Pin_1); GPIO_SetBits(GPIOC, GPIO_Pin_2); GPIO_SetBits(GPIOC, GPIO_Pin_3); GPIO_SetBits(GPIOC, GPIO_Pin_4); GPIO_SetBits(GPIOC, GPIO_Pin_5); GPIO_SetBits(GPIOC, GPIO_Pin_6); GPIO_SetBits(GPIOC, GPIO_Pin_7); GPIO_SetBits(GPIOC, GPIO_Pin_8); delay_ms(150); GPIO_ResetBits(GPIOC, GPIO_Pin_0); GPIO_ResetBits(GPIOC, GPIO_Pin_1); GPIO_ResetBits(GPIOC, GPIO_Pin_2); GPIO_ResetBits(GPIOC, GPIO_Pin_3); GPIO_ResetBits(GPIOC, GPIO_Pin_4); GPIO_ResetBits(GPIOC, GPIO_Pin_5); GPIO_ResetBits(GPIOC, GPIO_Pin_6); GPIO_ResetBits(GPIOC, GPIO_Pin_7); GPIO_ResetBits(GPIOC, GPIO_Pin_8); delay_ms(150); GPIO_SetBits(GPIOC, GPIO_Pin_0); //10 GPIO_SetBits(GPIOC, GPIO_Pin_1); GPIO_SetBits(GPIOC, GPIO_Pin_2); GPIO_SetBits(GPIOC, GPIO_Pin_3); GPIO_SetBits(GPIOC, GPIO_Pin_4); GPIO_SetBits(GPIOC, GPIO_Pin_5); GPIO_SetBits(GPIOC, GPIO_Pin_6); GPIO_SetBits(GPIOC, GPIO_Pin_7); GPIO_SetBits(GPIOC, GPIO_Pin_8); GPIO_SetBits(GPIOC, GPIO_Pin_9); delay_ms(150); GPIO_ResetBits(GPIOC, GPIO_Pin_0); GPIO_ResetBits(GPIOC, GPIO_Pin_1); GPIO_ResetBits(GPIOC, GPIO_Pin_2); GPIO_ResetBits(GPIOC, GPIO_Pin_3); GPIO_ResetBits(GPIOC, GPIO_Pin_4); GPIO_ResetBits(GPIOC, GPIO_Pin_5); GPIO_ResetBits(GPIOC, GPIO_Pin_6); GPIO_ResetBits(GPIOC, GPIO_Pin_7); GPIO_ResetBits(GPIOC, GPIO_Pin_8); GPIO_ResetBits(GPIOC, GPIO_Pin_9); delay_ms(150); GPIO_SetBits(GPIOC, GPIO_Pin_1); //11 GPIO_SetBits(GPIOC, GPIO_Pin_2); GPIO_SetBits(GPIOC, GPIO_Pin_3); GPIO_SetBits(GPIOC, GPIO_Pin_4); GPIO_SetBits(GPIOC, GPIO_Pin_5); GPIO_SetBits(GPIOC, GPIO_Pin_6); GPIO_SetBits(GPIOC, GPIO_Pin_7); GPIO_SetBits(GPIOC, GPIO_Pin_8); GPIO_SetBits(GPIOC, GPIO_Pin_9); delay_ms(150); GPIO_ResetBits(GPIOC, GPIO_Pin_1); GPIO_ResetBits(GPIOC, GPIO_Pin_2); GPIO_ResetBits(GPIOC, GPIO_Pin_3); GPIO_ResetBits(GPIOC, GPIO_Pin_4); GPIO_ResetBits(GPIOC, GPIO_Pin_5); GPIO_ResetBits(GPIOC, GPIO_Pin_6); GPIO_ResetBits(GPIOC, GPIO_Pin_7); GPIO_ResetBits(GPIOC, GPIO_Pin_8); GPIO_ResetBits(GPIOC, GPIO_Pin_9); delay_ms(150); GPIO_SetBits(GPIOC, GPIO_Pin_2); //12 GPIO_SetBits(GPIOC, GPIO_Pin_3); GPIO_SetBits(GPIOC, GPIO_Pin_4); GPIO_SetBits(GPIOC, GPIO_Pin_5); GPIO_SetBits(GPIOC, GPIO_Pin_6); GPIO_SetBits(GPIOC, GPIO_Pin_7); GPIO_SetBits(GPIOC, GPIO_Pin_8); GPIO_SetBits(GPIOC, GPIO_Pin_9); delay_ms(150); GPIO_ResetBits(GPIOC, GPIO_Pin_2); GPIO_ResetBits(GPIOC, GPIO_Pin_3); GPIO_ResetBits(GPIOC, GPIO_Pin_4); GPIO_ResetBits(GPIOC, GPIO_Pin_5); GPIO_ResetBits(GPIOC, GPIO_Pin_6); GPIO_ResetBits(GPIOC, GPIO_Pin_7); GPIO_ResetBits(GPIOC, GPIO_Pin_8); GPIO_ResetBits(GPIOC, GPIO_Pin_9); delay_ms(150); GPIO_SetBits(GPIOC, GPIO_Pin_3); //13 GPIO_SetBits(GPIOC, GPIO_Pin_4); GPIO_SetBits(GPIOC, GPIO_Pin_5); GPIO_SetBits(GPIOC, GPIO_Pin_6); GPIO_SetBits(GPIOC, GPIO_Pin_7); GPIO_SetBits(GPIOC, GPIO_Pin_8); GPIO_SetBits(GPIOC, GPIO_Pin_9); delay_ms(150); GPIO_ResetBits(GPIOC, GPIO_Pin_3); GPIO_ResetBits(GPIOC, GPIO_Pin_4); GPIO_ResetBits(GPIOC, GPIO_Pin_5); GPIO_ResetBits(GPIOC, GPIO_Pin_6); GPIO_ResetBits(GPIOC, GPIO_Pin_7); GPIO_ResetBits(GPIOC, GPIO_Pin_8); GPIO_ResetBits(GPIOC, GPIO_Pin_9); delay_ms(150); GPIO_SetBits(GPIOC, GPIO_Pin_4); //14 GPIO_SetBits(GPIOC, GPIO_Pin_5); GPIO_SetBits(GPIOC, GPIO_Pin_6); GPIO_SetBits(GPIOC, GPIO_Pin_7); GPIO_SetBits(GPIOC, GPIO_Pin_8); GPIO_SetBits(GPIOC, GPIO_Pin_9); delay_ms(150); GPIO_ResetBits(GPIOC, GPIO_Pin_4); GPIO_ResetBits(GPIOC, GPIO_Pin_5); GPIO_ResetBits(GPIOC, GPIO_Pin_6); GPIO_ResetBits(GPIOC, GPIO_Pin_7); GPIO_ResetBits(GPIOC, GPIO_Pin_8); GPIO_ResetBits(GPIOC, GPIO_Pin_9); delay_ms(150); GPIO_SetBits(GPIOC, GPIO_Pin_5); //15 GPIO_SetBits(GPIOC, GPIO_Pin_6); GPIO_SetBits(GPIOC, GPIO_Pin_7); GPIO_SetBits(GPIOC, GPIO_Pin_8); GPIO_SetBits(GPIOC, GPIO_Pin_9); delay_ms(150); GPIO_ResetBits(GPIOC, GPIO_Pin_5); GPIO_ResetBits(GPIOC, GPIO_Pin_6); GPIO_ResetBits(GPIOC, GPIO_Pin_7); GPIO_ResetBits(GPIOC, GPIO_Pin_8); GPIO_ResetBits(GPIOC, GPIO_Pin_9); delay_ms(150); GPIO_SetBits(GPIOC, GPIO_Pin_6); //16 GPIO_SetBits(GPIOC, GPIO_Pin_7); GPIO_SetBits(GPIOC, GPIO_Pin_8); GPIO_SetBits(GPIOC, GPIO_Pin_9); delay_ms(150); GPIO_ResetBits(GPIOC, GPIO_Pin_6); GPIO_ResetBits(GPIOC, GPIO_Pin_7); GPIO_ResetBits(GPIOC, GPIO_Pin_8); GPIO_ResetBits(GPIOC, GPIO_Pin_9); delay_ms(150); GPIO_SetBits(GPIOC, GPIO_Pin_7); //17 GPIO_SetBits(GPIOC, GPIO_Pin_8); GPIO_SetBits(GPIOC, GPIO_Pin_9); delay_ms(150); GPIO_ResetBits(GPIOC, GPIO_Pin_7); GPIO_ResetBits(GPIOC, GPIO_Pin_8); GPIO_ResetBits(GPIOC, GPIO_Pin_9); delay_ms(150); GPIO_SetBits(GPIOC, GPIO_Pin_8); //18 GPIO_SetBits(GPIOC, GPIO_Pin_9); delay_ms(150); GPIO_ResetBits(GPIOC, GPIO_Pin_8); GPIO_ResetBits(GPIOC, GPIO_Pin_9); delay_ms(150); GPIO_SetBits(GPIOC, GPIO_Pin_9); //19 delay_ms(150); GPIO_ResetBits(GPIOC, GPIO_Pin_9); delay_ms(150); /* if (++led >= 10) { led = 0; }*/ } } void EXTI15_10_IRQHandler() { if (EXTI_GetITStatus(EXTI_Line13)) { button++; while (GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_13) == 0) { if (button == 1) { GPIO_SetBits(GPIOC, GPIO_Pin_0); } else if (button == 2) { GPIO_SetBits(GPIOC, GPIO_Pin_0); GPIO_SetBits(GPIOC, GPIO_Pin_1); } else if (button == 3) { GPIO_SetBits(GPIOC, GPIO_Pin_0); GPIO_SetBits(GPIOC, GPIO_Pin_1); GPIO_SetBits(GPIOC, GPIO_Pin_2); } else if (button == 4) { GPIO_SetBits(GPIOC, GPIO_Pin_0); GPIO_SetBits(GPIOC, GPIO_Pin_1); GPIO_SetBits(GPIOC, GPIO_Pin_2); GPIO_SetBits(GPIOC, GPIO_Pin_3); } else if (button == 5) { GPIO_SetBits(GPIOC, GPIO_Pin_0); GPIO_SetBits(GPIOC, GPIO_Pin_1); GPIO_SetBits(GPIOC, GPIO_Pin_2); GPIO_SetBits(GPIOC, GPIO_Pin_3); GPIO_SetBits(GPIOC, GPIO_Pin_4); } else if (button == 6) { GPIO_SetBits(GPIOC, GPIO_Pin_0); GPIO_SetBits(GPIOC, GPIO_Pin_1); GPIO_SetBits(GPIOC, GPIO_Pin_2); GPIO_SetBits(GPIOC, GPIO_Pin_3); GPIO_SetBits(GPIOC, GPIO_Pin_4); GPIO_SetBits(GPIOC, GPIO_Pin_5); } else if (button == 7) { GPIO_SetBits(GPIOC, GPIO_Pin_0); GPIO_SetBits(GPIOC, GPIO_Pin_1); GPIO_SetBits(GPIOC, GPIO_Pin_2); GPIO_SetBits(GPIOC, GPIO_Pin_3); GPIO_SetBits(GPIOC, GPIO_Pin_4); GPIO_SetBits(GPIOC, GPIO_Pin_5); GPIO_SetBits(GPIOC, GPIO_Pin_6); } else if (button == 8) { GPIO_SetBits(GPIOC, GPIO_Pin_0); GPIO_SetBits(GPIOC, GPIO_Pin_1); GPIO_SetBits(GPIOC, GPIO_Pin_2); GPIO_SetBits(GPIOC, GPIO_Pin_3); GPIO_SetBits(GPIOC, GPIO_Pin_4); GPIO_SetBits(GPIOC, GPIO_Pin_5); GPIO_SetBits(GPIOC, GPIO_Pin_6); GPIO_SetBits(GPIOC, GPIO_Pin_7); } else if (button == 9) { GPIO_SetBits(GPIOC, GPIO_Pin_0); GPIO_SetBits(GPIOC, GPIO_Pin_1); GPIO_SetBits(GPIOC, GPIO_Pin_2); GPIO_SetBits(GPIOC, GPIO_Pin_3); GPIO_SetBits(GPIOC, GPIO_Pin_4); GPIO_SetBits(GPIOC, GPIO_Pin_5); GPIO_SetBits(GPIOC, GPIO_Pin_6); GPIO_SetBits(GPIOC, GPIO_Pin_7); GPIO_SetBits(GPIOC, GPIO_Pin_8); } else if (button == 10) { GPIO_SetBits(GPIOC, GPIO_Pin_0); GPIO_SetBits(GPIOC, GPIO_Pin_1); GPIO_SetBits(GPIOC, GPIO_Pin_2); GPIO_SetBits(GPIOC, GPIO_Pin_3); GPIO_SetBits(GPIOC, GPIO_Pin_4); GPIO_SetBits(GPIOC, GPIO_Pin_5); GPIO_SetBits(GPIOC, GPIO_Pin_6); GPIO_SetBits(GPIOC, GPIO_Pin_7); GPIO_SetBits(GPIOC, GPIO_Pin_8); GPIO_SetBits(GPIOC, GPIO_Pin_9); } else if (button == 11) { GPIO_SetBits(GPIOC, GPIO_Pin_1); GPIO_SetBits(GPIOC, GPIO_Pin_2); GPIO_SetBits(GPIOC, GPIO_Pin_3); GPIO_SetBits(GPIOC, GPIO_Pin_4); GPIO_SetBits(GPIOC, GPIO_Pin_5); GPIO_SetBits(GPIOC, GPIO_Pin_6); GPIO_SetBits(GPIOC, GPIO_Pin_7); GPIO_SetBits(GPIOC, GPIO_Pin_8); GPIO_SetBits(GPIOC, GPIO_Pin_9); } else if (button == 12) { GPIO_SetBits(GPIOC, GPIO_Pin_2); GPIO_SetBits(GPIOC, GPIO_Pin_3); GPIO_SetBits(GPIOC, GPIO_Pin_4); GPIO_SetBits(GPIOC, GPIO_Pin_5); GPIO_SetBits(GPIOC, GPIO_Pin_6); GPIO_SetBits(GPIOC, GPIO_Pin_7); GPIO_SetBits(GPIOC, GPIO_Pin_8); GPIO_SetBits(GPIOC, GPIO_Pin_9); } else if (button == 13) { GPIO_SetBits(GPIOC, GPIO_Pin_3); GPIO_SetBits(GPIOC, GPIO_Pin_4); GPIO_SetBits(GPIOC, GPIO_Pin_5); GPIO_SetBits(GPIOC, GPIO_Pin_6); GPIO_SetBits(GPIOC, GPIO_Pin_7); GPIO_SetBits(GPIOC, GPIO_Pin_8); GPIO_SetBits(GPIOC, GPIO_Pin_9); } else if (button == 14) { GPIO_SetBits(GPIOC, GPIO_Pin_5); GPIO_SetBits(GPIOC, GPIO_Pin_6); GPIO_SetBits(GPIOC, GPIO_Pin_7); GPIO_SetBits(GPIOC, GPIO_Pin_8); GPIO_SetBits(GPIOC, GPIO_Pin_9); } else if (button == 15) { GPIO_SetBits(GPIOC, GPIO_Pin_6); GPIO_SetBits(GPIOC, GPIO_Pin_7); GPIO_SetBits(GPIOC, GPIO_Pin_8); GPIO_SetBits(GPIOC, GPIO_Pin_9); } else if (button == 16) { GPIO_SetBits(GPIOC, GPIO_Pin_7); GPIO_SetBits(GPIOC, GPIO_Pin_8); GPIO_SetBits(GPIOC, GPIO_Pin_9); } else if (button == 17) { GPIO_SetBits(GPIOC, GPIO_Pin_8); GPIO_SetBits(GPIOC, GPIO_Pin_9); } else if (button == 18) { GPIO_SetBits(GPIOC, GPIO_Pin_9); } } if (GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_13) == 1) { GPIO_ResetBits(GPIOC, 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_Pin_8|GPIO_Pin_9); } if (button >= 18) { button = 0; } EXTI_ClearITPendingBit(EXTI_Line13); } } /****************************************************/ Trochę "elegantsza" wersja #include "stm32f10x.h" int button = 0; volatile uint32_t timer_ms = 0; void SysTick_Handler() { if (timer_ms) { timer_ms--; } } void delay_ms(int time) { timer_ms = time; while (timer_ms) {}; } int main(void) { GPIO_InitTypeDef gpio; EXTI_InitTypeDef exti; NVIC_InitTypeDef nvic; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOC, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); gpio.GPIO_Pin = GPIO_Pin_13; gpio.GPIO_Mode = GPIO_Mode_IPU; GPIO_Init(GPIOC, &gpio); GPIO_StructInit(&gpio); gpio.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_Pin_8|GPIO_Pin_9; gpio.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOC, &gpio); GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource13); EXTI_StructInit(&exti); exti.EXTI_Line = EXTI_Line13; exti.EXTI_Mode = EXTI_Mode_Interrupt; exti.EXTI_Trigger = EXTI_Trigger_Rising_Falling; exti.EXTI_LineCmd = ENABLE; EXTI_Init(&exti); nvic.NVIC_IRQChannel = EXTI15_10_IRQn; nvic.NVIC_IRQChannelPreemptionPriority = 0x00; nvic.NVIC_IRQChannelSubPriority = 0x00; nvic.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&nvic); uint32_t i = 0; SysTick_Config(SystemCoreClock / 1000); while (1) { for ( i = 0 ; i < 10; i++) { GPIO_SetBits(GPIOC, 1 << i); delay_ms(200); if ( i > 10 ) { i=0; } } for (i = 0; i < 10; i++) { GPIO_ResetBits(GPIOC, 1 << i); delay_ms(200); } } } o to w tym zadaniu chodziło? Pozdrawiam!
  4. Witajcie, po ogłoszeniu o rozpoczęciu kursu na waszej stronie zbierałem się, żeby kupić płytkę i zacząć na niej coś robić. Teraz próbuję was nadgonić. Mam nadzieję, że na stare wątki jeszcze zaglądacie 🙂. W tej chwili rozwiązałem zadanie 4.2 i mam do niego pytanie. Ale najpierw kod: #include "stm32f10x.h" int button = 0; int main(void) { GPIO_InitTypeDef gpio; EXTI_InitTypeDef exti; NVIC_InitTypeDef nvic; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOC, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); gpio.GPIO_Pin = GPIO_Pin_13; gpio.GPIO_Mode = GPIO_Mode_IPU; GPIO_Init(GPIOC, &gpio); GPIO_StructInit(&gpio); gpio.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_Pin_8|GPIO_Pin_9; gpio.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOC, &gpio); GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource13); EXTI_StructInit(&exti); exti.EXTI_Line = EXTI_Line13; exti.EXTI_Mode = EXTI_Mode_Interrupt; exti.EXTI_Trigger = EXTI_Trigger_Rising_Falling; exti.EXTI_LineCmd = ENABLE; EXTI_Init(&exti); nvic.NVIC_IRQChannel = EXTI15_10_IRQn; nvic.NVIC_IRQChannelPreemptionPriority = 0x00; nvic.NVIC_IRQChannelSubPriority = 0x00; nvic.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&nvic); while (1) //dlaczego ta pętla jest tak bardzo ważna? { } } void EXTI15_10_IRQHandler() { if (EXTI_GetITStatus(EXTI_Line13)) { button++; while (GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_13) == 0) { if (button == 1) { GPIO_SetBits(GPIOC, GPIO_Pin_0); } else if (button == 2) { GPIO_SetBits(GPIOC, GPIO_Pin_1); } else if (button == 3) { GPIO_SetBits(GPIOC, GPIO_Pin_2); } else if (button == 4) { GPIO_SetBits(GPIOC, GPIO_Pin_3); } else if (button == 5) { GPIO_SetBits(GPIOC, GPIO_Pin_4); } else if (button == 6) { GPIO_SetBits(GPIOC, GPIO_Pin_5); } else if (button == 7) { GPIO_SetBits(GPIOC, GPIO_Pin_6); } else if (button == 8) { GPIO_SetBits(GPIOC, GPIO_Pin_7); } else if (button == 9) { GPIO_SetBits(GPIOC, GPIO_Pin_8); } else if (button == 10) { GPIO_SetBits(GPIOC, GPIO_Pin_9); } } if (GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_13) == 1) { GPIO_ResetBits(GPIOC, 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_Pin_8|GPIO_Pin_9); } if (button >= 10) { button = 0; } EXTI_ClearITPendingBit(EXTI_Line13); } } Interesuje mnie pętla "while (1) {}". Po jej usunięcie program nie działa. Po przeniesieniu pętli "void EXTI15_10_IRQHandler(){...} " wewnątrz while(1) również wsio się sypie. Czemu tak się dzieje? Pozdrawiam i z góry dziękuję za odpowiedź. EDIT: Poczytałem kod Vroobee i zrozumiałem o co chodzi. W pętli while(1) jest główny program a pod void EXTI15_10_IRQHandler(){...} jest instrukcja przerwania i w niej jest zawarte, co ma się dziać, gdy to przerwanie nastąpi. czytaj kurs ze zrozumieniem, argens...
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.