void MotoInit(void) { RCC_Configuration(); GPIO_Config(); TIM3_Config(); RightForward(); }
void main(void) { /* Clock configuration -----------------------------------------*/ CLK_Config(); /* GPIO configuration ------------------------------------------*/ GPIO_Config_Init(); TIM3_Config(); TIM4_Config(); UART1_Config(); UART3_Config(); enableInterrupts(); DeviceStatus.workState = 16; Delay(200); //beep Set_Beep_OptionByte(); Beep_Init(BEEP_FREQUENCY_4KHZ); BEEP_LSICalibrationConfig(LSI_128kHz); showAll(); PowerOnBeep(); clear(); TIM2_Config(); showTemp(Temperature[DeviceStatus.workState], ON); showSymbol(SYMBOL_DEFAULT); FunctionReport(DeviceStatus.workState); while (1) { if(DeviceStatus.Time_100ms == 1) { if(UART1_GetFlagStatus(UART1_FLAG_IDLE) == SET) { if(DataSize != 0) { DataResolve(RxRecvBuffer, DataSize); DataSize = 0; } } DeviceStatus.Time_100ms = 0; } } }
/** * @brief Main program. * @param None * @retval None */ void main(void) { /*--------------------- TIM2 Clock = 16Mhz ----------------*/ CLK_MasterPrescalerConfig(CLK_MasterPrescaler_HSIDiv1); /*--------------------- TIM3 Config------------------------*/ TIM3_Config(); /*--------------------- TIM2 Config------------------------*/ TIM2_Config(); /* Compute TIM3 CC2 clock frequency */ TIM3ClockFreq = (8 * TIM2ClockFreq) / (ICValue2 - ICValue1); /* Insert a break point here */ nop(); while (1) {} }
__task void LED_task(void) { LED_Init(); adc_init(); TIM3_Config(10000); //setup frequency of 10kHz /*GPIO_SetBits(GPIOC, GPIO_Pin_8); GPIO_ResetBits(GPIOC, GPIO_Pin_8); GPIO_SetBits(GPIOC, GPIO_Pin_9); os_dly_wait(50); GPIO_ResetBits(GPIOC, GPIO_Pin_8); GPIO_ResetBits(GPIOC, GPIO_Pin_9); */ while(1) { } }
/** * @brief Main program. * @param None * @retval None */ int main(void) { /*!< At this stage the microcontroller clock setting is already configured, this is done through SystemInit() function which is called from startup file (startup_stm32f30x.s) before to branch to application main. To reconfigure the default setting of SystemInit() function, refer to system_stm32f30x.c file */ /* DMA1 channel1 configuration */ DMA_Config(); /* TIM3 channel3 configuration */ TIM3_Config(); /* ADC channel7 configuration */ ADC_Config(); while (1) { } }
//TIMER3初始化 void Tim3_Init(void) { Tim3_NVIC_Config(); TIM3_Config(); }
// ---------------------------------------------------------------------------- void HwInit( void ) { SystemCoreClockUpdate( ); // Make sure SysTick is running at a 1ms rate. if ( SysTick_Config( SystemCoreClock / 1000 ) ) { /* Capture error */ while ( 1 ); } // SysTick_CLKSourceConfig( SysTick_CLKSource_HCLK_Div8 ); /* Initialize Leds mounted on STM32F4-Discovery board */ STM_EVAL_LEDInit(LED4); STM_EVAL_LEDInit(LED3); STM_EVAL_LEDInit(LED5); STM_EVAL_LEDInit(LED6); /* Turn on LED4 and LED5 */ STM_EVAL_LEDOn(LED4); STM_EVAL_LEDOn(LED5); /* TIM Configuration */ TIM3_Config(); TIM4_Config(); /* ----------------------------------------------------------------------- TIM3 Configuration: generate 4 PWM signals with 4 different duty cycles. In this example TIM3 input clock (TIM3CLK) is set to 2 * APB1 clock (PCLK1), since APB1 prescaler is different from 1. TIM3CLK = 2 * PCLK1 PCLK1 = HCLK / 4 => TIM3CLK = HCLK / 2 = SystemCoreClock /2 To get TIM3 counter clock at 28 MHz, the prescaler is computed as follows: Prescaler = (TIM3CLK / TIM3 counter clock) - 1 Prescaler = ((SystemCoreClock /2) /28 MHz) - 1 To get TIM3 output clock at 30 KHz, the period (ARR)) is computed as follows: ARR = (TIM3 counter clock / TIM3 output clock) - 1 = 665 TIM3 Channel1 duty cycle = (TIM3_CCR1/ TIM3_ARR)* 100 = 50% TIM3 Channel2 duty cycle = (TIM3_CCR2/ TIM3_ARR)* 100 = 37.5% TIM3 Channel3 duty cycle = (TIM3_CCR3/ TIM3_ARR)* 100 = 25% TIM3 Channel4 duty cycle = (TIM3_CCR4/ TIM3_ARR)* 100 = 12.5% Note: SystemCoreClock variable holds HCLK frequency and is defined in system_stm32f4xx.c file. Each time the core clock (HCLK) changes, user had to call SystemCoreClockUpdate() function to update SystemCoreClock variable value. Otherwise, any configuration based on this variable will be incorrect. ----------------------------------------------------------------------- */ /* Compute the prescaler value */ PrescalerValue = (uint16_t) ((SystemCoreClock /2) / 28000000) - 1; /* Time base configuration */ TIM_TimeBaseStructure.TIM_Period = 665; TIM_TimeBaseStructure.TIM_Prescaler = PrescalerValue; TIM_TimeBaseStructure.TIM_ClockDivision = 0; TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseInit( TIM3, &TIM_TimeBaseStructure ); TIM_TimeBaseInit( TIM4, &TIM_TimeBaseStructure ); /* PWM1 Mode configuration: Channel1 */ TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; TIM_OCInitStructure.TIM_Pulse = CCR1_Val; TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; TIM_OC1Init( TIM3, &TIM_OCInitStructure ); TIM_OC1Init( TIM4, &TIM_OCInitStructure ); TIM_OC1PreloadConfig( TIM3, TIM_OCPreload_Enable ); TIM_OC1PreloadConfig( TIM4, TIM_OCPreload_Enable ); /* PWM1 Mode configuration: Channel2 */ TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; TIM_OCInitStructure.TIM_Pulse = CCR2_Val; TIM_OC2Init( TIM3, &TIM_OCInitStructure ); TIM_OC2Init( TIM4, &TIM_OCInitStructure ); TIM_OC2PreloadConfig( TIM3, TIM_OCPreload_Enable ); TIM_OC2PreloadConfig( TIM4, TIM_OCPreload_Enable ); /* PWM1 Mode configuration: Channel3 */ TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; TIM_OCInitStructure.TIM_Pulse = CCR3_Val; TIM_OC3Init( TIM3, &TIM_OCInitStructure ); TIM_OC3Init( TIM4, &TIM_OCInitStructure ); TIM_OC3PreloadConfig( TIM3, TIM_OCPreload_Enable ); TIM_OC3PreloadConfig( TIM4, TIM_OCPreload_Enable ); /* PWM1 Mode configuration: Channel4 */ TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; TIM_OCInitStructure.TIM_Pulse = CCR4_Val; TIM_OC4Init( TIM3, &TIM_OCInitStructure ); TIM_OC4Init( TIM4, &TIM_OCInitStructure ); TIM_OC4PreloadConfig( TIM3, TIM_OCPreload_Enable ); TIM_OC4PreloadConfig( TIM4, TIM_OCPreload_Enable ); TIM_ARRPreloadConfig( TIM3, ENABLE ); TIM_ARRPreloadConfig( TIM4, ENABLE ); /* TIM3 enable counter */ TIM_Cmd( TIM3, ENABLE ); TIM_Cmd( TIM4, ENABLE ); vUSART2_Init(); // Start up UART2 }
void Pulse_Config (void) { // Run timer config and initialise pulses to 50:50 duty cycle TIM3_Config(); PWM_Config(TIM3_ARR); }
int main(void) { /*!< At this stage the microcontroller clock setting is already configured, this is done through SystemInit() function which is called from startup file (startup_stm32f4xx.s) before to branch to application main. To reconfigure the default setting of SystemInit() function, refer to system_stm32f4xx.c file */ //initiate user button PB_Config(); //initiate LEDs and turn them on LED_Config(); /* ----------------------------------------------------------------------- TIM3 Configuration: Output Compare Timing Mode: In this example TIM3 input clock (TIM3CLK) is set to 2 * APB1 clock (PCLK1), since APB1 prescaler is different from 1. TIM3CLK = 2 * PCLK1 PCLK1 = HCLK / 4 => TIM3CLK = HCLK / 2 = SystemCoreClock /2 To get TIM3 counter clock at 50 MHz, the prescaler is computed as follows: Prescaler = (TIM3CLK / TIM3 counter clock) - 1 Prescaler = ((SystemCoreClock /2) /0.5 MHz) - 1 CC1 update rate = TIM3 counter clock / CCR1_Val = 10.0 Hz ==> Toggling frequency = 5 Hz Note: SystemCoreClock variable holds HCLK frequency and is defined in system_stm32f4xx.c file. Each time the core clock (HCLK) changes, user had to call SystemCoreClockUpdate() function to update SystemCoreClock variable value. Otherwise, any configuration based on this variable will be incorrect. ----------------------------------------------------------------------- */ //=======================Configure and init Timer====================== /* Compute the prescaler value */ PrescalerValue = (uint16_t) ((SystemCoreClock / 2) / 500000) - 1; /* TIM Configuration */ TIM3_Config(); // configure the output compare TIM3_OCConfig(); /* TIM Interrupts enable */ TIM_ITConfig(TIM3, TIM_IT_CC1, ENABLE); /* TIM3 enable counter */ TIM_Cmd(TIM3, ENABLE); //======================================configure and init LCD ====================== /* LCD initiatization */ LCD_Init(); /* LCD Layer initiatization */ LCD_LayerInit(); /* Enable the LTDC */ LTDC_Cmd(ENABLE); /* Set LCD foreground layer */ LCD_SetLayer(LCD_FOREGROUND_LAYER); //================EEPROM init==================================== /* Unlock the Flash Program Erase controller */ FLASH_Unlock(); /* EEPROM Init */ EE_Init(); //============ Set up for random number generation============== RNG_Config(); //with the default font, LCD can display 12 lines of chars, they are LINE(0), LINE(1)...LINE(11) //with the default font, LCD can display 15 columns, they are COLUMN(0)....COLUMN(14) LCD_Clear(LCD_COLOR_WHITE); LCD_DisplayStringLine(LINE(0), (uint8_t *) "Attempt"); LCD_DisplayStringLine(LINE(2), (uint8_t *) "Record"); EE_WriteVariable(VirtAddVarTab[0],VarValue); EE_ReadVariable(VirtAddVarTab[0], &VarDataTab[0]); sprintf(str, "%d", VarDataTab[0]); //LCD_DisplayStringLine(LINE(3), (uint8_t *) str); //randomNumber = RNG_GetRandomNumber()/100000; //sprintf(str, "%d", randomNumber()); //LCD_DisplayStringLine(LINE(5), (uint8_t *) str); resetTimer(); /*the following while loop is where the main part of the code is * it currently uses the userbutton on board since Mario forgot to bring along his * jumper cables to test out the push button part */ //if toggle = 0 lights are blinking //if toggle = 1 2 second wait //if toggle = 2 LED toggle off, the lights stay on //@TODO add external push button to code externalButton(); while (1){ int num = TIM_GetCounter(TIM3); //This is for the start of the procedure if(toggle==0){ if(num == 3000){ STM_EVAL_LEDOn(LED3); STM_EVAL_LEDOn(LED4); } else if(num == 6000){ STM_EVAL_LEDOff(LED3); STM_EVAL_LEDOff(LED4); resetTimer(); } } //if the user button has been pressed and the lights are blinking if (UBPressed==1 && toggle==0) { STM_EVAL_LEDOff(LED3); STM_EVAL_LEDOff(LED4); UBPressed=0; PB_Config(); resetTimerLong(); toggle = 1; rand = randomNumber();//generate a random number } //this is the to get the wait time for the reaction test. if(toggle==1){ if(num == rand){ //if num is equal to the ramdom gened number turn on the LEDs and reset the timer STM_EVAL_LEDOn(LED3); STM_EVAL_LEDOn(LED4); resetTimerLong(); } } //this is the code for when the reaction timer has gone off if (UBPressed==1 && toggle==1) { //this if statement is to prevent cheating //if the number = 0 it means that the user cheated as someone should not be able to get 0 if(num == 0){ ExtButtonPressed=0; PB_Config(); externalButton(); resetTimer(); toggle = 0; }else{ sprintf(str, "%d", num); //this block of code writes to the LCD the lastest user reaction time. LCD_DisplayStringLine(LINE(1), (uint8_t *) " "); LCD_DisplayStringLine(LINE(1), (uint8_t *) str); EE_ReadVariable(VirtAddVarTab[0], &VarDataTab[0]); //this if statement determines wheter the user has beat their best reaction time if(num < VarDataTab[0]){ VarValue = num; EE_WriteVariable(VirtAddVarTab[0],VarValue); } /*the following block of code writes to the LCD the record reaction time*/ EE_ReadVariable(VirtAddVarTab[0], &VarDataTab[0]); sprintf(str, "%d", VarDataTab[0]); LCD_DisplayStringLine(LINE(3), (uint8_t *) " "); LCD_DisplayStringLine(LINE(3), (uint8_t *) str); UBPressed=0; PB_Config(); resetTimerLong(); toggle = 2; } } //the user needs to press the button to get the reaction time game going again. //to reset the reaction timer if (ExtButtonPressed==1) { ExtButtonPressed=0; PB_Config(); externalButton(); resetTimer(); toggle = 0; } } }
void dc_moter_init() { MY_GPIO_Init(); TIM3_Config(); TIM4_Config(); }
/** * @brief Main program. * @param None * @retval None */ int main(void) { float capacitanceratio; /* STM32F3xx HAL library initialization: - Configure the Flash prefetch - Systick timer is configured by default as source of time base, but user can eventually implement his proper time base source (a general purpose timer for example or other time source), keeping in mind that Time base duration should be kept 1ms since PPP_TIMEOUT_VALUEs are defined and handled in milliseconds basis. - Set NVIC Group Priority to 4 - Low Level Initialization */ HAL_Init(); /******* Initialize LEDs available on STM32303E-EVAL RevC board ******************/ BSP_LED_Init(LED1); BSP_LED_Init(LED2); BSP_LED_Init(LED3); BSP_LED_Init(LED4); /* Configure the system clock to 72 MHz */ SystemClock_Config(); /*##-1- Initialize the Key push-button and Joystick ####################################*/ BSP_PB_Init(BUTTON_KEY, BUTTON_MODE_GPIO); BSP_JOY_Init(JOY_MODE_GPIO); /*##-2- Initialize the LCD #################################################*/ /* Initialize the LCD */ BSP_LCD_Init(); /*##-3- Display messages on LCD ############################################*/ /* Display Example Welcome message */ Display_ExampleDescription(); /* Wait For User inputs */ while (1) { if (BSP_PB_GetState(BUTTON_KEY) == GPIO_PIN_RESET) { while (BSP_PB_GetState(BUTTON_KEY) == GPIO_PIN_RESET); break; } } /* Display Example Template */ HYGROMETER_SetHint(); /*##-4- Configure DACx #####################################################*/ /* configure DACx */ DACx_Config(); /*##-5- Configure Comparators ##############################################*/ /* configure COMPx */ COMPx_Config(); /*##-6- Configure Timers ###################################################*/ TIM3_Config(); TIM4_Config(); /*##-7- Start Example ######################################################*/ /* wait until first AvrgICReadValue is calculated */ while(AvrgICReadValue == 0); /* Enter Calibration menu */ Calibration_Menu(); /* Infinite loop */ while (1) { /* Calculate Trigger Time Value */ TriggerTime = (float) (AvrgICReadValue-ICError)/SystemCoreClock; /* Comp4 inverted input connected to DACx : * TriggerTime = RES * Capacitance * ln(VDD/(VDD - VREF)) * @VREF = 2.086V (generated by DAC), ln(VDD/(VDD - VREF)) is ~ 1 * ==> Capacitance = TriggerTime/RES */ Capacitance = (float) TriggerTime/RES; /* Calculate humidity value using reversed polynomial expression */ capacitanceratio = Capacitance/Capacitance55RH; /* RH (%) = -3.4656*10^3 * X^3 + 1.0732*10^4 * X^2 - 1.0457*10^4*X + 3.2459*10^3 with X = C (read) / C@55%RH = capacitanceratio */ RelativeHumidity = RP3 * pow(capacitanceratio, 3) + RP2 * pow(capacitanceratio, 2) + RP1 * capacitanceratio + RP0; /* Restrict Relative Humidity Value to 0-99 Domain */ if (RelativeHumidity < 0) { RelativeHumidity = 0; } if (RelativeHumidity > 99) { RelativeHumidity = 99; } /* Display the humidity value */ Display_Humidity((uint32_t) RelativeHumidity); } }
/** * @brief Main program * @param None * @retval None */ int main(void) { /*!< At this stage the microcontroller clock setting is already configured, this is done through SystemInit() function which is called from startup file (startup_stm32f4xx.s) before to branch to application main. To reconfigure the default setting of SystemInit() function, refer to system_stm32f4xx.c file */ //initiate user button //PB_Config(); STM_EVAL_PBInit(BUTTON_USER, BUTTON_MODE_EXTI); //initiate LEDs and turn them on LED_Config(); /* ----------------------------------------------------------------------- TIM3 Configuration: Output Compare Timing Mode: In this example TIM3 input clock (TIM3CLK) is set to 2 * APB1 clock (PCLK1), since APB1 prescaler is different from 1. TIM3CLK = 2 * PCLK1 PCLK1 = HCLK / 4 => TIM3CLK = HCLK / 2 = SystemCoreClock /2 To get TIM3 counter clock at 50 MHz, the prescaler is computed as follows: Prescaler = (TIM3CLK / TIM3 counter clock) - 1 Prescaler = ((SystemCoreClock /2) /0.5 MHz) - 1 CC1 update rate = TIM3 counter clock / CCR1_Val = 10.0 Hz ==> Toggling frequency = 5 Hz Note: SystemCoreClock variable holds HCLK frequency and is defined in system_stm32f4xx.c file. Each time the core clock (HCLK) changes, user had to call SystemCoreClockUpdate() function to update SystemCoreClock variable value. Otherwise, any configuration based on this variable will be incorrect. ----------------------------------------------------------------------- */ //=======================Configure and init Timer====================== /* Compute the prescaler value */ PrescalerValue = (uint16_t) ((SystemCoreClock / 2) / 500000) - 1; //configures clock speed at 500 KHz. Both Tim2 and Tim3 use the same prescsaler and therefore run at the same speed. /* TIM Configuration */ TIM3_Config(); TIM2_Config(); // configure the output compare TIM3_OCConfig(); TIM2_OCConfig(); /* TIM Interrupts enable */ TIM_ITConfig(TIM3, TIM_IT_CC1, ENABLE); TIM_ITConfig(TIM2, TIM_IT_CC1, ENABLE); /* TIM3 enable counter */ TIM_Cmd(TIM3, ENABLE); TIM_Cmd(TIM2, ENABLE); //======================================configure and init LCD ====================== /* LCD initiatization */ LCD_Init(); /* LCD Layer initiatization */ LCD_LayerInit(); /* Enable the LTDC */ LTDC_Cmd(ENABLE); /* Set LCD foreground layer */ LCD_SetLayer(LCD_FOREGROUND_LAYER); //================EEPROM init==================================== /* Unlock the Flash Program Erase controller */ FLASH_Unlock(); /* EEPROM Init */ EE_Init(); //============ Set up for random number generation============== RNG_Config(); Ext_PushButton_Interrupt(); //configures external push button //with the default font, LCD can display 12 lines of chars, they are LINE(0), LINE(1)...LINE(11) //with the default font, LCD can display 15 columns, they are COLUMN(0)....COLUMN(14) LCD_Clear(LCD_COLOR_WHITE); //change the background colour of LCD //Display a string in one line, on the first line (line=0) LCD_DisplayString(0, 2, (uint8_t *) "Best: "); //the line will not wrap while (1){ if (UBPressed==1) { //press user button if (pause==1){ //pause mode randnum = ((RNG_GetRandomNumber()%2000)+1000); //generates a random number between 1000 and 3000 Pause_Random(randnum); //see below function to see how the pause is implemented } else { //measure time mode TIM_ITConfig(TIM2, TIM_IT_CC1, DISABLE); //turns off timer 2 TIM_Cmd(TIM2, DISABLE); time = timer; //gets user's time if (initial == 1) { //sets initial best_time to first time best_time = time; initial = 0; LCD_DisplayInt((uint16_t) 0, (uint16_t) 7, best_time); } LCD_DisplayString(2, 1, (uint8_t *) "Time: "); //print time LCD_DisplayString(2, 7, (uint8_t *) " "); //clears line LCD_DisplayInt((uint16_t) 2, (uint16_t) 7, time); //displays user's time LCD_DisplayString(2, 11, (uint8_t *) "ms"); //print ms if (time > 10 && time < best_time) { //set new best time best_time = time; LCD_DisplayString(0, 7, (uint8_t *) " "); //clears line LCD_DisplayInt((uint16_t) 0, (uint16_t) 7, best_time); } TIM_ITConfig(TIM2, TIM_IT_CC1, ENABLE); //turns on timer 2 TIM_Cmd(TIM2, ENABLE); pause = 1; //this makes it so that you can use the user button to repeat the cycle in case you don't have an external push button } UBPressed=0; } } }
/********************************************************************//** * @brief Initializes the TIMx peripheral according to the specified * parameters. * @param[in] TIMx Timer peripheral selected, should be: * - LPC_TIM0: TIMER0 peripheral * - LPC_TIM1: TIMER1 peripheral * - LPC_TIM2: TIMER2 peripheral * - LPC_TIM3: TIMER3 peripheral * @param[in] IntFlag: interrupt type, should be: * - None : No Pin Configuration * - TIM_MR0: Configure for Ext Match channel 0 * - TIM_MR1: Configure for Ext Match channel 1 * - TIM_MR2: Configure for Ext Match channel 2 for only Timer2 * - TIM_MR3: Configure for Ext Match channel 3 for only Timer2 * - TIM_CR0: Configure for Capture channel 0 * - TIM_CR1: Configure for Capture channel 1 * @return None *********************************************************************/ void TIM_Config(LPC_TIM_TypeDef *TIMx, TIM_PCFG_TYPE PCfg) { // Pin configuration for TIM PINSEL_CFG_Type PinCfg; if (TIMx == LPC_TIM0) { switch (PCfg) { case TIM_MR1: // Configure P3.26 as MAT0.1 PinCfg.Funcnum = 2; PinCfg.OpenDrain = 0; PinCfg.Pinmode = 0; PinCfg.Portnum = 3; PinCfg.Pinnum = 26; PINSEL_ConfigPin(&PinCfg); break; case None: break; default: //Error match value //Error loop while(1); } // Pin Configuration TIM0_Config(); // Timer0 Configuration } else if (TIMx == LPC_TIM1) { switch (PCfg) { case TIM_MR0: // Configure P1.22 as MAT1.0 PinCfg.Funcnum = 3; PinCfg.OpenDrain = 0; PinCfg.Pinmode = 0; PinCfg.Portnum = 1; PinCfg.Pinnum = 22; PINSEL_ConfigPin(&PinCfg); break; case TIM_MR1: // Configure P1.25 as MAT1.1 PinCfg.Funcnum = 3; PinCfg.OpenDrain = 0; PinCfg.Pinmode = 0; PinCfg.Portnum = 1; PinCfg.Pinnum = 25; PINSEL_ConfigPin(&PinCfg); break; case TIM_CR0: // Configure P1.18 as CAP1.0 PinCfg.Funcnum = 3; PinCfg.OpenDrain = 0; PinCfg.Pinmode = 0; PinCfg.Portnum = 1; PinCfg.Pinnum = 18; PINSEL_ConfigPin(&PinCfg); break; case TIM_CR1: // Configure P1.19 as CAP1.1 PinCfg.Funcnum = 3; PinCfg.OpenDrain = 0; PinCfg.Pinmode = 0; PinCfg.Portnum = 1; PinCfg.Pinnum = 19; PINSEL_ConfigPin(&PinCfg); break; case None: break; default: //Error match value //Error loop while(1); } TIM1_Config(); // Timer1 Configuration } else if (TIMx == LPC_TIM2) { switch (PCfg) { case TIM_MR0: // Configure P4.28 as MAT2.0 PinCfg.Funcnum = 2; PinCfg.OpenDrain = 0; PinCfg.Pinmode = 0; PinCfg.Portnum = 4; PinCfg.Pinnum = 28; PINSEL_ConfigPin(&PinCfg); break; case None: break; default: //Error match value //Error loop while(1); } // Pin Configuration TIM2_Config(); // Timer2 Configuration } else if (TIMx == LPC_TIM3) { switch (PCfg) { case TIM_MR0: // Configure P0.10 as MAT3.0 PinCfg.Funcnum = 3; PinCfg.OpenDrain = 0; PinCfg.Pinmode = 0; PinCfg.Portnum = 0; PinCfg.Pinnum = 10; PINSEL_ConfigPin(&PinCfg); break; case TIM_MR1: // Configure P0.11 as MAT3.1 PinCfg.Funcnum = 3; PinCfg.OpenDrain = 0; PinCfg.Pinmode = 0; PinCfg.Portnum = 0; PinCfg.Pinnum = 11; PINSEL_ConfigPin(&PinCfg); break; case None: break; default: //Error match value //Error loop while(1); } // Pin Configuration TIM3_Config(); // Timer3 Configuration } }
void TIM3_PWM_Config() { PWM_GPIO_Config(); TIM3_Config(); }
void main(void) { /* Clock configuration -----------------------------------------*/ CLK_Config(); /* GPIO configuration ------------------------------------------*/ GPIO_Config_Init(); UART1_Config(); UART3_Config(); PWM_Config(); TIM2_Config(); TIM3_Config(); TIM4_Config(); I2C_RTC_Init(); /* Enable general interrupts */ enableInterrupts(); //【秒, 分, 时, 日, 星期, 月, 年】 uint8_t time[] = {00, 12, 10, 1, 1, 6, 15}; //Set_RT8563(time, 2, 7); ResetNetMode(); #if 0 uint8_t Alarm[5][3] = {1, 16, 31, 1, 16, 33, 1, 16, 35}; uint8_t Time[7] = {0}; uint8_t AlarmState = 0; uint8_t AlarmDelay = 1; unsigned int NET_AUTO_SEND = 0; #endif while (1) { #if 0 Delay(1000); Send_BAT_Voltage(Get_BAT_Value()); UART3_SendString("\n", 1); AQI2PM25(Get_DS_Value()); #endif if(DeviceStatus.Time_30ms == 1) { TouchKey_Read(); DeviceStatus.Time_30ms = 0; } if(DeviceStatus.Time_100ms == 1) { if(UART1_GetFlagStatus(UART1_FLAG_IDLE) == SET) { if(DataSize != 0) { DataResolve(RxRecvBuffer, DataSize); NetProcess(); DataSize = 0; } } DeviceStatus.Time_100ms = 0; } if(DeviceStatus.Time_1_s == 1) { Get_RT8563(time, 2, 7); #if 0 ArrayCopy((uint8_t *)&NetMode.SendData, time, 7); UART3_SendString((uint8_t *)&NetMode.SendData, 7); if(NetMode.Status & NET_CONNECT) { NET_LED_FLASH; NET_AUTO_SEND++; if(NET_AUTO_SEND == 10)//自动发送数据 { NetSendDataLength(); NET_AUTO_SEND = 0; } } else NET_AUTO_SEND = 0; #endif DeviceStatus.Time_1_s = 0; } if(DeviceStatus.Time_30_s == 1) { NetModeErrorFix(); DeviceStatus.Time_30_s = 0; } #if 0 GetTime(Time); if(ArrayCMP(Alarm, Time, 3) == 0 && AlarmState == 0) { GPIO_WriteHigh(GPIOF, GPIO_PIN_5); FAN_SPEED_HIGH; //高速 Alarm[2] += AlarmDelay; AlarmState = 1; } else if(ArrayCMP(Alarm, Time, 3) == 0 && AlarmState == 1) { GPIO_WriteLow(GPIOF, GPIO_PIN_5); FAN_SPEED_OFF; AlarmState = 0; Alarm[2] -= AlarmDelay; } #endif } }