int main(void) { SystemInit(); STM32F4_Discovery_LEDInit(LED3); //Orange STM32F4_Discovery_LEDInit(LED4); //Green STM32F4_Discovery_LEDInit(LED5); //Red STM32F4_Discovery_LEDInit(LED6); //Blue STM32F4_Discovery_PBInit(BUTTON_USER, BUTTON_MODE_GPIO); USBD_Init(&USB_OTG_dev,USB_OTG_FS_CORE_ID,&USR_desc,&USBD_CDC_cb,&USR_cb); while (1){ if(usb_cdc_kbhit()){ char c, buffer_out[15]; c = usb_cdc_getc(); switch(c){ case '3': STM32F4_Discovery_LEDToggle(LED3); sprintf(buffer_out,"LED%c = %u\r\n",c,GPIO_ReadInputDataBit(GPIOD,LED3_PIN)); usb_cdc_printf(buffer_out); break; case '4': STM32F4_Discovery_LEDToggle(LED4); sprintf(buffer_out,"LED%c = %u\r\n",c,GPIO_ReadInputDataBit(GPIOD,LED4_PIN)); usb_cdc_printf(buffer_out); break; case '5': STM32F4_Discovery_LEDToggle(LED5); sprintf(buffer_out,"LED%c = %u\r\n",c,GPIO_ReadInputDataBit(GPIOD,LED5_PIN)); usb_cdc_printf(buffer_out); break; case '6': STM32F4_Discovery_LEDToggle(LED6); sprintf(buffer_out,"LED%c = %u\r\n",c,GPIO_ReadInputDataBit(GPIOD,LED6_PIN)); usb_cdc_printf(buffer_out); break; } } button_sts = STM32F4_Discovery_PBGetState(BUTTON_USER); if(button_sts){ STM32F4_Discovery_LEDOff(LED3); STM32F4_Discovery_LEDOff(LED5); STM32F4_Discovery_LEDOff(LED3); STM32F4_Discovery_LEDOff(LED5); } } }
//============================================================================== // descri: Função para o timer do STEP dos MOTORES // USER EDIT - Mudar o nome do IRQ se o TIMER for alterado void TIM3_IRQHandler(void) { // Channel 1 - MOTOR 1 if ((STPDRV_TIM->SR & TIM_IT_CC1) && (STPDRV_TIM->DIER & TIM_IT_CC1)) { STPDRV_TIM->CCR1 += Motors[0].CurDelay; if (MOTOR1_STEP_PORT->IDR & MOTOR1_STEP_PIN) { //MOTOR1_STEP_PORT->BSRRH = MOTOR1_STEP_PIN; MOTOR1_STEP_PORT->BRR = MOTOR1_STEP_PIN; #ifdef __STM32F4_DISCOVERY_H STM32F4_Discovery_LEDOff(LED3); #endif } else { //MOTOR1_STEP_PORT->BSRRL = MOTOR1_STEP_PIN; MOTOR1_STEP_PORT->BSRR = MOTOR1_STEP_PIN; #ifdef __STM32F4_DISCOVERY_H STM32F4_Discovery_LEDOn(LED3); #endif if (Motors[0].Dir == dir_CW) Motors[0].Pos++; else Motors[0].Pos--; } STPDRV_TIM->SR = ~TIM_IT_CC1; } // Channel 2 - MOTOR 2 if ((STPDRV_TIM->SR & TIM_IT_CC2) && (STPDRV_TIM->DIER & TIM_IT_CC2)) { STPDRV_TIM->CCR2 += Motors[1].CurDelay; if (MOTOR2_STEP_PORT->IDR & MOTOR2_STEP_PIN) { //MOTOR2_STEP_PORT->BSRRH = MOTOR2_STEP_PIN; MOTOR2_STEP_PORT->BRR = MOTOR1_STEP_PIN; } else { //MOTOR2_STEP_PORT->BSRRL = MOTOR2_STEP_PIN; MOTOR2_STEP_PORT->BSRR = MOTOR2_STEP_PIN; if (Motors[1].Dir == dir_CW) Motors[1].Pos++; else Motors[1].Pos--; } STPDRV_TIM->SR = ~TIM_IT_CC2; } // Channel 3 - MOTOR 1 ACELL / DECCEL if ((STPDRV_TIM->SR & TIM_IT_CC3) && (STPDRV_TIM->DIER & TIM_IT_CC3)) { STPDRV_TIM->CCR3 += Motors[0].RampDelay; __OnRampTimer(0); STPDRV_TIM->SR = ~TIM_IT_CC3; } // Channel 4 - MOTOR 2 ACELL / DECCEL if ((STPDRV_TIM->SR & TIM_IT_CC4) && (STPDRV_TIM->DIER & TIM_IT_CC4)) { STPDRV_TIM->CCR4 += Motors[1].RampDelay; __OnRampTimer(1); STPDRV_TIM->SR = ~TIM_IT_CC4; } }
void TIM3_IRQHandler(void) { if(TIM_GetITStatus(TIM3, TIM_IT_CC1) != RESET) { TIM_ClearITPendingBit(TIM3, TIM_IT_CC1); if(PulseGeneratorData[0].set) { //Set pin to reset state if(!PulseGeneratorData[0].polarity) GPIOA->BSRRH |= 1 << 6; else GPIOA->BSRRL |= 1 << 6; STM32F4_Discovery_LEDOff(LED3); } PulseGeneratorData[0].set = false; } else if(TIM_GetITStatus(TIM3, TIM_IT_CC2) != RESET) { TIM_ClearITPendingBit(TIM3, TIM_IT_CC2); if(PulseGeneratorData[1].set) { //Set pin to reset state if(!PulseGeneratorData[1].polarity) GPIOA->BSRRH |= 1 << 7; else GPIOA->BSRRL |= 1 << 7; } PulseGeneratorData[1].set = false; } else if(TIM_GetITStatus(TIM3, TIM_IT_CC3) != RESET) { TIM_ClearITPendingBit(TIM3, TIM_IT_CC3); if(PulseGeneratorData[2].set) { //Set pin to reset state if(!PulseGeneratorData[2].polarity) GPIOB->BSRRH |= 1 << 0; else GPIOB->BSRRL |= 1 << 0; } PulseGeneratorData[2].set = false; } else if(TIM_GetITStatus(TIM3, TIM_IT_CC4) != RESET) { TIM_ClearITPendingBit(TIM3, TIM_IT_CC4); } }
int main(void) { STM32F4_Discovery_LEDInit(LED3); STM32F4_Discovery_LEDInit(LED4); STM32F4_Discovery_LEDInit(LED5); STM32F4_Discovery_LEDInit(LED6); STM32F4_Discovery_PBInit(BUTTON_USER, BUTTON_MODE_GPIO); STM32F4_Discovery_LEDOn(LED3); Delay(0xFFFF); STM32F4_Discovery_LEDOff(LED3); USBD_Init(&USB_OTG_dev, #ifdef USE_USB_OTG_HS USB_OTG_HS_CORE_ID, #else USB_OTG_FS_CORE_ID, #endif &USR_desc, &USBD_HID_cb, &USR_cb); Init_ADC_Reading(); int x=0; while (1) { Delay(0xFF); if (OutBuffer[1]%2==1) { switch(x) { case 1: STM32F4_Discovery_LEDOn(LED3); break; case 999999: STM32F4_Discovery_LEDOff(LED3); STM32F4_Discovery_LEDOn(LED4); break; case 2*999999: STM32F4_Discovery_LEDOff(LED4); STM32F4_Discovery_LEDOn(LED5); break; case 3*999999: STM32F4_Discovery_LEDOff(LED5); STM32F4_Discovery_LEDOn(LED6); break; case 4*999999: STM32F4_Discovery_LEDOff(LED6); x=0; } x++; } else { if (OutBuffer[0]%5==1) STM32F4_Discovery_LEDOn(LED3); else STM32F4_Discovery_LEDOff(LED3); if (OutBuffer[0]%5==2) STM32F4_Discovery_LEDOn(LED4); else STM32F4_Discovery_LEDOff(LED4); if (OutBuffer[0]%5==3) STM32F4_Discovery_LEDOn(LED5); else STM32F4_Discovery_LEDOff(LED5); if (OutBuffer[0]%5==4) STM32F4_Discovery_LEDOn(LED6); else STM32F4_Discovery_LEDOff(LED6); } } }
int main(void) { SystemInit(); SystemCoreClockUpdate(); // inicjalizacja dystrybucji czasu procesora /* Enable the SPI periph */ RCC_APB2PeriphClockCmd(LIS302DL_SPI_CLK, ENABLE); /* Enable SCK, MOSI and MISO GPIO clocks */ RCC_AHB1PeriphClockCmd(LIS302DL_SPI_SCK_GPIO_CLK | LIS302DL_SPI_MISO_GPIO_CLK | LIS302DL_SPI_MOSI_GPIO_CLK, ENABLE); /* Enable CS GPIO clock */ RCC_AHB1PeriphClockCmd(LIS302DL_SPI_CS_GPIO_CLK, ENABLE); /* Enable INT1 GPIO clock */ RCC_AHB1PeriphClockCmd(LIS302DL_SPI_INT1_GPIO_CLK, ENABLE); /* Enable INT2 GPIO clock */ RCC_AHB1PeriphClockCmd(LIS302DL_SPI_INT2_GPIO_CLK, ENABLE); GPIO_PinAFConfig(LIS302DL_SPI_SCK_GPIO_PORT, LIS302DL_SPI_SCK_SOURCE, LIS302DL_SPI_SCK_AF); GPIO_PinAFConfig(LIS302DL_SPI_MISO_GPIO_PORT, LIS302DL_SPI_MISO_SOURCE, LIS302DL_SPI_MISO_AF); GPIO_PinAFConfig(LIS302DL_SPI_MOSI_GPIO_PORT, LIS302DL_SPI_MOSI_SOURCE, LIS302DL_SPI_MOSI_AF); GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; /* SPI SCK pin configuration */ GPIO_InitStructure.GPIO_Pin = LIS302DL_SPI_SCK_PIN; GPIO_Init(LIS302DL_SPI_SCK_GPIO_PORT, &GPIO_InitStructure); /* SPI MOSI pin configuration */ GPIO_InitStructure.GPIO_Pin = LIS302DL_SPI_MOSI_PIN; GPIO_Init(LIS302DL_SPI_MOSI_GPIO_PORT, &GPIO_InitStructure); /* SPI MISO pin configuration */ GPIO_InitStructure.GPIO_Pin = LIS302DL_SPI_MISO_PIN; GPIO_Init(LIS302DL_SPI_MISO_GPIO_PORT, &GPIO_InitStructure); /* SPI configuration -------------------------------------------------------*/ SPI_InitTypeDef SPI_InitStructure; SPI_I2S_DeInit(LIS302DL_SPI); SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b; SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low; SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge; SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_4; SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; SPI_InitStructure.SPI_CRCPolynomial = 7; SPI_InitStructure.SPI_Mode = SPI_Mode_Master; SPI_Init(LIS302DL_SPI, &SPI_InitStructure); /* Enable SPI1 */ SPI_Cmd(LIS302DL_SPI, ENABLE); /* Configure GPIO PIN for Lis Chip select */ GPIO_InitStructure.GPIO_Pin = LIS302DL_SPI_CS_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(LIS302DL_SPI_CS_GPIO_PORT, &GPIO_InitStructure); /* Deselect : Chip Select high */ GPIO_SetBits(LIS302DL_SPI_CS_GPIO_PORT, LIS302DL_SPI_CS_PIN); /* Configure GPIO PINs to detect Interrupts */ GPIO_InitStructure.GPIO_Pin = LIS302DL_SPI_INT1_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_Init(LIS302DL_SPI_INT1_GPIO_PORT, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = LIS302DL_SPI_INT2_PIN; GPIO_Init(LIS302DL_SPI_INT2_GPIO_PORT, &GPIO_InitStructure); LIS302DL_InitTypeDef LIS302DL_InitStruct; uint8_t ctrl = 0x00; /* Set configuration of LIS302DL*/ LIS302DL_InitStruct.Power_Mode = LIS302DL_LOWPOWERMODE_ACTIVE; LIS302DL_InitStruct.Output_DataRate = LIS302DL_DATARATE_100; LIS302DL_InitStruct.Axes_Enable = LIS302DL_X_ENABLE | LIS302DL_Y_ENABLE | LIS302DL_Z_ENABLE; LIS302DL_InitStruct.Full_Scale = LIS302DL_FULLSCALE_2_3; LIS302DL_InitStruct.Self_Test = LIS302DL_SELFTEST_NORMAL; LIS302DL_Init(&LIS302DL_InitStruct); LIS302DL_InterruptConfigTypeDef LIS302DL_InterruptStruct; /* Set configuration of Internal High Pass Filter of LIS302DL*/ LIS302DL_InterruptStruct.Latch_Request = LIS302DL_INTERRUPTREQUEST_LATCHED; LIS302DL_InterruptStruct.SingleClick_Axes = LIS302DL_CLICKINTERRUPT_Z_ENABLE; LIS302DL_InterruptStruct.DoubleClick_Axes = LIS302DL_DOUBLECLICKINTERRUPT_Z_ENABLE; LIS302DL_InterruptConfig(&LIS302DL_InterruptStruct); RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD | RCC_AHB1Periph_GPIOA, ENABLE); /* Configure PD12, PD13, PD14 and PD15 in output pushpull mode */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12 | GPIO_Pin_13| GPIO_Pin_14| GPIO_Pin_15; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_Init(GPIOD, &GPIO_InitStructure); STM32F4_Discovery_LEDInit(LED3); STM32F4_Discovery_LEDInit(LED4); STM32F4_Discovery_LEDInit(LED5); STM32F4_Discovery_LEDInit(LED6); STM32F4_Discovery_PBInit(BUTTON_USER, BUTTON_MODE_GPIO); STM32F4_Discovery_LEDOn(LED3); Delay(0xFFFF); STM32F4_Discovery_LEDOff(LED3); USBD_Init(&USB_OTG_dev, #ifdef USE_USB_OTG_HS USB_OTG_HS_CORE_ID, #else USB_OTG_FS_CORE_ID, #endif &USR_desc, &USBD_HID_cb, &USR_cb); //char button=0; while (1) { Delay(0xFF); if (OutBuffer[0]&1) STM32F4_Discovery_LEDOn(LED3); else STM32F4_Discovery_LEDOff(LED3); if (OutBuffer[0]&2) STM32F4_Discovery_LEDOn(LED4); else STM32F4_Discovery_LEDOff(LED4); if (OutBuffer[0]&4) STM32F4_Discovery_LEDOn(LED5); else STM32F4_Discovery_LEDOff(LED5); if (OutBuffer[0]&8) STM32F4_Discovery_LEDOn(LED6); else STM32F4_Discovery_LEDOff(LED6); //if ((STM32F4_Discovery_PBGetState(BUTTON_USER) == Bit_SET)&&(button==0)) // { // int i=0; Delay(0xFF); InBuffer[0] = przyspieszenie_x; InBuffer[1] = przyspieszenie_y; USBD_HID_SendReport (&USB_OTG_dev, InBuffer, 64); // } // button = STM32F4_Discovery_PBGetState(BUTTON_USER); LIS302DL_Read(&przyspieszenie_x, LIS302DL_OUT_X_ADDR, 1); if(przyspieszenie_x>127) { przyspieszenie_x=przyspieszenie_x-1; przyspieszenie_x=(~przyspieszenie_x)&0xFF; przyspieszenie_x=-przyspieszenie_x; } LIS302DL_Read(&przyspieszenie_y, LIS302DL_OUT_Y_ADDR, 1); if(przyspieszenie_y>127) { przyspieszenie_y=przyspieszenie_y-1; przyspieszenie_y=(~przyspieszenie_y)&0xFF; przyspieszenie_y=-przyspieszenie_y; } /*LIS302DL_Read(&przyspieszenie_z, LIS302DL_OUT_Z_ADDR, 1); if(przyspieszenie_z>127) { przyspieszenie_z=przyspieszenie_z-1; przyspieszenie_z=(~przyspieszenie_z)&0xFF; przyspieszenie_z=-przyspieszenie_z; }*/ } }